Я новичок в Cassandra, и у меня иногда возникает проблема с двойным подсчетом счетчиков. Я пытаюсь отслеживать количество ежедневных событий для определенных событий. Вот структура моей таблицы:
create table pipes.pipe_event_counts (
count counter,
pipe_id text,
event_type text,
date text,
PRIMARY KEY ((pipe_id, event_type, date))
);
Драйвер, который я использую, — это драйвер Datastax Java, и я компилирую и привязываю параметры к следующему подготовленному оператору:
incrementPipeEventCountStatement = CassandraClient.getInstance().getSession().prepare(
QueryBuilder.update("pipes", PIPE_EVENT_COUNT_TABLE_NAME).with(incr("count")).
where(eq("pipe_id", "?")).and(eq("date", "?")).and(eq("event_type", "?")).
getQueryString()
);
incrementPipeEventCountStatement.bind(
event.getAttrubution(Meta.PIPE_ID), dateString, event.getType().toString()
)
Проблема очень странная. Иногда, когда я обрабатываю одно событие, счетчик правильно увеличивается на 1. Однако в большинстве случаев он увеличивается вдвое. Я уже некоторое время смотрю на свой код и не могу найти никаких проблем, которые могли бы вызвать второе приращение.
Подходит ли моя реализация счетчиков в Cassandra для моего варианта использования? Я думаю, что да, но я могу сходить с ума. Я надеюсь, что кто-то может помочь мне подтвердить, чтобы я мог сосредоточиться в нужной области, чтобы найти свою проблему.
Важное редактирование: это запрос, который я запускаю, чтобы проверить количество после события:
select count from pipes.pipe_event_counts where pipe_id = 'homepage' and event_type = 'click' and date = '2015-04-07';