У меня вопрос Кассандры. Вы знаете, как Cassandra обновляет/увеличивает счетчики?как быстро увеличивать счетчики в Кассандре без застоя
Я хочу использовать штурмовой болт (CassandraCounterBatchingBolt из storm-contrib repo on github), который записывается в cassandra. Тем не менее, я не знаю, как некоторые реализации incrementCounterColumn() метод работает .. и есть также ограничения с прилавков Cassandra (от: http://wiki.apache.org/cassandra/Counters), что делает их бесполезными для моего сценария ИМХО:
Если сбой записи неожиданно (тайм-аут или потеря соединения с узлом-координатором), клиент не будет знать, была ли выполнена операция. Повтор может привести к превышению количества CASSANDRA-2495.
Снятие счетчика по существу ограничено. Например, если вы выдаете очень быстро последовательность «приращение, удалить, приращение» можно за удаление теряться
Во всяком случае, вот мой сценарий:
я обновляю тот же счетчик быстрее обновления распространяются на другие узлы Cassandra.
Пример:
Скажем, у меня есть 3 CASSANDRA узлы. Счетчики на каждый из этих узлов равны 0.
Node1: 0, node2: 0, node3: 0Приращение приходит: 5 -> Node1: 0, node2: 0, node3: 0
Increment начинается в узле 2 - по-прежнему должен распространяться на node1 и node3
node1: 0, node2: 5, node3: 0в то же время, другой прирост прибывает до предыдущего приращения
распространяющегося: 3 -> node1: 0, узел2: 5, узел3: 0Предполагая, 3 начинается в другом узле, чем где 5 начала мы имеем:
Node1: 3, узел2: 5, node3: 0
Теперь, если 3 получает распространяются на другие узлы как приращение, а не как новое значение (и то же самое для 5), то в конечном итоге узлы будут равны 8, и это то, что я хочу.
Если 3 перезаписывает 5 (потому что у него более поздняя метка времени), это проблематично - не то, что я хочу.
Вы знаете, как эти обновления/приращения обрабатываются Cassandra?
Обратите внимание, что для чтения перед записью по-прежнему восприимчивы к одной и той же задачи в зависимости от которого копия узла считанных (Кворум Выполняет все еще может потерпеть неудачу, если распространение не далеко вперед)
Я также думаю, что возможно, класть кеш б/у мой штормовой болт, и Кассандра может решить эту проблему, но это история в другое время.
Спасибо за очень подробное объяснение. Отличная ссылка и сообщение! Да, причина, почему последние временные победы выигрывает, - вот почему я задал этот вопрос. Теперь я понимаю, что для счетчиков есть команда приращения (вместо чтения + записи). «Является ли это правдой?» Если я перейду в облако, задержки увеличатся, и чтобы избежать чтения неправильного номера сразу после записи, мне нужно увеличить время, которое я собираю до сохранения в db. Я надеюсь, что инструкция счетчика счетчика существует. – Adrian
Существует инструкция приращения, и вам не нужно читать, прежде чем делать приращение. Если вы делаете приращения с уровнем согласованности QUORUM и читаете с уровнем согласованности QUORUM, вы никогда не должны видеть несоответствий в подсчетах. – Theo
Я должен добавить, что в исключительных обстоятельствах, таких как перегородки и сбои, есть вероятность превышения или подсчета. – Theo