Мы запускаем кластер кассандры с локальным центром обработки данных из 3 узлов и (я полагаю) коэффициентом репликации 3. Удаленный центр обработки данных существует, но не используется в наших запросах.
Мы используем Java библиотек, точнее:
- org. apache .cassandra: cassandra-all в сочетании с com.datastax.cassandra: cassandra- драйвер-ядро v3.1.1 для взаимодействия с базой данных
- info.archinnov: achilles-core v5.1.3 для обработки аннотаций исходного кода - здесь LOCAL_QUORUM указан уровень согласованности
Недавно мы столкнулись с проблемами, связанными с согласованностью чтения после записи для вставки новой строки.
Строка вставляется с использованием LOCAL_QUORUM последовательность. Через несколько миллисекунд после успешной вставки строка, выбранная по ключу секционирования с согласованностью LOCAL_QUORUM , иногда - редко - неудачно. Строка не может быть найдена.
Из моего наивного понимания согласованности LOCAL_QUORUM, если строка записывается, то читается с использованием согласованности LOCAL_QUORUM (с тем же центром обработки данных), ее следует «всегда» находить и читать . Но, похоже, это не то, что происходит.
После прочтения документации Cassandra мне интересно, могут ли проблемы с синхронизацией часов объяснить эту проблему. Пример: узел без строки может иметь заранее установленные часы, и поэтому «нет строки» может рассматриваться как наиболее обновленное значение.
Возможно ли, что проблемы синхронизации часов узла могут объяснить чтение после записи несоответствие для вставки строки (несмотря на LOCAL_QUORUM и один локальный центр обработки данных)? Если нет, то чем можно объяснить такую проблему согласованности?