2014-01-10 5 views
0

Что такое надежный и эффективный способ агрегирования небольших данных в MongoDB?(в реальном времени) Малая агрегация данных MongoDB: триггеры?

В настоящее время мои данные, которые необходимо агрегировать, составляют менее 1 ГБ, но могут достигать 10 ГБ. Я ищу стратегию в реальном времени или около реального времени (агрегирование каждые 15 минут).

Кажется, что такие карты, как Map/Reduce, Hadoop, Storm повсюду убивают. Я знаю, что триггеры не существуют, но я нашел этот post, который может быть идеальным для моей ситуации. Создает ли триггер в MongoDB идеальное решение для агрегации небольших данных в реальном времени?

+0

Вы считали, что структура mongodb [агрегатный конвейер] (http://docs.mongodb.org/manual/core/aggregation-pipeline/)? –

+0

Я совершенно новичок в этом. Как мне сделать это в режиме реального времени? – krikara

+0

Сначала я не совсем понял ваш вопрос. Посмотрите на этот вопрос (http://stackoverflow.com/questions/5807618/strategies-for-real-time-aggregations-in-mongodb?rq=1). У него аналогичная проблема –

ответ

1

MongoDB имеет две встроенные опции для агрегирования данных - aggregation framework и map-reduce.

Агрегация агрегации выполняется быстрее (выполняется как родной код на C++, в отличие от работы по сокращению карты JavaScript), но более ограничена в виде поддерживаемых агрегатов. Map-reduce очень универсален и может поддерживать очень сложные агрегации, но медленнее, чем структура агрегации, и может быть сложнее закодировать.

Любой из них был бы хорошим вариантом для скопления в реальном времени.

Еще одно соображение, которое необходимо учесть, состоит в том, что начиная с выпуска 2.4 структура агрегации возвращает один документ, содержащий его результаты, и поэтому ограничивается возвратом 16 МБ данных. Напротив, задания MongoDB для сокращения карт не имеют такого ограничения и могут выводиться непосредственно в коллекцию. В предстоящей версии 2.6 MongoDB структура агрегации также получит возможность выводить непосредственно в коллекцию с использованием нового оператора $out.

Основываясь на описании вашего прецедента, я бы рекомендовал использовать map-reduce, поскольку я предполагаю, что вам нужно вывести более 16 МБ данных. Кроме того, обратите внимание, что после первого запуска с уменьшением размера карты можно выполнить incremental map-reduce заданий, которые запускаются только на новые/измененные данные и объединяют результаты в существующую коллекцию вывода.

Как вы знаете, MongoDB не поддерживает триггеры, но вы можете легко реализовать триггеры в приложении, закрыв MongoDB oplog. Это blog post и этот SO post хорошо накрывают тему.

+0

Мне не нужна карта, просто структура агрегации. Я запутался в том, как запустить его в режиме реального времени. Простой пример: у меня 100 000 записей около 5 КБ. Из каждой записи я хочу вытащить лицензию на автомобиль # и владельца; создайте новый файл со всеми лицензиями и именами. Но я хочу, чтобы это было в режиме реального времени и не совсем понимало, как это выполнить. – krikara

+0

@krikara, спасибо за разъяснения. Я отредактировал мой ответ выше, основываясь на этой дополнительной информации. –

+0

+1 Для обновления. Теперь, из того, что я читал в Интернете, похоже, что Map Reduce может быть медленным для моей работы. В действительности все данные, вставленные в мой MongoDB, являются метаданными. Затем мне нужно обработать эти данные для создания отчетов. Должен ли я использовать MongoDB для агрегирования этих данных или я должен отправлять все метаданные на другой сервер для его обработки? Если последний случай истинен, что я должен использовать для агрегирования (Javascript, Storm)?Хотя каждая запись составляет примерно 5 КБ, объем данных, обрабатываемых за один день, составляет около 5 ГБ. Спасибо за помощь ~ – krikara

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