673

これら 2 つの NoSQL データベースの間で行き詰っています。

私のプロジェクトでは、データベース内にデータベースを作成します。たとえば、動的テーブルを作成するためのソリューションが必要です。

したがって、ユーザーは列と行を含むテーブルを作成できます。これには MongoDB か CouchDB のどちらかが適していると思いますが、どちらかはわかりません。また、効率的なページングも必要になります。

4

7 に答える 7

542

C、A、P(一貫性、可用性、パーティションの許容範囲)のうち、あなたにとってより重要な2つはどれですか。クイックリファレンス、NoSQLシステムのビジュアルガイド

  • MongodB:一貫性とパーティションの許容度
  • CouchDB:可用性とパーティションの許容度

ブログ投稿、Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4jの比較では、比較された各NoSQLデータベースに対して「最もよく使用される」シナリオがあります。リンクを引用して、

  • MongoDB:動的クエリが必要な場合。関数をマップ/リデュースするのではなく、インデックスを定義したい場合。大きなDBで優れたパフォーマンスが必要な場合。CouchDBが必要であるが、データが変更されすぎてディスクがいっぱいになった場合。
  • CouchDB:事前定義されたクエリが実行されるデータを蓄積し、時々変更するため。バージョン管理が重要な場所。

Riyad Kallaによる最近(2012年2月)のより包括的な比較、

  • MongoDB:マスタースレーブレプリケーションのみ
  • CouchDB:マスター-マスターレプリケーション

両方を試した人によるブログ投稿(2011年10月)で、MongoDB Guy Learns CouchDBは、CouchDBのページングがそれほど役に立たないとコメントしました。

Kristina ChodorowMongoDBの背後にあるチームの一部)による日付(2009年6月)のベンチマーク

私はMongoDBに行きます。

それが役に立てば幸い。

于 2012-09-16T05:37:49.040 に答える
249

上記の答えは、ストーリーを複雑にします。

  1. モバイル コンポーネントを計画している場合、またはデスクトップ ユーザーがオフラインで作業し、その作業をサーバーに同期する必要がある場合は、CouchDB が必要です。
  2. コードがサーバー上でのみ実行される場合は、MongoDB を使用してください

それでおしまい。モバイル デバイスやデスクトップ デバイスにレプリケートする CouchDB の (すばらしい) 機能が必要でない限り、現時点では MongoDB がパフォーマンス、コミュニティ、およびツールの利点を備えています。

于 2015-02-18T03:29:06.743 に答える
78

非常に古い質問ですが、それはGoogleの上にあり、私が見る答えがあまり好きではないので、ここに私自身のものがあります.

CouchDB には、CouchApp を開発する機能以外にも多くの機能があります。ほとんどの人は、従来の 3 層 Web アーキテクチャで CouchDb を使用しています。

実際には、ほとんどの人にとって決定的な要因は、MongoDb では SQL のような構文を使用したアドホック クエリが許可されているのに対し、CouchDb では許可されていないという事実です (map/reduce ビューを作成する必要があり、これらのビューを作成しても一部の人をオフにします)。 Rapid Application Development に適しています。ストアド プロシージャとは関係ありません)。

受け入れられた回答で提起されたポイントに対処するには:CouchDbには優れたバージョン管理システムがありますが、バージョン管理が重要な場所にのみ適している(またはより適している)という意味ではありません。また、couchdb は、その追加専用の性質のおかげで、大量の書き込みに対応しています (データが失われないことを保証しながら、書き込み操作はすぐに戻ります)。

誰にも言及されていない非常に重要なことの 1 つは、CouchDb が B ツリー インデックスに依存しているという事実です。これは、「行」が 1 つであろうと 200 億であろうと、クエリ時間は常に 10 ミリ秒未満のままであることを意味します。これは、CouchDb を低レイテンシで読みやすいデータベースにするゲーム チェンジャーであり、見逃すことはできません。

公平かつ徹底的に言えば、CouchDb に対する MongoDb の利点は、ツールとマーケティングです。彼らはすべての主要な言語とプラットフォーム用の一流のシチズン ツールを持っており、オンボーディングを容易にします。これがアドホック クエリに追加されることで、SQL からの移行がさらに容易になります。

CouchDb には、このレベルのツールはありません (現在利用可能なライブラリは多数ありますが)。ただし、CouchDb は HTTP API として公開されているため、好みの言語でラッパーを作成して対話するのは非常に簡単です。肥大化を回避し、必要なものだけを取得できるため、個人的にはこのアプローチが気に入っています (インターフェイス分離の原則)。

したがって、どちらを使用するかは、主に彼らのパラダイムの快適さと好みの問題だと思います。CouchDb のアプローチは、特定の人にとっては「ぴったり」ですが、データベースの機能について (完全な公式ガイドで) 学習した後、「まあまあ」という瞬間がない場合は、おそらく先に進む必要があります。

「適切な仕事に適切なツール」を使いたいだけなら、CouchDb の使用はお勧めしません。なぜなら、そのままでは使えないことがわかり、腹を立てて「CouchDb の結合はどこにあるの?」などのブログ記事を書くことになるからです。および「トランザクション管理はどこですか?」。実際、Couchdb は - 逆説的に - 非常に透過的ですが、同時にパラダイム シフトと問題へのアプローチ方法の変更を必要とし、真に輝く (そして実際に機能する) 必要があります。

しかし、一度それをやると、それは本当に報われます。個人的には、別のデータベースを選択するには、非常に強力な理由またはプロジェクトでの主要な取引ブレーカーが必要ですが、これまでに会ったことがありません。

于 2016-06-04T16:38:02.073 に答える
28

その記事で見つかった答えを要約します。

http://www.quora.com/How-does-MongoDB-compare-to-CouchDB-What-are-the-advantages-and-disadvantages-of-each

MongoDB: クエリの改善、BSON でのデータ ストレージ (アクセスの高速化)、データの一貫性の向上、複数のコレクション

CouchDB: マスターからマスターへのレプリケーションと競合解決、JSON でのデータ ストレージ (人間が判読できる、REST サービスによるアクセスの向上)、map-reduce によるクエリを使用した、より優れたレプリケーション。

結論から言うと、MongoDB の方が速く、CouchDB の方が安全です。

また: http://nosql.mypopescu.com/post/298557551/couchdb-vs-mongodb

于 2014-05-28T14:11:30.117 に答える
24

MongoDBのスパース一意インデックスの問題に注意してください。私はそれを打ちました、そしてそれは回避するのが非常に面倒です。

問題はこれです-フィールドがあり、存在する場合は一意であり、フィールドが存在しないすべてのオブジェクトを検索したい場合です。Mongoでスパース一意インデックスを実装する方法は、そのフィールドが欠落しているオブジェクトがインデックスにまったく含まれていないことです。つまり、そのフィールドのクエリでは取得できませ{$exists: false}ん。単に機能しません。

私が思いついた唯一の回避策は、値の特別なnullファミリーを使用することです。この場合、空の値は、uuidに連結された特別なプレフィックス( null:など)に変換されます。これは本当の頭痛の種です。なぜなら、書き込み/クワイアリング/読み取りの際に、空の値への変換/空の値からの変換に注意を払う必要があるからです。大きな妨害。

私はMongoDBでサーバー側のjavascript実行を使用したことがなく(とにかくお勧めしません)、Mongoノードが1つしかない場合、それらのmap/reduceのパフォーマンスはひどいものになります。これらすべての理由により、私は現在CouchDBをチェックアウトすることを検討しています。おそらく、それは私の特定のシナリオにより適しています。

ところで、スパースな一意のインデックスの問題を説明しているそれぞれのMongoの問題へのリンクを誰かが知っている場合は、共有してください。

于 2013-02-03T22:05:35.173 に答える
7

Mongo (より慣れ親しんでいます) でもできると思いますし、couch でもできると確信しています。

どちらもドキュメント指向 (JSON ベース) であるため、ドキュメントには「列」ではなくフィールドが存在しますが、完全に動的にすることができます。

気になる他の機能、人気など、使用する他の要因を見たいと思うかもしれません.Googleの洞察、indeed.comの求人情報は、人気を見る方法です.

あなたはそれを試すことができます.5分でmongoを実行できるはずです.

于 2012-09-15T15:49:32.647 に答える