Мы рассматриваем возможность перехода нашего приложения временных рядов с SQL Server на Cassandra, поскольку объем данных становится слишком большим для обработки SQL Server. У нас может быть до 100 датчиков, работающих одновременно (иногда в течение целого года, иногда короче, но обычно по меньшей мере 50 из них одновременно), и каждый из них способен передавать до 20 различных измерений на частоте до 60 Гц (потенциально 120 в будущем).Cassandra: Пояснение данных датчика большого объема
Большинство онлайн-ресурсов (например, DataStax) рекомендуют разделять на «управляемые разделы», что, предположительно, составляет менее 1 000 000 строк (на самом деле, что-то ниже 50 МБ, вероятно, является фактическим показателем). Таким образом, на 1 Гц ставки отчетности, разделение каждого количества датчиков на одну неделе будет производить (7 * 24 * 60 * 60) = 604,800
измерений в раздел:
CREATE TABLE measurements (
sensor_id TEXT,
quantity TEXT,
start_of_week TIMESTAMP,
offset_seconds INT, -- offset from week start (0..604799)
value FLOAT,
PRIMARY KEY ((sensor_id, quantity, start_of_week), offset_seconds)
) WITH CLUSTERING ORDER BY (offset_seconds DESC)
Поэтому, естественно, для 60 Гц ставок отчетности я мог бы разделить на час держать его простой и получить (60 * 60 * 60) = 216,000
измерений на раздел. Или несколько часов, конечно.
Однако у меня есть пара неопределенностей в отношении того, как это будет работать на практике.
До сих пор у нас была довольно денормализованная база данных SQL Server, в которой мы бы поместили все 20 значений из одного датчика в одну строку, и сервер смог продолжить работу (хотя с постоянным постоянством процессора ~ 30%), для до 50 устройств (это в основном 3000 рядов в секунду, и мы предполагаем, что SQL Server может max около 10 000 строк/с). Излишне говорить, что это не может масштабироваться вообще, если на каждое устройство добавляются новые количества, и в то же время много пространства теряется для устройств, которые сообщают о менее чем 20 количествах.
Однако, при использовании подхода C *, приведенного выше, количество пар ключей-значений, хранящихся в секунду (предположительно 100 датчиков, 20 измерений, 60 Гц), будет 120 000 в секунду.
Возможно ли достичь этого с помощью «базовой» установки 3 узлов? Сколько узлов Кассандры необходимо на практике, для таких ставок вставки?
Будет ли перемещать все значения подсетей (60 Гц) для одной величины в один blob улучшить производительность? Это будет означать, что общая скорость ввода будет равна 2 000 blobs, что кажется гораздо более управляемым (и даже размер блоба 240 байтов для 60 значений float32 не кажется таким огромным).
Большую часть времени данные будут отображаться из другой таблицы, которая удерживает предварительно вычисленные мин/макс/среднее агрегаты (пользователь может создать запрос диапазона с полным разрешением в любое время, но и для меньших диапазонов), поэтому наш акцент делается на максимальную пропускную способность записи. Если вы считаете, что любая другая схема может обеспечить лучшую пропускную способность (у меня нет подсказки, возможно, нескольких таблиц/некоторых других стратегий разбиения на разделы/кластеризации), пожалуйста, предложите. Мы даже открыты для перехода на другую базу данных NoSQL, если она может лучше соответствовать нашим требованиям.
Спасибо! Одно из пояснений: 1) означает ли это, что нелегальные партии полностью пропускают журнал фиксации (транзакции)? Кажется, что партии [рекомендуются против] (https://medium.com/@foundev/cassandra-batch-loading-without-the-batch-keyword-40f00e35e23e) некоторыми людьми по причинам, которые вы упомянули сами, но я не Не хотите потерять атомарность/долговечность. И 2) знаете ли вы какие-то практические значения на пропускной способности C * ** в MB **? Так как с 240B-блоками скорость ввода составляет 2000 вставки/с, но она явно отличается от вставки строк 20B. – Lou
(один ответ, очевидно, «почему бы вам не профилировать его и не увидеть самостоятельно», а просто иметь некоторые приблизительные идеи о том, чего ожидать - я не хочу предлагать инвестировать в установку, которая не может работать для нашего использования случай) – Lou
нелегальные партии все еще проходят через обычную вещь, но она пропускает материал paxos и двойное письмо, которое регистрирует партии. Это рекомендуется против (включенного мной), когда у вас есть несколько разделов, поскольку для этого требуется, чтобы координатор выполнял большую работу и увеличивал шансы его сбоя, так как он затрагивает так много узлов.Если все строки партии находятся в одном разделе, хотя они сохраняют круговую поездку и некоторые накладные расходы. http://christopher-batey.blogspot.com/2015/02/cassandra-anti-pattern-misuse-of.html имеет хорошее объяснение того, как это может быть хорошо. –