MongoDBでCouchDBを使用する場合とその逆の場合


638

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

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

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


19
彼らがシステムを変更して、彼らが探しているトピックに関する質問の作成をより容易にし、ユーザーをその質問にもっと適切に導くようにしたいと思います。この問題が解決されたかどうかはわかりませんが、追跡するための便利な方法もありません。
doub1ejack 2013

45
この質問に与えられた理由自体を「オフトピック」として「賛成」または「反対」できる機能をこのWebサイトに追加して、これらのタイプの質問を「オントピック」に戻すのに役立つ可能性があります。
Sanjay

9
++なぜこれが主題外であるのか私にははっきりしません。質問に明確な客観的な答えがあります。OPは意見を求めているのではなく、これら2つのシステムに関する客観的な情報を求めています。user799188は素晴らしい客観的な答えを提供しました。
user48956 2014年

3
管理者は、コードにコードが含まれていて、求められている種類の情報が含まれていない場合は、質問を見るだけだと思います。ところで、いつでも投票して質問を再開できます。
Tarun

11
質問が再開されました。ようこそ、皆さん...
Alexis Dufrenoy 2014年

回答:


523

C、A、P(整合性、可用性、パーティション許容度)のうち、どちらがより重要ですか?クイックリファレンス、NoSQLシステムのビジュアルガイド

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

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

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

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

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

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

Kristina ChodorowMongoDBを支えるチームの一部)による日付(2009年6月)のベンチマーク

MongoDBに行きます。

それが役に立てば幸い。


8
私はMongoDBのはどのような方法で一貫していない理解して何から:ivoras.sharanet.org/blog/tree/...
sheerun

2
現時点では良い情報ですが、これは本当に古く、多くの点が変更されています(MongoのRESTインターフェースを含む)。
rICh 2014年

4
少し誤解を招くかもしれませんが、couchdbのバージョン管理は議論の余地はありません。couchdbで使用されるバージョン管理スキームは、言うまでもなくバージョン管理として使用すべきではありません。パーティションの処理に使用されます。データベースの圧縮中に、リビジョンは実際に削除された場合と同様に削除されます。また、データベースにはrevチェーンのみを残す必要があります。couchdbでバージョンを処理する場合は、mongodbで実行できるのと同じように実行する必要があります。
ロイック・フォーレ-ラクロワ

2
couchdbは自己完結型のWebアプリケーションを持つことができることをリストに追加します。couchdbと同様に、実際にはWebサーバーです。
ロイック・フォーレ-ラクロワ

41
332票の間違った回答に驚いています。MongoDBは、デフォルトではCPで、CouchDBのはAPであるstackoverflow.com/questions/11292215/...
アドナン・kamili

219

上記の答えはすべて話を複雑にします。

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

それでおしまい。モバイルおよびデスクトップデバイスに複製するCouchDBの(素晴らしい)機能が必要でない限り、MongoDBには現在、パフォーマンス、コミュニティ、およびツールの利点があります。


18
簡潔、彼らは私がそれを好きなように。
2015年

私はこのような単純で過度に技術的な答えが大好きです。ありがとう!

この答えは、モバイル、オフライン、同期を探している人たちを釘付けにします!感謝
エリックカプルン2016年

「モバイルデバイスに複製する」を読んだとき、笑いました笑データはどれくらいですか?
ダニエルW.

3
「あなたのデータはどれくらいですか?」-それは本当に事ですか?データが大きいためにCDBを選択する可能性があります-または、代替よりもレプリケーションが優れているためにCDBを選択する可能性があります。この場合、デバイスごとに約100Mb〜200Mbまでデータセットをフィルタリングします。それは悪いことですか?
Ewan Makepeace

62

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

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

実際には、ほとんどの人にとって決定的な要因は、MongoDbがSQLに似た構文でアドホッククエリを許可し、CouchDbが許可しないという事実です(これらのビューを作成しても、マップ/リデュースビューを作成して、一部のユーザーを無効にする必要があります)迅速なアプリケーション開発に対応-ストアドプロシージャとは関係ありません)。

受け入れられた回答で指摘されたポイントに対処するには:CouchDbには優れたバージョン管理システムがありますが、バージョン管理が重要な場所にのみ適している(またはより適している)とは限りません。また、couchdbは追加専用の性質により、書き込みが非常に簡単です(書き込み操作はすぐに返され、データが失われないことが保証されます)。

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

公平かつ網羅的にするために、MongoDbがCouchDbよりも優れている点は、ツールとマーケティングです。彼らは、すべての主要な言語とプラットフォーム向けの第一級の市民ツールを備えており、オンボーディングを簡単にしており、アドホッククエリにこれを追加すると、SQLからの移行がさらに簡単になります。

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

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

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

しかし、それを実行したら、それは本当に報われます。私は個人的に、別のデータベースを選択するためにプロジェクトに非常に強力な理由または大きな取引ブレーカーを必要としていますが、これまでのところ、私はまだ会っていません。


12
2016年の更新:2016年9月にリリースされたバージョン2.0以降、CouchDbはそのままのアドホッククエリをサポートしています:)
tobiak777

1
CouchDb relies on b-tree indexes. This means that whether you have 1 "row" or 20 billions, the querying time will always remain below 10ms.これは、ほぼすべてのデータベースに当てはまりますか?このように表現されているということは、そうでないことを意味しています。
シェルバク

38

この質問を自分でしますか?そして、あなたはあなたのDBの選択を決定します。

  1. あなたはマスターマスターが必要ですか?次に、CouchDB。主にCouchDBは、マスターとマスターのレプリケーションをサポートしています。これにより、ノードが長期間切断されることが予想されます。MongoDBはその環境ではうまく機能しません。
  2. 最大のR / Wスループットが必要ですか?その後、MongoDB
  3. DBサーバーが1つしかないため、究極の単一サーバーの耐久性が必要ですか?次に、CouchDB。
  4. 非常識なスループットを維持しながら、シャーディングが必要なMASSIVEデータセットを保存していますか?次にMongoDB。
  5. データの強い整合性が必要ですか?次にMongoDB。
  6. データベースの高可用性が必要ですか?次に、CouchDB。
  7. マルチデータベースとマルチテーブル/コレクションを期待していますか?その後、MongoDB
  8. あなたは持っているユーザーがオフラインのモバイルアプリを、サーバにその活動データを同期したいですか?次に、CouchDBが必要です。
  9. 多種多様なクエリエンジンが必要ですか?その後、MongoDB
  10. DBを使用するには大きなコミュニティが必要ですか?その後、MongoDB

#9は、CouchDB 2.xにおけるCouchDBとMongoDBの間の仮想的なつながりです。
Flimzy

27

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

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


7
有用な答えですが、結論は好きではありません。
エリックカプルン2016年

「嫌い」とはどういう意味ですか?
Alexis Dufrenoy 2016年

23

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

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

私が思いついた唯一の回避策は、空の値がUUIDに連結された特別なプレフィックス(null:など)に変換される、特別なnull値のファミリーを持つことです。これは本当の悩みの種です。なぜなら、書き込み/クエリ/読み取りの際に、空の値との間の変換を行う必要があるからです。大きな迷惑。

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

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


3
申し訳ありませんが、良い考えではないというこのしつこい気持ちと、私が無視しないことを学んだその気持ちです
イーグルストーム

8
さて、私は気持ちで議論することはできません。私が知っているのは、オプションのフィールドが存在する場合に一意であるため、疎な一意インデックスが必要だったことです。
マーク

37
問題を説明する実際のユースケースがあると聞きましたが、私の腸はどうですか?
シェフ、2013年

14
私は知らない。それはどうですか?
マーク

2
ROTFL。+1アレックスフォード&陽気なコメントをマークします。:-))@マーク、あなたが挙げた問題が本当にMongoDBからCouchDBへの切り替えを正当化することを確信していません。私はMongoDBもCouchDBも使用していませんが、私の直感は、CouchDBで他のいくつかの複雑な制限に遭遇し、それらを回避するためにさらに時間を費やすことになると教えてくれます。MongoDBをマスターしている場合は、おそらくそれを続ける必要があります。しかし、繰り返しになりますが、私はNosqlの世界に行ったことはありません。これは私の直感です。
MiniQuark 2013

6

あなたはモンゴでそれをよりよくすることができると確信しています(より慣れています)、そしてソファーでもできると確信しています。

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

彼らは両方ともあなたが使用する他の要因を見たいと思うかもしれないそれをします:あなたが気にかけている他の機能、人気など。Googleの洞察、deed.comの求人は人気を見るための方法でしょう。

5分でmongoを実行できるようになると思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.