MongoDB

Published 04 августа 09 10:49

Вторую неделю экспериментирую с MongoDB . Для тех кто не знает – это такая экспериментальная база данных ориентированное на хранение в виде документов (document-based), похожая на CouchDb по идеологии и по принципам работы.

По результатам впечатления смешанные.

С одной стороны к плюсам можно отнести то что:

  • MongoDb существенно быстрее чем CouchDb, и в части записи, и в части чтения
  • гораздо удобнее хранить бинарные файлы и блоки так как вместо JSON используется формат BSON ориентированный как раз на двоичные данные.
  • индексирование работает на любом уровне иерархии внутри объектов. А то есть если есть объект документ и внём подэлементы разделов и внутри их подъэлементы заголовков то можно построить индекс прямо по этим заголовкам.  Выглядеть это будет примерно так coll.ensure_index(’document.topics.title’, 1)
  • сервер вполне тянет базу в несколько миллионов объектов – я лично прогружал до миллиона и с базой до 3 гигабайт.
  • простота маштабирования: примеры с несколькими экземплярами и распределением данных идут прямо в поставке
  • подробная и качественная документация, большое число примеров и драйверов под все популярные языки: Java, CPP, Python, Perl, Ruby

Но, выявились и весьма существенные минусы:

  • полнотекстовое индексирование отсутствует. Можно пойти путём описанном в вики проекта, а можно настроить внешний индексатор вроде того Sphinx через xmlpipe, но в любом случае требуются лишние существенные усилия.
  • интеграция с тем же Sphinx’ом и рядом других приложений усложняется тем что по умолчанию в MongoDb все идентификаторы – это блок в 12 байт и нужно, либо заменять все ID на int32 у объектов, или добавлять свои параллельно.
  • цена производительности MongoDB – надежнность. В частности при холодной перезагрузке компьютера во время записи в базу MongoDB вероятность что она потом читаться не будет очень высока. Лично столкнулся с этим когда мой ноутбук перегрелся и отключился во время одного из экспериментов – в результате база в несколько гигабайт пришла в неработоспособное состояние. Спасло лишь то что есть команда на восстановление, но для базы в 3 гигабайта выполняется она порядка 30 минут
  • … ещё одно последствие упавшей базы  в том что после восстановления как минимум у части объектов сменились уникальные ID. В результате там где в связках таблиц использовались они – нарушение связей и спасти тут может лишь использование собственных ключей.

Как резюме – инструмент интересный и полезный, но использовать его следует с оглядкой на проблемы выше.

Originally published at Иван Бегтин. You can comment here or there.


Оригинал данного сообщения находится здесь

Comments

# How-to`s ??? Mongodb. Shard+Replica Set - Linux ?? ???????????????? said on октября 4, 2011 5:48:

PingBack from http://linux.org.by/blog/1492/how-tos-mongodb-shardreplica-s…

Anonymous comments are disabled

This Blog

Tags

Archives

Syndication