NoSQL (MongoDB) vs Lucene (или Solr) в качестве базы данных



с движением NoSQL, растущим на основе баз данных на основе документов, я недавно посмотрел на MongoDB. Я заметил поразительное сходство с тем, как рассматривать предметы как "документы", так же, как это делает Lucene (и пользователи Solr).



Итак, вопрос: почему вы хотите использовать NoSQL (MongoDB, Cassandra, CouchDB и т. д.) над Lucene (или Solr) в качестве своей "базы данных"?



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



Lucene дает некоторые серьезные преимущества, такие как мощные системы поиска и веса. Не говоря уже о гранях в Solr (который Solr скоро интегрируется в Lucene, yay!). Вы можете использовать документы Lucene для хранения идентификаторов и доступа к документам как таковым, как MongoDB. Смешайте его с Solr, и теперь вы получите веб-сервис на основе, балансировка нагрузки решение.



вы даже можете бросить сравнение поставщиков кэша вне процесса, таких как Velocity или MemCached, когда речь идет о подобном хранении данных и масштабируемости MongoDB.



ограничения вокруг MongoDB напоминают мне об использовании MemCached, но я могу использовать скорость Microsoft и иметь больше возможностей группировки и сбора списков над MongoDB (я думаю). Невозможно получить более быстрый или масштабируемый, чем кэширование данных в памяти. Даже у Люсина есть память поставщик.



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

906   10  

10 ответов:

Это отличный вопрос, над которым я размышлял совсем немного. Я подведу итог своим урокам:

  1. вы можете легко использовать Lucene / Solr вместо MongoDB для почти всех ситуаций, но не наоборот. Грант Ингерсолл сообщение подводит итог здесь.

  2. MongoDB и др. кажется, служит цели, где нет необходимости поиска и / или фасетирования. Это кажется более простым и, возможно, более легким переходом для программистов детоксикации от мира СУБД. Если только вы не привыкли к этому Lucene & Solr имеют более крутую кривую обучения.

  3. существует не так много примеров использования Lucene / Solr в качестве хранилища данных, но Guardian добился некоторого прогресса и суммирует это в отличном slide-deck, но они тоже не являются обязательными для полного прыжка на Solr bandwagon и "расследования" объединения Solr с CouchDB.

  4. наконец, я предложу наш опыт, к сожалению, не могу много рассказать о бизнес-кейсе. Мы работаем в масштабе нескольких ТБ данных, почти в режиме реального времени приложения. После изучения различных комбинаций, решил придерживаться Solr. Никаких сожалений до сих пор (6 месяцев и подсчет) и не вижу причин переключаться на какой-то другой.

резюме: если у вас нет требования к поиску, Mongo предлагает простой и мощный подход. Однако если поиск является ключом к вашему предложению, вам, вероятно, лучше придерживаться одного технология (Solr / Lucene) и оптимизация черт из него - меньше движущихся частей.

мои 2 цента, надеюсь, что помогла.

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

и производительность имеет значение. Если вы не фиксируете, ваше изменение в solr не вступает в силу, если вы фиксируете каждый раз, производительность страдает.

в solr нет транзакции.

поскольку solr имеет эти недостатки, иногда nosql является лучшим выбором.

Также обратите внимание, что некоторые люди интегрировали Solr/Lucene в Mongo, сохранив все индексы в Solr, а также контролируя операции oplog и каскадируя соответствующие обновления в Solr.

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

Это немного техническая настройка, но есть много хвостов oplog это может интегрироваться в solr. Проверить, что rangespan сделал в этой статье.

http://denormalised.com/home/mongodb-pub-sub-using-the-replication-oplog.html

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

[...] Однако мы наблюдаем, что производительность запросов Solr уменьшается при индексировании размер увеличивается. Мы поняли, что лучшим решением является использование обоих Гумз и Монго ДБ вместе. Затем мы интегрируем Solr с MongoDB, сохраняя содержимое в MongoDB и создание индекса с помощью Solr полный текст поиск. Мы храним только уникальный идентификатор для каждого документа в индекс в Solr и получить фактическое содержимое из MongoDB после поиска на Solr. Получение документов из MongoDB происходит быстрее, чем Solr, потому что нет анализаторы, вести счет etc. [...]

поскольку никто больше не упоминал об этом, позвольте мне добавить, что MongoDB не имеет схемы, тогда как Solr применяет схему. Итак, если поля ваших документов могут измениться, это одна из причин выбрать MongoDB вместо Solr.

из моего опыта работы с обоими, Mongo отлично подходит для простого, прямого использования. Основным недостатком Mongo, с которым мы столкнулись, является низкая производительность по непредвиденным запросам (вы не можете создать индексы mongo для всех возможных комбинаций фильтров/сортировки, вы просто не можете).

и здесь, где Lucene/Solr преобладает большое время, особенно с кэшированием FilterQuery, производительность является выдающейся.

@mauricio-scheffer упомянул Solr 4 - Для тех, кто заинтересован в этом, LucidWorks описывает Solr 4 как "сервер поиска NoSQL", и есть видео на http://www.lucidworks.com/webinar-solr-4-the-nosql-search-server/ где они подробно описывают функции NoSQL(ish). (The-ish для их версии schemaless фактически является динамической схемой.)

Если вы просто хотите хранить данные в формате ключ-значение, Lucene не рекомендуется, потому что его инвертированный индекс будет тратить слишком много дискового пространства. И с сохранением данных на диске его производительность намного ниже, чем у баз данных NoSQL, таких как redis, потому что redis сохраняет данные в ОЗУ. Наиболее преимуществом для Lucene является то, что он поддерживает большую часть запросов, поэтому могут поддерживаться нечеткие запросы.

сторонние решения, такие как хвост Mongo op-log, привлекательны. Некоторые мысли или вопросы остаются о том, могут ли решения быть тесно интегрированы, предполагая перспективу развития/архитектуры. Я не ожидаю увидеть тесно интегрированное решение для этих функций по нескольким причинам (несколько спекулятивным и подлежащим уточнению, а не современным усилиям по разработке):

  • mongo-это c++, lucene / solr-java
    • может быть, lucene может использовать некоторые Mongo libs
    • возможно, монго мог бы переписать некоторые алгоритмы lucene, см. Также:
  • lucene поддерживает различные форматы doc
    • монго сосредоточен на JSON (BSON)
  • lucene использует неизменяемые документы
    • обновления одного поля являются проблемой, если они доступны
  • индексы lucene неизменяемы с помощью сложных операций слияния
  • Mongo запросы javascript
  • у mongo нет текстовых анализаторов / токенизаторов (AFAIK)
  • размеры Mongo doc ограничены, что может пойти против зерна для lucene
  • Mongo aggregation ops может не иметь места в lucene
    • lucene имеет опции для хранения полей в документах, но это не одно и то же
    • solr каким-то образом обеспечивает агрегация / статистика и запросы SQL / graph

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

Comments

    Ничего не найдено.