База данных Cassandra не очень хороша для агрегации, и именно поэтому я решил сделать агрегацию перед записью. Я храню некоторые данные (например, транзакцию) для каждого пользователя, который я агрегирую по часам. Это означает, что для одного пользователя будет только одна строка для каждого из наших.Cassandra aggregation
Всякий раз, когда я получаю новые данные, я читаю строку текущего часа, суммирую ее с полученными данными и записываю обратно. Я использую эти данные для генерации почасовых отчетов.
Это работает отлично с данными с низкой скоростью, но я наблюдал значительно большую потерю данных, когда скорость очень высокая (например, 100 записей для 1 пользователя в минуту). Это происходит потому, что чтение и запись происходят очень быстро, и из-за «задержки записи» я не получаю обновленные данные.
Я думаю, что мой подход «заполнить перед записью» сам по себе не так. Я думал о UDF, но я не уверен, как это повлияет на производительность.
Каков наилучший способ хранения агрегированных данных в Кассандре?
Какие агрегаты и сколько будет агрегировано при чтении. Как часто он читает? Рассматривали ли вы их агрегацию в пакетах, таких как Spark Streaming? –
В моей тестовой среде я пишу 200 записей за несколько секунд (написал скрипт, который непрерывно отправляет данные). Я читаю строку перед каждой вставкой. Я запускаю этот скрипт каждые 5 мин. Но в производственной среде я ожидаю более высокую скорость, чем это. В худшем случае одновременно может появиться 1000 записей. – RhishiM88
«Лучшие практики» не по теме ** Мнение основано ** и ** слишком широко ** Пожалуйста, прочитайте [Какие типы вопросов я должен избегать?] (Http://stackoverflow.com/help/dont-ask) прежде чем пытаться задать больше вопросов. –