WedX - журнал о программировании и компьютерных науках

Кассандра противостоит двойному счету

Я новичок в 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';
08.04.2015

  • какая версия кассандры? datastax. com/dev/блог/ 08.04.2015
  • Я использую 2.1. Спасибо за ссылку - посмотрю. 08.04.2015
  • Я до сих пор не понял, что вызывает это, но это проблема только в моей среде разработки. Я использую Play Framework для размещения приложения, и оно находится в режиме разработки локально (как и ожидалось). Вероятно, это связано с этим. В любом случае, это не производственная проблема, поэтому я пока ее проигнорирую. 08.04.2015

Ответы:


1

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

Вы также можете никогда не повторять попытку и занижать счет.

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

Вот соответствующие Jira, которые помогут вам принимать обоснованные решения:

Счетчики ++ (значительное улучшение - исправлено 2.1) -- https://issues.apache.org/jira/browse/CASSANDRA-6504

Проблемы с памятью / сборщиком мусора из-за больших рабочих нагрузок счетчика, столбец счетчика (значительное улучшение — исправлено в версии 2.1) — https://issues.apache.org/jira/browse/CASSANDRA-6405

Счетчики в отдельные ячейки (окончательное решение — эта 3.1) — https://issues.apache.org/jira/browse/CASSANDRA-6506

09.04.2015
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]