c++ - How to perform a transaction with multiple operations in Cassandra -


i want perform transaction multiple write operations (~5 inserts/updates different tables) in cassandra if of them fail, rest should not written (either rollback each operation or fail whole transaction).

please let me know proper approach perform in cassandra , how (an example welcomed).

yes, can use logged batch functionality accomplish atomically. note, take hit on performance. see batch statements documentation section of c++ driver.

here example of how in c++, taken documentation link above. demos showing how batch insert, update , delete together:

/* logged batch makes sure mutations succeed */ cassbatch* batch = cass_batch_new(cass_batch_type_logged);  /* statements can freed after being added batch */  {    cassstatement* statement       = cass_statement_new(cass_string_init("insert 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' key = 'b'"), 0);    cass_batch_add_statement(batch, statement);    cass_statement_free(statement); }  {    cassstatement* statement       = cass_statement_new(cass_string_init("delete example3 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 freed after being executed */ cass_batch_free(batch);  /* block until 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); 

Comments