2015-06-01 4 views
2

Рассмотрим следующий пакетный заявление в Кассандре:Atomic Пакетное в Кассандре

BEGIN BATCH 
INSERT INTO users (userID, password, name) VALUES ('user2', '[email protected]', 'second user') 

UPDATE users SET password = 'ps22dhds' WHERE userID = 'user2' 

DELETE * FROM users WHERE userID = 'user2' 
INSERT INTO users (userID, password, name) VALUES ('user2', '[email protected]', 'Andrew') 
APPLY BATCH; 

Будет ли вышеуказанные заявления в Cassandra партии обеспечивает изоляцию на уровне строк (идент ключ строки) в качестве ключа строки такой же?

ответ

1

Начиная с Cassandra 2.0.6, все пакетные операторы для одного раздела будут выполняться как одна операция обновления. Это будет связано с изоляцией на уровне строк.

+0

http://stackoverflow.com/questions/30565887/cassandra-isolation-in-same-row-key-mutation/30570036#30570036 – Jobs

2

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

Это означает, что все четыре заявления вы написали

INSERT INTO users (userID, password, name) VALUES ('user2', '[email protected]', 'second user') 

UPDATE users SET password = 'ps22dhds' WHERE userID = 'user2' 

DELETE * FROM users WHERE userID = 'user2' 

INSERT INTO users (userID, password, name) VALUES ('user2', '[email protected]', 'Andrew') 

Все произойдет в то же время, в этом случае используется наибольшее значение для обычно модифицированной клетки. В то время как все четыре утверждения применяются, результат, скорее всего, не то, что вы ожидаете.

В основном C * будет видеть

INSERT ('user2', '[email protected]', 'second user') 
INSERT ('user2', 'ps22dhds', 'second user') 
INSERT ('user2', 'Tombstone', 'Tombstone') 
INSERT ('user2', '[email protected]', 'Andrew') 

В этом случае, так как все они имеют тот же временной метки C * разрешает конфликт, выбрав наибольшее значение для ячеек, и вы будете в конечном итоге с (если я не получил байт заказа неправильно здесь)

('user2', 'ps22dhds', 'second user') 

Вместо для этого вида работы рассмотреть с помощью проверки и установки (CAS) операций в C *.

http://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0

+0

Будет выше проблема возникает, если мой ** ** идентификатор пользователя является ключ раздела и ** пароль ** является ключом столбца? Поскольку основной первичный ключ в каждом случае отличается, он будет вставлять данные в качестве нового столбца вправо? –

Смежные вопросы