Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

For testing different scenarios keyspace and table created

Code Block
breakoutModewide
CREATE KEYSPACE test WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 2};

CREATE TABLE user(name text, id text, PRIMARY KEY (name));

In java

Code Block
breakoutModewide
PreparedStatement preparedStatement = session.prepare("insert into test2.user (id, name) values (?, ?)");
PreparedStatement preparedStatement2 = session.prepare("update test2.user set id='id_updated-1' where name=?");
PreparedStatement preparedStatement3 = session.prepare("update test2.user set id='id_updated-2' where name=?");


int i = 1;
while(i <= 1000) {
	batchStatement.add(preparedStatement.bind("id_"+i, "user-" + i));
	++i;
}

batchStatement.add(preparedStatement2.bind("user-1"));
batchStatement.add(preparedStatement3.bind("user-2"));

...

The above query will throw exception

Code Block
breakoutModewide
Caused by: com.datastax.driver.core.exceptions.WriteTimeoutException: Cassandra timeout during write query at 
consistency ONE (1 replica were required but only 0 acknowledged the write)

Observation

The 1000 row data got inserted into user table and got updated also as above batch execution

Suggestion

To handle above WriteTimeoutException we can use BatchStatement.Type

Code Block
BatchStatement batchStatement = new BatchStatement(BatchStatement.Type.UNLOGGED);

There is 3 different types are present

  1. BATCH_LOG

  2. BATCH

  3. UNLOGGED_BATCH

    In cassandra doc it specifies that to increase the performance UNLOGGED_BATCH type should get use.