Стоит ли использовать MongoDB?

Здравствуйте! Есть приложение, в реал-тайме пишущее логи в приличных объемах.

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

Есть ли смысл использовать MongoDB? Или лучше MySQL по старинке?
  • Вопрос задан
  • 9168 просмотров
Пригласить эксперта
Ответы на вопрос 12
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
MongoDB поудобнее будет для вашей задачи, причем на производительности минимально скажется.
Ответ написан
@fuCtor
Ruby разработчик
Ситуация такая же была, использовал для хранения MySQL. Работало (в плане записи все шустро). Но был один критичный момент. Т.к. вариантов сообщений было много, и под каждый написать таблицу было не самое лучшее решение + поля переменные. Одним словом структура описана только на верхнем уровне. Укладывать приходилось что-то в поля, что-то в BLOB. Как результат поиск толком не работал. Обработка была тяжелой. Иногда выпадало по таймауту.
После было решено отказаться в пользу MongoDB. С момента перехода скопилось уже несколько миллионов записей. При этом занимает лишь 3.4Гб оперативы, на диске гиг (половина это индексы). Для анализа настроен инкрементальный MapReduce по расписанию. Поиск укладывается в секунду и меньше. MapReduce (5агрегаций) в среднем выполняется за пару секунд.
За время эксплуатации никаких нареканий, одно удовольствие. В дальнейшем можно будет поднять кластер и настроить шардинг.

Так что если структура не фиксированная, либо достаточно сложная + необходимо делать различные агрегации и обработки данных, то рекомендую посмотреть на MongoDB. Как вариант добавить на время (неделю две) параллельную запись и туда и туда для анализа.
Ответ написан
mannaro
@mannaro
Умею профессионально гуглить
MemCached попробуйте)
Ответ написан
LucemFerre
@LucemFerre
Если логи будут использоваться для формирования статистики, то перевести их в SQL так или иначе придется. Все зависит от объемов данных. Если они большие - придется писать системы ротации. Удобнее, конечно, попробовать сначала писать в чистые таблицы без индексов, и потом уже пачками переносить данные в нормальные, с индексами, для формирования отчетности.
ИМХО, данные вполне себе структурированные. Создать по табличке на каждый тип логирования, или привести к какому то денармализованному виду, который будет нормализовываться при ротации - дело намного проще, чем делать ротацию SQL-NoSql.

Если же действительно есть уверенность в том, что никогда не возникнет желания посмотреть, "сколько пользователей вводят команду которая отключает сервер", то можно попробовать и монго.
Ответ написан
Rpsl
@Rpsl
Кратко о себе
Используйте монгу.
Ответ написан
Комментировать
mr_null
@mr_null
Считаю что логи необязательно накапливать, пишите в MemCached, если памяти сервера будет хватать для обеспечения потока записи. Из MemCached можно сохранять по необходимости. Если данные нужно накапливать и как-то структурировать, то MongoDB.

MySQL совершенно негоден для логирования.
Ответ написан
Комментировать
nazarpc
@nazarpc
Open Source enthusiast
У меня печальный опыт использования MongoDB. По причине своей природы данные хранятся в JSON формате, что сказывается на размере, дико быстро заканчивалось место, а ещё аггрегация и map-reduce по нескольким миллионам записей дико тупили, иногда вываливаясь из таймаута, при этом практически переставала работать запись в БД. Короче, все байки про скорость для меня оказались байками, либо я абсолютно не умею её готовить.

С MySQL всё проще и надежнее. Можете взять MariaDB - получите дополнительные оптимизации, и ничего не потеряете.
Ответ написан
dizballanze
@dizballanze
Software developer at Yandex
Как альтернативный вариант можете рассмотреть logstash.net
Ответ написан
@comAT0Zz
Не за MySQL в данном вопросе, но в нём есть подходящий движок - Archive.

Интересно, что понимается под удобной работой. С логами в файле тоже удобно работать можно.
Ответ написан
@portfelio
Про Logstash и Hadoop уже говорили. Всё зависит от объема логов. Возможно лучшим решением будет MongoDB+ElasticSearch (тут уже будет logstash), а может быть и Hadoop.
Ответ написан
Комментировать
Mandor
@Mandor
Если у вас в проекте уже есть MySQL и нет Mongo, то лучше продолжать использовать MySQL.

Кстати существуют сторонние сервисы для менеджмента логов, может быть это выгоднее, чем поднимать инстансы монги?
Ответ написан
Комментировать
@ZOXEXIVO
Попробуйте Redis
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы