web-dev-qa-db-ja.com

MongoDB上でCouchDBを使用する場合、およびその逆の場合

私はこれら2つのNoSQLデータベース間で立ち往生しています。

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

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

603
Luke101

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

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

ブログ投稿、 Cassandra対MongoDB対CouchDB対Redis対Riak対HBase対Membase対Neo4j比較 has 'Best Used '各NoSQLデータベースの比較シナリオ。リンクを引用して、

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

最近(2012年2月)など 包括的な比較 リヤドカラ、

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

両方を試した誰かによるブログ投稿(2011年10月)、MongoDB Guy Learns CouchDBはCouchDBのページングではないことについてコメントしました便利です。

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

MongoDBに行きます。

それが役に立てば幸い。

506
user799188

とりわけ答えは物語を複雑にします。

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

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

197
Ewan Makepeace

非常に古い質問ですが、それはグーグルの上にあります、そして、私は私が見る答えをとても好きではありません。

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

実際には、ほとんどの人にとって決定的な要素は、CongDbではできないがMongoDbがSQLのような構文でアドホックなクエリを実行できることです(これらのビューを作成しても一部の人は無効にするmap/reduceビューを作成する必要があります)。 Rapid Application Developmentにやさしいです - 彼らはストアドプロシージャとは関係ありません)。

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

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

公正で網羅的であるために、MongoDbがCouchDbよりも優れている利点は、ツールとマーケティングです。彼らはすべての主要な言語とプラットフォームのための一流の市民ツールを持っています。そして、これは彼らの特別な質問に加えられてSQLからの移行をさらに簡単にします。

CouchDbにはこのレベルのツールはありません - 今日利用可能なライブラリはたくさんありますが - CouchDbはHTTP APIとして公開されているので、お好みの言語でラッパーを作成するのは簡単です。私は個人的には膨張を避け、あなたが望むものだけを取ることができるようにするのでこのアプローチが好きです(インターフェース分離の原則)。

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

あなたが「正しい仕事のための正しいツール」を使いたいだけならば、CouchDbの使用はお勧めできません。なぜなら、それをそのまま使用することはできず、「CouchDbの結合はどこにあるのでしょうか」などの怒ってブログ記事を書くことになるからです。そして "トランザクション管理はどこにありますか?"確かにCouchdbは - 逆説的に - 非常に透明ですが同時にあなたが本当に輝く(そして実際に働く)ためにパラダイムシフトとあなたが問題に取り組む方法の変更を必要とします。

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

50
tobiak777

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

  1. master-master が必要ですか。それからCouchDB。主にCouchDBはノードが長期間切断されることを予測するマスター - マスターレプリケーションをサポートします。 MongoDBはその環境ではうまくいきません。
  2. MAXIMUM R/Wスループット が必要ですか。それからMongoDB
  3. あなたは究極の 単一サーバーの耐久性が必要ですか あなたは単一のDBサーバーを持つことになるからですか?それからCouchDB。
  4. あなたは MASSIVEデータ を保存していますか?そして非常に高いスループットを維持しながら分割が必要ですか?それからMongoDB。
  5. 強い 一貫性 データが必要ですか。それからMongoDB。
  6. データベースの高 可用性 が必要ですか。それからCouchDB。
  7. あなたは マルチデータベース そしてマルチテーブル/コレクションを望んでいますか?それからMongoDB
  8. あなたは モバイルアプリのオフラインユーザーを持っています そして彼らの活動データをサーバーに同期させたいですか?それならCouchDBが必要です。
  9. 多種多様な クエリ engineが必要ですか。それからMongoDB
  10. DBを使うためには大規模な community が必要ですか。それからMongoDB
31
Somnath Muluk

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

http://www.quora.com/How-does-MongoDB-compare-to-CouchDB-What-are-the-ad-de-ments-disadvantage-of-各 /

MongoDB:より良い問い合わせ、BSONでのデータストレージ(より速いアクセス)、より良いデータの一貫性、複数のコレクション

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

結論として、MongoDBは速いです、CouchDBは安全です。

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

24
Alexis Dufrenoy

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

問題はこれです - あなたが存在するならばユニークであり、あなたはフィールドが存在しないところにあるすべてのオブジェクトを見つけたいと思うあなたはフィールドを持っています。 Mongoで疎固有索引が実装される方法は、そのフィールドが欠落しているオブジェクトはまったく索引にないということです - それらはそのフィールドに対する照会では検索できません - {$exists: false}は機能しません。

私が思いついた唯一の回避策は、空の値が( null: のような)特別な接頭辞に変換されてuuidにされる、特別なnullファミリーの値を持つことです。これは本当の頭痛の種です。書き込み/クエリ/読み取り時に空の値との間で変換を行う必要があるからです。大きな迷惑です。

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

ところで、誰もがスパースなユニークインデックス問題を説明しているそれぞれのMongo号へのリンクを知っているなら - 共有してください。

20
mark

私はあなたがMongo(もっとよく知っている)を使うことができると確信しています、そしてあなたもソファを使うことができることをかなり確実にします。

どちらもドキュメント指向(JSONベース)であるため、「列」ではなく、むしろ文書内にフィールドがあります - しかし、それらは完全に動的にすることができます。

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

あなたはそれを試すことができます私はあなたが5分で実行することができるはずだと思います。

4
dm.