Когда движение NoSQL растет на основе баз данных на основе документов, я в последнее время смотрел MongoDB. Я заметил поразительное сходство с тем, как обрабатывать элементы как "Документы", как и Lucene (и пользователи Solr).
Итак, вопрос: Почему вы хотите использовать NoSQL (MongoDB, Cassandra, CouchDB и т.д.) поверх Lucene (или Solr) в качестве вашей "базы данных"?
То, что я (и я уверен, что другие) ищут в ответ, - это их глубокое погружение. Давайте пропустим обсуждение реляционных баз данных вместе, поскольку они служат другой цели.
Lucene дает некоторые серьезные преимущества, такие как мощные поисковые и весовые системы. Не говоря уже о гранях в Solr (которые Solr сейчас интегрируется в Lucene, yay!). Документы Lucene можно использовать для хранения идентификаторов и доступа к документам как таковым, как MongoDB. Смешайте его с Solr, и теперь вы получите решение, основанное на балансе на основе WebService.
Вы даже можете сравнить сравнение поставщиков кэшей вне очереди, таких как Velocity или MemCached, когда речь идет о подобном хранении и масштабировании данных MongoDB.
Ограничения вокруг MongoDB напоминают мне использование MemCached, но я могу использовать Microsoft Velocity и иметь больше возможностей группировки и списков для MongoDB (я думаю). Невозможно получить более быстрый или масштабируемый, чем кеширование данных в памяти. Даже у Lucene есть поставщик памяти.
MongoDB (и другие) имеют некоторые преимущества, такие как простота использования их API. Создайте новый документ, создайте идентификатор и сохраните его. Готово. Приятно и легко.
Это отличный вопрос, о чем я размышлял довольно много. Я обобщу свои уроки:
Вы можете легко использовать Lucene/Solr вместо MongoDB для почти всех ситуаций, но не наоборот. Grant Ingersoll post суммирует его здесь.
MongoDB и т.д., похоже, служат целям, в которых нет необходимости искать и/или делать огранку. Это, по-видимому, более простой и, возможно, более простой переход для дезинтеграции программистов из мира РСУБД. Если бы никто не привык к этому, у Lucene и Solr была бы более крутая кривая обучения.
Существует мало примеров использования Lucene/Solr в качестве хранилища данных, но Guardian сделал некоторый прогресс и обобщил это в превосходном слайд- палуба, но они тоже не согласуются с полным прыжком на Solv bandwagon и "исследуют", комбинируя Solr с CouchDB.
Наконец, я буду предлагать наш опыт, к сожалению, не может многое рассказать о бизнес-деле. Мы работаем над масштабами нескольких ТБ данных, почти в режиме реального времени. Изучив различные комбинации, решил придерживаться Solr. Пока нет сожалений (6 месяцев и подсчета) и не вижу причин переключаться на некоторые другие.
Резюме: если у вас нет требования к поиску, Mongo предлагает простой и мощный подход. Однако, если поиск является ключевым для вашего предложения, вы, вероятно, лучше придерживаетесь одной технологии (Solr/Lucene) и оптимизируете из нее меньшее количество движущихся частей.
Мои 2 цента, надеюсь, что это помогло.
Вы не можете частично обновить документ в solr. Вы должны повторно опубликовать все поля, чтобы обновить документ.
И производительность имеет значение. Если вы не совершаете, ваше изменение на solr не вступает в силу, если вы совершаете каждый раз, производительность страдает.
В solr нет транзакции.
Поскольку solr имеет эти недостатки, некоторые времена nosql - лучший выбор.
Также обратите внимание, что некоторые люди интегрировали Solr/Lucene в Mongo, указав все индексы в Solr, а также контролируя операции oplog и каскадируя соответствующие обновления в Solr.
Благодаря этому гибридному подходу вы действительно можете получить лучшее из обоих миров с такими возможностями, как полнотекстовый поиск и быстрое чтение с надежным хранилищем данных, которое также может иметь пылающую скорость записи.
Это немного технически для настройки, но есть много хвостовиков, которые могут интегрироваться в solr. Ознакомьтесь с тем, что было сделано в этой статье.
http://denormalised.com/home/mongodb-pub-sub-using-the-replication-oplog.html
Мы используем MongoDB и Solr вместе, и они хорошо работают. Здесь вы можете найти мой блог, где я описал, как мы используем эти технологии вместе. Вот выдержка:
[...] Однако мы наблюдаем, что производительность запроса Solr уменьшается, когда индекс размер увеличивается. Мы поняли, что лучшим решением является использование как Solr и Mongo DB вместе. Затем мы интегрируем Solr с MongoDB, сохраняя содержимое в MongoDB и создание индекса с использованием Solr для полнотекстового поиск. Мы сохраняем уникальный идентификатор для каждого документа в индексе Solr и извлекать фактическое содержимое из MongoDB после поиска в Solr. Получение документов из MongoDB происходит быстрее, чем Solr, потому что нет анализаторы, скоринг и т.д. [...]
Поскольку никто не упомянул об этом, добавлю, что MongoDB не имеет схемы, тогда как Solr применяет схему. Итак, если поля ваших документов могут измениться, это одна из причин выбора MongoDB над Solr.
schema.xml
, НО она также имеет «динамические поля», то есть поля, типы которых определяются с помощью schema.xml
, поэтому вы можете иметь все поля, соответствующие, скажем, *_i
проиндексированные как целочисленные поля. при добавлении документов вы можете иметь документы, содержащие поля, такие как count_i
, foo_i
, bar_i
, которые все понимаются как целочисленные поля без буквального появления в schema.xml
. я бы сказал, довольно без схемы см. youtube.com/watch?v=WYVM6Wz-XTw для получения дополнительной информации.
Из моего опыта работы с обоими, 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 является поддержка многих запросов, поэтому могут поддерживаться нечеткие запросы.
NoSQL работает как multi- node базы данных, которые предлагают отличные возможности масштабирования. Сегодня многие базы данных NoSQL поддерживают разделение данных на разных узлах, что помогает масштабировать большие наборы данных при одновременном сокращении ненужного дублирования. Эффективность приложения, которое должна строиться, зависит не только от моделей данных, но и от того, насколько эффективно они заполняют новые функции. Модели данных работают как мост между проблемами реального мира и программным обеспечением. Решения для баз данных NoSQL разрабатывают современные программные приложения.
Сторонние решения, такие как хвост орго-манго, привлекательны. Некоторые мысли или вопросы остаются о том, могут ли решения быть тесно интегрированы, предполагая перспективу развития/архитектуры. Я не ожидаю увидеть плотно интегрированное решение для этих функций по нескольким причинам (несколько умозрительным и подлежащим уточнению, а не последним с разработками):