2013-09-11 3 views
1

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

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

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

Эта стратегия представляется выполнимой?

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

ответ

2

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

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

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

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

+0

Как я уже сказал, данные будут считаться из частей, как в одно время, так и в другое время. Каждое значение с ключом (временем), которое находится между двумя моментами, должно быть считано. Если будет некоторая обработка (не в первый раз), это, вероятно, будет сделано таким же образом, найдите шаблон, который возникает между двумя моментами. Значения, после сохранения, не будут расти позже. Я не думаю, что они будут более 10 МБ, это действительно много текста. Я не совсем понимаю вторичные индексы и как они используются, пока. Спасибо, похоже, я планировал. Еще одна вещь, как Riak сравнивает время в ключах? –

+0

Riak generaly - это хранилище ключей/значений, однако есть специальные функции, такие как вторичные индексы и mapreduce, которые позволяют делать больше одного запроса в то время. 2i позволяют извлекать данные из ключа запуска до конца ключа. Все клавиши, которые лексикографически между ними будут выбраны – danechkin

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