2015-02-07 2 views
1

Я использую MongoDB для обработки временных рядов, это работает нормально, так как до сих пор не так много данных, но теперь мне нужно определить, что необходимо для масштабирования для большего количества данных. Сегодня в день поступают + 200 тыс. Данных, каждый из которых поступает каждые пару секунд, что не является огромным, но это должно скоро увеличиться.Mongo для нерегулярных временных рядов

Используемый набор данных далеко не эффективен, поскольку каждый фрагмент данных (parentID, timestamp, value) создает документ. Я видел несколько подходов, которые используют документ, который хранит таймеры в течение целого часа (например, с помощью внутреннего массива, который хранит данные за каждую секунду), это действительно здорово, но поскольку данные, которые я должен обрабатывать, не принимаются регулярно (в зависимости от parentID), этот подход может оказаться неприемлемым.

Среди данных, которые я получаю:
- некоторые из них получили каждую пару секунд
- некоторые из них получили каждые несколько минут
Для всех этих данных, шаг между 2 последовательными из них не обязательно то же самое.

Есть ли лучший подход, который я мог бы использовать для обработки этих данных, например, используя другую моделью, которая могла бы помочь масштабировать БД?

Сегодня работает только один процесс mongod, и мне интересно, на каком уровне может понадобиться осколок, какие-либо советы для этого?

ответ

2

Возможно, вы по-прежнему сможете воспользоваться преимуществом наличия предварительно размещенного документа, даже если показания неравномерно распределены. Вы не можете структурировать каждый документ по времени показаний, но вы можете структурировать каждый документ для хранения фиксированного количества отсчетов

{ 
    "type" : "cookies consumed" 
    "0" : { "number" : 1, "timestamp" : ISODate("2015-02-09T19:00:20.309Z") }, 
    "1" : { "number" : 4, "timestamp" : ISODate("2015-02-09T19:03:25.874Z") }, 
    ... 
    "1000" : { "number" : 0, "timestamp" : ISODate("2015-01-01T00:00:00Z") } 
} 

В зависимости от вашего случая использования, эта структура может работать для вас и дать вам выгоду от обновления предварительно распределенных документов с новыми показаниями, только для размещения нового документа каждые N показаний для некоторых крупных N.

+0

Дело в том, что в моих случаях использования, когда данные хранятся в документе, запрос на их получение основывается на parentID и на метке времени. С подходом, который вы предлагаете, я не смог бы индексировать метку времени, не так ли? – Luc

+1

Правильно - вы могли бы сохранить первую и последнюю временную метку на документе, скажем, и использовать их. Но предопределенная схема просто не может работать для вас, в зависимости от того, что все ваши требования. – wdberkeley

1

Решение вашей проблемы очень хорошо захвачена здесь:

http://bluxte.net/musings/2015/01/21/efficient-storage-non-periodic-time-series-mongodb

Основная идея, как уже указывалось в: иметь фиксированное количество событий, зафиксированных в документе и сохранить послужной список в начале и конец временного штампа каждого документа в другой коллекции «более высокого уровня».

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