web-dev-qa-db-ja.com

MongoDBとCassandra

私は最良の移行オプションとなる可能性があるものを評価しています。

現在、私は分割されたMySQL(水平パーティション)を使用しています。データのほとんどはJSON BLOBに格納されています。私は複雑なSQLクエリを持っていません(自分のデータベースを分割してからすでに移行済みです)。

今のところ、MongoDBとCassandraの両方が選択肢になる可能性が高いようです。私の状況:

  • すべてのクエリで多数の読み取りが行われ、通常の書き込みは少なくなります。
  • 「大規模な」スケーラビリティを心配しないで
  • 簡単なセットアップ、メンテナンス、そしてコードについてもっと心配する
  • ハードウェア/サーバーコストを最小限に抑える
713
ming yeow

すべてのクエリでの読み込み数が多く、通常の書き込み数が少ない

どちらのデータベースも、ホットデータセットがメモリに収まる読み取りには十分に機能します。両方ともジョインレスデータモデルを強調し(そして代わりに非正規化を奨励し)、そして両方とも documents または rows 上のインデックスを提供しますが、MongoDBのインデックスは現在もっと柔軟です。

Cassandraのストレージエンジンは、データセットが大きくなっても一定時間書き込みを行います。 MongoDBでは、Bツリーベースのストレージエンジンのせいで書き込みがより問題になりますが、 multi-粒度ロッキング のせいでさらに書き込みが難しくなります。

分析のために、MongoDBはカスタムのmap/reduce実装を提供します。 Cassandraは、 Hive (Hadoop map/reduce上に構築されたSQLデータウェアハウス)および Pig (多くの人に適していると考えるHadoop固有の分析言語)を含む、ネイティブHadoopサポートを提供します。 SQLよりもワークロードをマップ/削減します。 Cassandraは Spark の使用もサポートしています。

"大規模な"スケーラビリティについて心配していない

単一のサーバーを検討している場合は、おそらくMongoDBのほうが適しています。スケーリングについてもっと心配している人のために、Cassandraの単一障害点のないアーキテクチャーはセットアップがより簡単で信頼性が高いでしょう。 Cassandraはまた、複数のデータセンターのサポートを含め、レプリケーションの動作方法をより詳細に制御することができます。

簡単なセットアップ、メンテナンス、そしてコードについてもっと心配している

どちらもセットアップが簡単で、単一サーバーの場合はデフォルトでそのまま使用できます。 Cassandraは、マルチサーバー構成でセットアップするのが簡単です。特別な役割を持つノードがないためです。

現在JSON BLOBを使用しているのであれば、MongoDBはBSONを使用してデータを保存しているので、ご使用のケースには非常に適しています。現在のデータベースよりも豊富でクエリ可能なデータを持つことができます。これはMongoにとって最も重要な勝利になります。

562
Michael

階層的なデータ管理システムを構築しながらMongoDBを(過去6ヶ月間)広範囲に使用してきました。セットアップの容易さ(インストール、実行、使用)とスピードの両方を保証することができます。あなたがインデックスについて慎重に考えている限り、それはスピード的に絶対に絶叫することができます。

私は、CassandraがTwitterのような大規模プロジェクトで使用されているため、MongoDBチームが同等のものに取り組んでいるにもかかわらず、より優れたスケーリング機能を持っていると私は思います。試運転段階を超えてCassandraを使ったことはないので、詳細については説明できません。

私がNoSQLデータベースを評価していたときの私にとっての真のスウィンガーはクエリでした - Cassandraは基本的には単なる巨大なキー/値ストアであり、クエリは少々手間がかかります(少なくともMongoDBと比べて)。かなりの量のデータを一種の手動索引として複製します。一方、MongoDBは "query by example"モデルを使用しています。

たとえば、Usersを含むCollection(RDMSテーブルと同等のMongoDB用語集)があるとします。 MongoDBはレコードをドキュメントとして保存します。これは基本的にバイナリのJSONオブジェクトです。例えば:

{
   FirstName: "John",
   LastName: "Smith",
   Email: "[email protected]",
   Groups: ["Admin", "User", "SuperUser"]
}

管理者権限を持つSmithというすべてのユーザーを見つけたい場合は、新しい文書を作成するだけです(管理コンソールでJavascriptを使用するか、運用環境で任意の言語を使用します)。

{
   LastName: "Smith",
   Groups: "Admin"
}

...そしてクエリを実行します。それでおしまい。比較、RegExフィルタリングなどのための演算子が追加されていますが、それはすべて非常に単純で、Wikiベースの文書は非常に優れています。

142
Richard K.

なぜ伝統的なデータベースとNoSQLデータストアのどちらを選ぶのですか?両方を使う! NoSQLソリューションの問題は(初期の学習曲線を超えて)トランザクションがないことです。MySQLへのすべての更新を行い、読み取り用にNoSQLデータストアをMySQLに追加させると、各テクノロジの長所が得られます。これはより複雑になりますが、あなたはすでにMySQL側を持っています - MongoDB、Cassandraなどをミックスに追加するだけです。

NoSQLデータストアは通常、他の点では同じ仕様で従来のDBよりも優れた拡張性を示します。Facebook、Twitter、Google、およびほとんどの新興企業がNoSQLソリューションを使用しているのには理由があります。オタクだけではなく、新しい技術が話題になっています。

108

私はおそらく変な男になるだろうが、私はあなたがMySQLにとどまる必要があると思います。あなたが解決する必要がある本当の問題を説明したことはなく、そしてMySQL/InnoDBはblob/jsonデータのための優れたストレージバックエンドです。

Webエンジニアの間では、RDBMSのすべての機能が使用されているわけではないことに気付いたらすぐに、より多くのNoSQLを使用しようとする共通のトリックがあります。 NoSQLデータベースのデータエンジンはかなり劣っている(MySQLがストレージエンジンと呼んでいるもの)ので、これだけでは正当な理由ではありません。

さて、あなたがそのような種類ではない場合は、MySQLに missing が何であるかを指定してください。クラスタ内のデータ一貫性保証は、より高い書き込みスループットなどで見返りをもたらします。

56
Kostja

私はCassandraを使ったことはありませんが、MongoDBを使ったことがあり、すごいと思います。

単純な設定をしているのであれば、これはそれです。MongoDBを解凍し、mongodデーモンを実行するだけです。それが実行中です。

明らかにそれは初心者にすぎませんが、始めるためには簡単です。

20
dalton

昨日mongodbでプレゼンテーションを見ました。私は間違いなくセットアップは「単純」で、解凍して起動するのと同じくらい単純だったと言えます。完了しました。

私は、mongodbとcassandraの両方が、ほとんどすべての通常のLinuxハードウェア上で動作すると信じているので、この分野にはそれほど大きな障壁はないはずです。

私はこの場合、一日の終わりに、あなたがどの個人的により快適に感じるか、そしてどちらがあなたが好むツールセットを持っているかに至るであろうと思います。 mongodbに関するプレゼンテーションに関しては、プレゼンターはmongodb用のツールセットはかなり軽量であり、MySQL用のツールに似たツールがたくさんあることを示しました。これはもちろん彼らの経験だったのでYMMV。私がmongodbについて気に入ったことの1つは、それに対する言語サポートがたくさんあるように思われたことです(私が主に使用しているのはPythonと.NETの2つです)。

Mongodbを使用しているサイトのリストはかなり 印象的 です、そして私はTwitterがちょうどcassandraを使用するように切り替えたことを知っています。

12
GrayWizardx