web-dev-qa-db-ja.com

データベースとしてのNoSQL(MongoDB)vs Lucene(またはSolr)

ドキュメントベースのデータベースに基づいてNoSQLの動きが拡大しているので、最近MongoDBを調べました。 Lucene(およびSolrのユーザー)と同じように、アイテムを「ドキュメント」として処理する方法との著しい類似性に気付きました。

したがって、質問:「データベース」としてLucene(またはSolr)上でNoSQL(MongoDB、Cassandra、CouchDBなど)を使用する理由は何ですか?

私が答えを探している(そして他の人も確信している)のは、それらのいくつかの詳細な比較です。リレーショナルデータベースのディスカッションは、目的が異なるため、まとめてスキップしましょう。

Luceneには、強力な検索システムや重みシステムなど、いくつかの深刻な利点があります。 Solrのファセットは言うまでもありません(SolrはまもなくLuceneに統合される予定です!)。 Luceneドキュメントを使用してIDを保存し、MongoDBと同様にドキュメントにアクセスできます。 Solrと混合すると、WebServiceベースの負荷分散ソリューションが得られます。

MongoDBの同様のデータ保存とスケーラビリティについて話すときは、VelocityやMemCachedなどのアウトオブプロセスキャッシュプロバイダーの比較をスローすることもできます。

MongoDBに関する制限はMemCachedを使用することを思い出させますが、MicrosoftのVelocityを使用して、MongoDBよりもグループ化およびリスト収集の能力を高めることができます(と思います)。メモリにデータをキャッシュするよりも高速またはスケーラブルになりません。 Luceneにもメモリプロバイダーがあります。

MongoDB(およびその他)には、APIの使いやすさなど、いくつかの利点があります。ドキュメントを新規作成し、IDを作成して保存します。できた素敵で簡単。

269
eduncan911

これは素晴らしい質問です。私はかなり熟考しました。学んだ教訓を要約します。

  1. ほとんどすべての状況でMongoDBの代わりにLucene/Solrを簡単に使用できますが、その逆はできません。 Ingersollの許可 投稿はここにまとめます

  2. MongoDBなどは、検索やファセット処理の要件がない場合に目的を果たしているようです。これは、RDBMSの世界から解毒するプログラマーにとって、よりシンプルで間違いなく簡単な移行のようです。 Lucene&Solrに慣れていない限り、学習曲線は急勾配です。

  3. Lucene/Solrをデータストアとして使用する多くの例はありませんが、Guardianはいくつかの前進を遂げ、これを優れた slide-deck で要約していますが、Solrを完全にジャンプすることは非コミットメントですSolrとCouchDBを組み合わせた時流と「調査」。

  4. 最後に、残念ながらビジネスケースについて多くを明らかにすることはできませんが、私たちの経験を提供します。私たちは、ほぼリアルタイムのアプリケーションであるいくつかのTBデータの規模に取り組んでいます。さまざまな組み合わせを調査した後、Solrに固執することにしました。これまで後悔はなく(6か月とカウント)、他に切り替える理由はありません。

要約:検索要件がない場合、Mongoはシンプルで強力なアプローチを提供します。ただし、検索が提供の鍵である場合は、1つの技術(Solr/Lucene)に固執し、それを完全に最適化することをお勧めします。

私の2セントは、それが助けたことを願っています。

240
Mikos

Solrでドキュメントを部分的に更新することはできません。ドキュメントを更新するには、すべてのフィールドを再投稿する必要があります。

そしてパフォーマンスが重要です。コミットしないと、solrへの変更は有効にならず、毎回コミットするとパフォーマンスが低下します。

Solrにはトランザクションはありません。

Solrにはこれらの短所があるため、nosqlの方が良い場合もあります。

34
Peter Long

また、すべてのインデックスをSolrに保存し、oplog操作を監視し、関連する更新をSolrにカスケードすることで、Solr/LuceneをMongoに統合している人もいることに注意してください。

このハイブリッドアプローチを使用すると、全文検索や高速書き込みなどの機能を備えた両方の長所を最大限に活用でき、書き込み速度も非常に高速な信頼性の高いデータストアを使用できます。

セットアップするのは少し技術的ですが、solrに統合できるoplogテーラーがたくさんあります。この記事でrangespanが行ったことを確認してください。

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

24
Prasith Govin

MongoDBとSolrを一緒に使用すると、パフォーマンスが向上します。私の ブログの投稿 を見つけることができます。ここで、このテクノロジーを一緒に使用する方法を説明しました。抜粋は次のとおりです。

[...]しかし、インデックスサイズが大きくなるとSolrのクエリパフォーマンスが低下することがわかります。私たちは、SolrとMongo DBの両方を一緒に使用することが最善の解決策であることに気付きました。次に、コンテンツをMongoDBに保存し、Solrを使用して全文検索用のインデックスを作成することにより、SolrとMongoDBを統合します。 Solrインデックスに各ドキュメントの一意のIDのみを保存し、Solrで検索した後、MongoDBから実際のコンテンツを取得します。 MongoDBからのドキュメントの取得は、アナライザー、スコアリングなどがないため、Solrよりも高速です。[...]

23

私の両方の経験から、Mongoはシンプルでわかりやすい使い方に最適です。 Mongoの主な欠点は、予期しないクエリのパフォーマンスの低下です(可能なフィルター/並べ替えのすべての組み合わせに対してmongoインデックスを作成することはできませんが、単純にはできません)。

また、Lucene/Solrが特にFilterQueryキャッシングで大きな成功を収めている場所では、パフォーマンスが抜群です。

12
mjalajel

誰もそれについて言及していないので、Solrはスキーマを強制するのに対して、MongoDBはスキーマレスであると付け加えます。したがって、ドキュメントのフィールドが変更される可能性がある場合、それがSolrよりもMongoDBを選択する理由の1つです。

11
Aquarelle

@ mauricio-schefferはSolr 4に言及しました-それに興味がある人のために、LucidWorksはSolr 4を「NoSQL検索サーバー」と説明しており、 http://www.lucidworks.com/webinar-solr-4にビデオがあります-the-nosql-search-server / NoSQL(ish)機能の詳細について説明します。 (-ishは、スキーマレスのバージョンが実際に動的スキーマであるためです。)

4
Beth

キーと値の形式を使用してデータを保存するだけの場合、Luceneは転置インデックスが多くのディスク領域を浪費するため、お勧めしません。また、ディスクにデータを保存すると、redisはRAMにデータを保存するため、redisなどのNoSQLデータベースよりもパフォーマンスが大幅に低下します。 Luceneの最大の利点は、多くのクエリをサポートしているため、ファジークエリをサポートできることです。

1
张洪岩

MongoDB Atlasには、すぐにluceneベースの検索エンジンが搭載される予定です。今週のMongoDB World 2019カンファレンスで大きな発表が行われました。これは、高収益のMongoDB Atlas製品の使用を促進する素晴らしい方法です。

MongoDB Enterpriseバージョン4.2に組み込まれることを期待していましたが、オンプレミスの製品ラインにそれをもたらすというニュースはありませんでした。

詳細はこちら: https://www.mongodb.com/atlas/full-text-search

0
Gary Russo

Mongo op-log tailのようなサードパーティのソリューションは魅力的です。開発/アーキテクチャの観点を想定して、ソリューションを緊密に統合できるかどうかについての考えや疑問が残っています。いくつかの理由により、これらの機能の緊密に統合されたソリューションを期待していません(やや投機的で明確化の対象であり、開発努力が最新ではありません)。

  • mongoはc ++、lucene/solrはJava
  • luceneはさまざまなdoc形式をサポートしています
    • mongoはJSON(BSON)に焦点を当てています
  • luceneは不変ドキュメントを使用します
    • 単一フィールドの更新が問題である場合、それらが利用可能であれば
  • 複雑なマージ操作では、luceneインデックスは不変です
  • mongoクエリはjavascriptです
  • mongoにはテキストアナラ​​イザー/トークナイザーがありません(AFAIK)
  • mongo docのサイズは制限されています。これは、ルセンの粒子に反する可能性があります
  • mongo集計opはlucene に場所がない場合があります
    • luceneにはドキュメント間でフィールドを保存するオプションがありますが、それは同じものではありません
    • solrは何らかの方法で集約/統計およびSQL /グラフクエリを提供します
0
Darren Weber