NoSQL (MongoDB) проти люцена (або Solr) як вашої бази даних


280

Зростання руху NoSQL на основі баз даних, що базуються на документах, я останнім часом переглядав MongoDB. Я помітив вражаючу схожість з поводженням з предметами як з "Документами", як і Люцен (і з користувачами Solr).

Отже, питання: чому ви хочете використовувати NoSQL (MongoDB, Cassandra, CouchDB тощо) над Lucene (або Solr) в якості "бази даних"?

Те, що я шукаю (і я впевнений, що інші) шукаю у відповідь, - це деякі глибокі порівняння їх. Давайте разом пропустимо обговорення реляційних баз даних, оскільки вони служать іншій меті.

Люцен дає деякі серйозні переваги, такі як потужні системи пошуку та ваги. Не кажучи вже про грані в Солрі (який Солр незабаром інтегрується в Люцен, так!). Ви можете використовувати документи Lucene для зберігання ідентифікаторів та доступу до таких документів, як MongoDB. Змішайте його з Solr, і тепер ви отримаєте рішення, засноване на WebService, збалансованому завантаженні.

Ви навіть можете зіставити порівняння постачальників кеш-пам'яті, що не випускаються, наприклад, Velocity або MemCched, якщо говорити про схоже зберігання даних та масштабованість MongoDB.

Обмеження навколо MongoDB нагадує мені використовувати MemCched, але я можу використовувати швидкість Microsoft і мати більше можливостей групування та списку над MongoDB (я думаю). Неможливо отримати швидше або масштабувати, ніж кешування даних у пам'яті. Навіть у Lucene є постачальник пам'яті.

У MongoDB (та інших) є деякі переваги, такі як простота використання їх API. Створіть документ, створіть ідентифікатор та зберігайте його. Зроблено. Приємно і легко.



4
Дякую, але це не відповідає на моє запитання: а це, чому я використовую MongoDB замість Lucene для своєї бази даних? Вони обидва обробляють документи, але у Люцена є кілька дуже потужних варіантів пошуку. +1, хоча для фактичного пошуку пов’язаного питання. Я кілька разів шукав Stackoverflow, і не придумав близького порівняння.
eduncan911

Як ви використовуєте Lucene, що він забезпечує функціональність, аналогічну MongoDB? Ви прив'язуєте його до реляційного БД для зберігання?
Філіп Тінні

1
@Philip: Це гіпотетичне питання. Чому б не використовувати Lucene в якості зберігання документів? Ви отримуєте набагато більше можливостей пошуку та масштабованості (при змішуванні з Solr, що робить Lucene ще простішим у використанні).
eduncan911

Відповіді:


250

Це чудове запитання, над чим я досить багато розмірковував. Я підсумую отримані уроки:

  1. Ви можете легко використовувати Lucene / Solr замість MongoDB для майже всіх ситуацій, але не навпаки. Повідомлення Гранта Інгерсолла резюмує тут.

  2. MongoDB тощо слугує цілі, коли немає потреби в пошуку та / або облицюванні. Схоже, це простіший і, можливо, простіший перехід для програмістів, що детоксикують із світу RDBMS. Якщо хтось до цього не звик, Lucene & Solr мають більш круту криву навчання.

  3. Існує не так багато прикладів використання Lucene / Solr як сховища даних, але Guardian просунувся і підсумував це у чудовій слайд-колоді , але вони теж не займаються повним стрибком на пробійці Solr і "досліджуванням" поєднання Solr з CouchDB.

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

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

Мої 2 копійки, сподіваюсь, що допомогло.


10
Solr не має функцій зменшення карти. Тому звітність, статистика, обчислення балів тощо неможливі! Використовуйте Solr, лише якщо у вас є / можуть загрожувати ваші дані як текстові дані
Roland Kofler

8
У Solr немає вбудованої карти зменшення, але ви можете комбінувати з Hadoop. architects.dzone.com/articles/solr-hadoop-big-data-love
Мікос

6
Зниження карт немає, але воно має можливість паралельно виконувати запит на декількох серверах solr та агрегувати ці результати. Тому, хоча він не має загального призначення для зменшення карт, він уже написав те, що ви писали б із зменшенням карт, яке є паралельним пошуковим запитом.
кругляки

@Roo: Чи було б варіантом використовувати Lucene в якості основної БД і створювати сукупні індекси з MongoDB? Або це не має сенсу? І Мікос: чудова відповідь та +1 за згадку про реальний досвід.
Гримаса відчаю

2
від solr6 він підтримує зменшення функціональності карт з паралельними виразами
Divyang Shah

36

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

І продуктивність має значення. Якщо ви не приймаєте на себе зобов'язання, ваша зміна solr не набирає чинності, якщо ви здійснюєте щоразу, продуктивність страждає.

У solr немає транзакції.

Оскільки Solr має ці недоліки, іноді nosql є кращим вибором.


13
У MongoDB також немає транзакцій.
користувач183037

1
У Solr або Lucene є пошук у режимі реального часу, тому вчинення справ не є проблемою.
mihaicc

1
@ user183037 в MongoDB будь-які оновлення в документі є Atomic. І FYI, у Lucene також немає транзакцій (у вашому розумінні)
Aravind Yarram

48
Ця відповідь стала неправильною. Solr 4+ підтримує часткові оновлення, а м'які програми / майже в режимі реального часу усувають більшість питань "старого стилю".
Маурісіо Шеффер

1
Вони додали підтримку транзакцій на MongoDB 4.
Jonas

26

Ми використовуємо MongoDB і Solr разом, і вони добре працюють. Ви можете знайти мій пост у блозі тут, де я описав, як ми разом використовуємо ці технології. Ось уривок:

[...] Однак ми спостерігаємо, що ефективність запиту Solr зменшується при збільшенні розміру індексу. Ми зрозуміли, що найкраще рішення - використовувати і Solr, і Mongo DB разом. Потім ми інтегруємо Solr з MongoDB, зберігаючи вміст у MongoDB та створюючи індекс за допомогою Solr для повнотекстового пошуку. Ми зберігаємо унікальний ідентифікатор кожного документа в індексі Solr і отримуємо фактичний вміст з MongoDB після пошуку в Solr. Отримання документів з MongoDB швидше, ніж Solr, оскільки немає аналізаторів, підрахунків тощо. [...]


3
Гарна публікація в блозі. Так, саме так я раніше використовував Lucene зі старими сховищами даних SQL та MySql (зберігання ідентифікаторів у люцені та отримання складних типів із сховища даних). Технічно це питання полягало у вивченні відмінностей між ними - не зовсім у тому, як використовувати "найкраще з обох світів". +1 за його використання таким чином, оскільки це дійсно єдиний реальний спосіб використовувати величезну кількість даних.
eduncan911

Дякую за Вашу відповідь. Я знаю, що питання полягає у виборі Nosql над Люценом, але тут я хочу показати, що замість того, щоб вибирати один над іншим, використання їх гібридним чином дасть кращий результат.
Парвін Гасімзаде

2
Ви пам’ятаєте (зараз через 1,5 роки) приблизно розмір бази даних Solr, коли продуктивність запитів настільки знизилася, що ви почали замислюватися над тим, щоб додати MongoDB? (Було це 10 000 док. Чи 10 000 000 документів?)
KajMagnus

Дуже корисний. Я працюю в ГІС, і тому можливість поєднання повнотекстового тексту з просторовим пошуком таким чином дуже інтригує. Ми вже використовуємо MongoDB та Postgres, і я певний час думав про Солра.
Джон Пауелл

2
@ParvinGasimzade Посилання на допис у блозі не працює. Чи можете ви надати інше посилання чи джерело?
забуття

24

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

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

Це трохи технічно для налаштування, але є багато оплогів, які можуть інтегруватися в solr. Ознайомтеся з діапазоном діапазону в цій статті

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


Якщо я вас зрозумів правильно, то причиною використання MongoDB (крім Solr) є те, що MongoDB має швидше вставлення + швидкість читання? Ви також вказали, що MongoDB має надійніший сховище даних? (Або ви мали на увазі Солра?) - З чого ви почали спочатку? Тільки MongoDB, тільки Solr, або обидва Mongo + Solr?
KajMagnus

12

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

І тут, де Lucene / Solr переважає великий час, особливо при кешуванні FilterQuery, продуктивність видатна.


10

Оскільки ніхто більше не згадував про це, дозвольте додати, що MongoDB не має схеми, тоді як Solr застосовує схему. Отже, якщо поля ваших документів, ймовірно, зміниться, це одна причина для вибору MongoDB над Solr.


6
що ІМХО не зовсім вірно. У Solr є схема, як визначено в schema.xml, АЛЕ у неї також є "динамічні поля", тобто поля, типи яких визначаються за допомогою макіяжів, тому ви можете мати усі поля, що відповідають, скажімо, *_iіндексованими як цілі поля. при додаванні документів, ви можете мати документи conaining поля , такі як count_i, foo_i, bar_iщо все зрозумілі , як цілі поля без появи в schema.xmlбуквальному сенсі. досить схематично, я б сказав. див. youtube.com/watch?v=WYVM6Wz-XTw для отримання додаткової інформації.
потік

Мені потрібно повернутися і зіткнути це з +1, тому що це правда - зміни схем у Solr завжди були в PITA, щоб підтримувати синхронізацію з іншими сховищами даних.
eduncan911

4
У Solr є функція, яка підтримує схему або без-схему!
Крунал

5

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


1

Якщо ви просто хочете зберігати дані у форматі "ключ-значення", Lucene не рекомендується, оскільки його перевернутий індекс витратить занадто багато місця на диску. А при збереженні даних на диску його продуктивність відбувається набагато повільніше, ніж бази даних NoSQL, такі як redis, оскільки redis зберігає дані в оперативній пам'яті. Найбільш перевагою для Lucene є те, що він підтримує більшість запитів, тому нечіткі запити можуть бути підтримані.


1

Рішення сторонніх організацій, як монговий хвостовик, є привабливими. Залишаються деякі думки чи запитання щодо того, чи можна рішуче інтегрувати рішення, передбачаючи перспективи розвитку / архітектури. Я не сподіваюсь на те, що з кількох причин знайдуть тісно інтегроване рішення щодо цих особливостей (дещо спекулятивне та підлягає роз'ясненню та не в курсі зусиль із розвитку):

  • mongo є c ++, lucene / solr - java
    • може бути, люсень міг би використати кілька монгових губ
    • можливо, Монго міг би переписати деякі алгоритми люцена, див. також:
  • люцен підтримує різні формати doc
    • Монго орієнтований на JSON (BSON)
  • люцен використовує незмінні документи
    • оновлення одного поля - це проблема, якщо вони доступні
  • люценові індекси незмінні зі складними операціями злиття
  • mongo запити - це JavaScript
  • mongo не має аналізаторів тексту / токенізаторів (AFAIK)
  • розміри mongo doc обмежені, що може суперечити зерну за люцен
  • монгові агрегати можуть не мати місця в люцені
    • у люцена є варіанти зберігання полів у документах, але це не те саме
    • solr якось забезпечує агрегацію / статистику та SQL / графічні запити

0

У MongoDB Atlas незабаром з’явиться пошукова система на основі люцена. Велике оголошення було зроблено на тижневій конференції MongoDB World 2019. Це прекрасний спосіб заохотити більше використовувати їх високий дохід продукт MongoDB Atlas.

Я сподівався побачити, що він згорнувся у версію 4.2 MongoDB Enterprise, але не було новин про те, що він буде переведений на нову лінійку продуктів.

Більше інформації тут: https://www.mongodb.com/atlas/full-text-search

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.