Как я могу уменьшить Mongo db путем усреднения старых данных - PullRequest
3 голосов
/ 25 февраля 2011

У меня есть mongodb для измерений, в котором есть документ для измерений.Каждый документ выглядит так:

{
 timestamp : 123
 value     : 123
 meta1     : something
 meta2     : something
}

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

1. Что такоелучший подход в монго?

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

Ответы [ 3 ]

4 голосов
/ 25 февраля 2011

1.Каков наилучший подход в монго? Используйте ограниченные коллекции для случаев использования, таких как ведение журнала.Другой подход заключается в создании «фонового процесса», который будет перемещать старые данные из коллекции.

2. Имеется ли для этого лучшая база данных, учитывая, что схема отличается для разных измерений,фиксированный формат не будет работать очень хорошо.RRD также не вариант, так как мне нужны возможности динамического запроса .?Mongodb хорошо подходит здесь.

Обновление: Другой подход состоит в том, чтобы хранить каждый элемент данных дважды: сначала в закрытой коллекции (и использовать эту коллекцию для запросов).И создайте другую коллекцию (или даже другую logdb) только для регистрации ваших событий.

3 голосов
/ 25 февраля 2011

Спасибо за ввод.

Думаю, я собираюсь попробовать использовать сегменты для разных таймфреймов.Итак, я создам 3 хранилища, соответствующих, скажем, 1сек, 1мин, 15мин, а затем управляю агрегацией с помощью ручной работы, выполняемой время от времени, которая будет сжимать / усреднять значения, удалять ненужные данные и т. Д.

2 голосов
/ 25 февраля 2011
  1. Я не уверен в лучшем подходе, но простым было бы иметь задание cron, которое удаляло бы все документы старше указанной метки времени (your_time = now - some_time).

    db.docs.remove({ timestamp : {'$lte' : your_time}})

  2. Учитывая, что вам нужна база данных без схемы, которая позволяет выполнять динамические запросы, mondogb, кажется, подходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...