gpt4 book ai didi

c++ - 如何在 Cassandra 中执行具有多个操作的事务

转载 作者:太空狗 更新时间:2023-10-29 22:58:56 28 4
gpt4 key购买 nike

我想在 Cassandra 中执行具有多个写入操作的事务(~5 次插入/更新到不同的表),但如果其中任何一个失败,则不应写入其余部分(回滚每个操作或使整个事务失败) .

请告诉我在 Cassandra 中执行此操作的正确方法是什么以及如何执行(欢迎提供示例)。

最佳答案

是的,您可以使用记录的批处理功能以原子方式完成此操作。请注意,您确实会影响性能。查看BATCH Statements C++ 驱动程序的文档部分。

这是一个如何在 C++ 中执行此操作的示例,摘自上面的文档链接。它演示了如何将 INSERTUPDATEDELETE 一起批处理:

/* This logged batch will makes sure that all the mutations eventually succeed */
CassBatch* batch = cass_batch_new(CASS_BATCH_TYPE_LOGGED);

/* Statements can be immediately freed after being added to the batch */

{
CassStatement* statement
= cass_statement_new(cass_string_init("INSERT INTO example1(key, value) VALUES ('a', '1')"), 0);
cass_batch_add_statement(batch, statement);
cass_statement_free(statement);
}

{
CassStatement* statement
= cass_statement_new(cass_string_init("UPDATE example2 set value = '2' WHERE key = 'b'"), 0);
cass_batch_add_statement(batch, statement);
cass_statement_free(statement);
}

{
CassStatement* statement
= cass_statement_new(cass_string_init("DELETE FROM example3 WHERE key = 'c'"), 0);
cass_batch_add_statement(batch, statement);
cass_statement_free(statement);
}

CassFuture* batch_future = cass_session_execute_batch(session, batch);

/* Batch objects can be freed immediately after being executed */
cass_batch_free(batch);

/* This will block until the query has finished */
CassError rc = cass_future_error_code(batch_future);

printf("Batch result: %s\n", cass_error_desc(rc));

cass_future_free(batch_future);

关于c++ - 如何在 Cassandra 中执行具有多个操作的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38701757/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com