Оптимальная стратегия хранения Riak

Я планирую использовать Riak для хранения некоторых данных датчиков, но датчики подключены к разным пользователям. Мой план состоит в том, чтобы создать такую ​​​​структуру: Ведро = ключ идентификатора пользователя = время, новый ключ каждую минуту (или, может быть, две минуты)

Когда я говорю новый ключ каждую минуту, показания не всегда непрерывны и не в реальном времени, но они загружаются позже. Они записываются в определенные периоды суток. Частота замера достаточно высокая, 250 выборок в секунду. Если я создам новый ключ для каждого измерения, я очень быстро получу взрыв ключей, и я не думаю, что это улучшит производительность. Кроме того, мне не нужно знать точное число в каждый данный момент, я буду использовать их более последовательно в периоде (значения от минуты N до минуты M).

Поэтому я думаю о «группировке» результатов за каждую минуту и ​​​​хранении их таким образом в виде JSON.

Выглядит ли эта стратегия осуществимой?

Кроме того, я думаю об использовании LevelDB в качестве механизма хранения, просто чтобы быть в безопасности в отношении использования ОЗУ.


person Aleksandar Stojadinovic    schedule 11.09.2013    source источник


Ответы (1)


Меньшее количество клавиш кажется мне лучше, чем ключ для каждого события. Как бы вы использовали эти данные позже?

Если данные предназначены для дальнейшего анализа, leveldb и вторичные индексы позволяют вам выбрать данные за определенный период (если ваши ключи каким-то образом упорядочены, например datetime) в задании mapreduce (с дополнительными усилиями это можно сделать в фоновом режиме). Кроме того, leveldb не хранит все ключи в памяти, это хорошо для постоянно растущего набора данных, если вы планируете хранить все данные вечно.

Если ваше приложение зависит от предсказуемой задержки и требует фиксированного объема данных для каждого запроса, лучше сгруппировать данные, как того хочет приложение (для выборки всех ключей в течение 10 минут в одном объекте).

Еще одной проблемой является общий размер объекта, поскольку в документации riak говорится, что размер одного объекта не должен превышать 10 МБ.

person danechkin    schedule 12.09.2013
comment
Как я уже сказал, данные будут считываться по частям, как в одно время, так и в другое. Каждое значение с ключом (время), которое подходит между двумя временами, должно быть прочитано. Если будет какая-то обработка (не в первый раз), она, вероятно, будет сделана таким же образом, найдите закономерность, которая возникает между двумя временами. Значения, однажды сохраненные, не будут расти позже. Я не думаю, что они будут больше 10 МБ, это действительно много текста. Пока я не совсем понимаю вторичные индексы и то, как они используются. Спасибо, похоже, я планировал. И еще, как Riak сравнивает время в ключах? - person Aleksandar Stojadinovic; 12.09.2013
comment
Как правило, Riak — это хранилище ключей/значений, однако существуют специальные функции, такие как вторичные индексы и mapreduce, которые позволяют выполнять больше одного запроса за раз. 2i разрешить выборку данных от начального до конечного ключа. Будут выбраны все ключи, которые лексикографически находятся между ними. - person danechkin; 12.09.2013