2016-10-13 4 views
0

Система, над которой я работаю, требует хранения потоков строк, отправленных устройствами 24/7. Например, устройство с идентификатором 'ID' отправляет различную строку каждые 10 секунд. Итак, мне нужно хранить следующий элемент данных:Хранение миллионов сегментов данных данных

('ID', t, t+10, somestring) 

Мы говорим о тысячах устройств, имея в виде, сотнях наборов миллионов данных.

Самый важный запрос:

Query(id, start, end) ==> list of strings 

Как бы вы рекомендовали хранить данные? Какую базу данных вы бы порекомендовали?

ответ

2

Для Кассандры это довольно прямолинейно.

CREATE TABLE device_strings (
    id text, 
    year_month_day text, 
    start timestamp, 
    end timestamp, 
    value text, 
    PRIMARY KEY ((id, year_month_day), start, end) 
); 

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

0

Это данные timeSeries, и Cassandra может хорошо подходить для данных типа TimeSeries. Храните данные по идентификатору, начинайте (нисходящий), заканчивая (нисходящим) в качестве первичного ключа в Cassandra. Ваши записи и чтения будут быстрыми и могут быть линейно масштабированы для производительности. Примечание: Cassandra ограничивает количество значений для раздела до 2 миллиардов, если вы не хотите устанавливать TTL для старых данных, вам следует подумать о добавлении в раздел другого ключа для ограничения значения. Это также даст вам возможность распространять данные по кластеру, если будет только несколько идентификаторов, которые постоянно отправляют данные.

Смежные вопросы