2016-04-13 3 views
0

Я следил за this link to use a batch transaction without using BATCH keyword.Какое решение для работы с несколькими столами ACID в cassandra

Cluster cluster = Cluster.builder() 
.addContactPoint(“127.0.0.1") 
.build(); 
Session session = cluster.newSession(); 
//Save off the prepared statement you're going to use 
PreparedStatement statement = session.prepare(“INSERT INTO tester.users (userID, firstName, lastName) VALUES (?,?,?)”); 
// 
List<ResultSetFuture> futures = new ArrayList<ResultSetFuture>(); 
for (int i = 0; i < 1000; i++) { 
//please bind with whatever actually useful data you're importing 
BoundStatement bind = statement.bind(i, “John”, “Tester”); 
ResultSetFuture resultSetFuture = session.executeAsync(bind); 
futures.add(resultSetFuture); 
} 
//not returning anything useful but makes sure everything has completed before you exit the thread. 
for(ResultSetFuture future: futures){ 
future.getUninterruptibly(); 
} 
cluster.close(); 

Мой вопрос с данным подходом является возможность INSERT, UPDATE или удалить данные из другой таблицы, и если какой-либо из тех, кто не в состоянии все должно быть неисправно при сохранении той же производительности (как описано в ссылке).

При таком подходе, что я пытался, я пытался вставить, удалить данные из другой таблицы и один запрос получил отказ, поэтому все предыдущие запросы были выполнены и обновлены db.

С BATCH Я вижу, что если какой-либо оператор не получился, вся заявка будет сбой. Но использование BATCH на разных таблицах - это анти-шаблон, так что такое решение?

ответ

1

С BATCH Я вижу, что если какой-либо оператор не получится, вся заявка будет сбой.

Неправильно, гарантия LOGGED BATCH: если некоторые утверждения в партии не работают, они будут повторены до достижения успеха.

Но использование BATCH на разных столах - это анти-шаблон, так что же такое решение?

ACID сделка не возможно с Кассандрой, потребуется какое-то глобальной блокировки или глобальной координации и быть непомерно высокой точки зрения производительности.

Однако, если вы не заботитесь о стоимости производительности, вы можете реализовать вашей собственной личности глобальной системы блокировки/аренды с использованием Облегченно Transaction примитивы, как описано here

Но будьте готовы к снижению производительности

+0

в ссылке gicen только о LWT упоминается не о глобальной блокировке или глобальной координации – manish