Последовательность чтения-записи-записи в Кассандре - PullRequest
9 голосов
/ 29 июля 2011

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

Может ли это быть достигнуто в Кассандре без необходимости выполнять полную проверку на чтение более чем на одном узле?

Использование ConsistencyLevel.QUORUM хорошо при чтении неуказанных данных, и n> 1 узлов фактически читаются. Однако, когда клиент читает с того же узла, с которого он пишет (и фактически использует то же соединение), это может быть расточительным - некоторые базы данных в этом случае всегда гарантируют, что ранее записанные (мои) данные будут возвращены, а не какой-то старый. Использование ConsistencyLevel.ONE делает не гарантирующим это и предполагающим, что это приводит к условиям гонки. Некоторый тест показал это: http://cassandra -user-incubator-apache-org.3065146.n2.nabble.com / per-connection-quot-read-after-my-write-quot-consistency-td6018377.html

Моя гипотетическая установка для этого сценария - 2 узла, коэффициент репликации 2, уровень чтения 1, уровень записи 1. Это приводит к возможной согласованности, но я хочу согласованности чтения-ваших-собственных-записи при чтениях .

Использование 3 узлов: RF = 3, RL = кворум и WL = кворум, по моему мнению, приводит к расточительному запросу на чтение, если я согласен только на «моих» данных достаточно.

// seo: также известен как: согласованность сеанса, согласованность чтения после записи

Ответы [ 2 ]

5 голосов
/ 29 июля 2011

Хороший вопрос.

У нас было некоторое время открыто http://issues.apache.org/jira/browse/CASSANDRA-876, чтобы добавить это, но никто не удосужился завершить его, потому что

  1. CL.ONE простоотлично подходит для МНОГО рабочих нагрузок без какой-либо дополнительной гимнастики
  2. Чтение в любом случае настолько быстрое, что выполнение дополнительного не представляет особой проблемы (и фактически Read Repair, который включен по умолчанию, означает, что все узлы проверяютсяв любом случае, разница между CL.ONE и выше на самом деле больше в доступности, чем в производительности)

Тем не менее, если у вас есть мотивация помочь, попросите билет, и я буду раднаправить вас в правильном направлении.

0 голосов
/ 29 июля 2011

Я некоторое время следил за разработкой Cassandra, и я не видел ни одной подобной функции.

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

Другим способом решения проблемы «посмотреть мои собственные обновления» было бы кэширование результатов где-то ближе к клиенту, будь то на веб-сервере, на уровне приложений или с использованием чего-то вроде memcached.

...