...
For testing different scenarios keyspace and table created
Code Block | ||
---|---|---|
| ||
CREATE KEYSPACE test WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 2}; CREATE TABLE user(name text, id text, PRIMARY KEY (name)); |
In java
Code Block | ||
---|---|---|
| ||
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 | ||
---|---|---|
| ||
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
BATCH_LOG
BATCH
UNLOGGED_BATCH
In cassandra doc it specifies that to increase the performance UNLOGGED_BATCH type should get use.