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
Post a Comment