2016-01-14 2 views
8

В частности, я смотрел на this page, где он говорит:Каковы последствия использования легких транзакций?

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

Я смущен относительно того, как выглядит использование LWT для операций чтения. В частности, как это относится к уровням согласованности запросов (и serialConsistency).

description для чтения SERIAL консистенции вызывает дополнительные вопросы:

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

Это означает, что использование SERIAL для чтения не является «использованием LWT».

Но

  • Как Cassandra знать, чтобы проверить наличие сделок в незавершенном, когда вы делаете чтения?
  • Что нового обновления, которое предлагается при чтении, и как это влияет на чтение?
  • Как это работает, если согласованность, которую вы читаете (например, ONE), меньше, чем serialConsistency, используемая для записи?
  • После того, как вы используете LWT на таблице (или в строке? Или столбце?), Читаются ли все, за исключением того, что заставляют брать на себя ответственность за участие в кворумах и алгоритм транзакции?
  • Соответствует ли это требованию ко всей строке или только столбцам, участвующим в условной инструкции?

Если я игнорирую этот совет и выполняю как последовательные, так и не последовательные чтения/записи. Каким образом LWT не удается?

+0

Связанные: http://stackoverflow.com/q/28836083/476716 – OrangeDog

ответ

6

Как известно Кассандре, чтобы проверить на наличие незавершенного производства, когда вы прочитайте?

Это именно то, что указывает уровень согласованности SERIAL. Он гарантирует, что запрос будет возвращать результаты только после того, как все незавершенные транзакции будут полностью выполнены.

Что нового обновления, которое предлагается при чтении, и как это влияет на чтение?

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

Как это работает, если согласованность, которую вы читаете (например, ONE), меньше, чем serialConsistency, используемая для записи?

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

После того, как вы используете LWT на таблице (или строке? Или столбце?), Все ли не SERIAL-чтения вынуждены брать на себя ответственность за участие в кворумах и алгоритм транзакции?

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

Действительно ли это требование применяется ко всей строке или только к столбцам, участвующим в условной инструкции?

Нет, я думаю, вы должны быть в порядке, если используете разные столбцы для последовательного чтения/записи (включая условия) и регулярного чтения/записи.

Если я игнорирую этот совет и делаю как последовательные, так и не последовательные чтения/записи. Каким образом LWT не удается?

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

+0

LWT всегда будут выполняться в контексте ключа раздела. –

+1

«Чтение с использованием SERIAL всегда подразумевает QUORUM как уровень согласованности». Ты уверен? Возможно, это зависит от водителя. Из Java datastax ConsistencyLevel # isSerial исходный код: https://www.insight.io/github.com/datastax/java-driver/blob/3.x/driver-core/src/main/java/com/datastax/ driver/core/ConsistencyLevel.java, «независимо от того, является ли этот уровень согласованности последовательным, то есть относится только к фазе« paxos »облегченной транзакции». – skeller88