2017-12-25 61 views
1

読むのカップルは/書き込み性能、MongoDb vs Cassandra:神話を読み書きする?カサンドラ対ネットに関するMongoDBの記事の

書き込み

を読んで一般的には、データがでかいときモンゴよりも優れているカサンドラは、パフォーマンスを書くと言われています。私は以下の文を参照してください

カッサンドラのストレージエンジンは、あなたのデータセットがどれほど大きくなっても、一定時間の書き込みを提供します。 MongoDBでは書き込みはBツリーベースのストレージエンジンのために部分的には になりますが、データベースごとの書き込みロックが であることが原因です。ここで

は私の質問です: -は、この文は正しいですか? Mongoはデータベースごとにではなく、ドキュメントごとにロックをサポートしています。右?だから、現時点では、キャスアンドラはモンゴーよりもパフォーマンスが良いですか?もしそうなら、なぜですか?

読む

一般的には、Mongoのパフォーマンスがカサンドラよりも優れている読んで私はカサンドラよりも読み取りに優れたモンゴを作るもの任意の推論を見つけられませんでしたと言われて?

アップデート: - ジャレド回答から

this forum

読み込みでは、彼らはカサンドラ であるよりも、MongoDBののストレージエンジンで、より効率的です。 Cassandraのストレージエンジンは、データを追記専用フォーマットで格納するため、書き込み時には非常によく動作します。 これは、シーク時間が貧弱な回​​転ディスクドライブの を有効に使いますが、シリアルを行うことができます は非常に速く書き込みます。しかし、読んでいるときは、 は、多くの場合、最新バージョンの を呼び出し元に返すためにオブジェクトのいくつかのバージョンをスキャンする必要があるという欠点があります。 MongoDBは のデータを更新します。これは、書き込みが処理されるときによりランダムなIOを実行することを意味します。 は、ディスク上のオブジェクトの正確な位置を1つのbツリー ルックアップで見つけることができるため、読み取り処理時に高速になるという利点があります。

それはカサンドラを理解するために私を助け、それだけで最初に検索し、それを編集しているモンゴのような最後の代わりに、代わりに編集でそれを追加する必要があるため、既存のレコードの削除/編集しながら、高速です。これは、モンゴ

よりも書き込みに優れたカサンドラになります。しかし、同じことの事はモンゴカサンドラは、発信者

別のに戻るには、最新バージョンを取得するために、同じレコードのいくつかのバージョンをスキャンする必要があるため、カサンドラよりも遅くしますこのblogから理由カサンドラが書き込みに

優れている理由は、その「単一マスター」のモデルとのMongoDBだけ 主に書き込みを取ることができます。セカンダリサーバは読み取り専用で使用できます。だから 本質的に3つのノードのレプリカセットがある場合、マスターだけが書き込みを取る であり、他の2つのノードは読み取りにのみ使用されます。この は、書き込みのスケーラビリティを大幅に制限します。複数のシャードをデプロイすることもできますが、 は、データノードの1/3だけが書き込みを取ることができます。 Cassandra の「複数マスタ」モデルでは、どのサーバーでも書き込みが可能です。 基本的に、書き込みのスケーラビリティは、クラスタ内にあるサーバの数が に制限されています。クラスタ内にあるサーバーの数が増えれば、 の規模が大きくなります。同じblogから

モンゴがカサンドラよりも読み込みで優れている理由を

セカンダリインデックスはMongoDBの中にファーストクラスの構造です。これにより、 がネストされていても、MongoDBに格納されているオブジェクトの任意のプロパティを簡単に索引付けできます。これにより、これらの セカンダリインデックスに基づいて簡単にクエリできます。カッサンドラは副インデックス の索引のみをサポートしています。セカンダリインデックスも単一列に限定され、 等価比較に制限されています。主に プライマリキーでクエリを実行する場合は、Cassandraがうまく動作します。

答えて

2

質問への回答: はい。最新のmongoDBは、ドキュメントごとにロックをサポートしています。 https://docs.mongodb.com/manual/core/wiredtiger/ここ

は、書き込み操作のベンチマークです:https://www.datastax.com/nosql-databases/benchmarks-cassandra-vs-mongodb-vs-hbase これらのベンチマークによるとカサンドラは、(クラスタ内のノード数が多い上)規模で良好に動作する

それはあなたを助けることを願っています。ここで

も重い書き込み用に最適化されたLSM-木を使用している

カサンドラカサンドラについて

を助けるかもしれないあなたの質問に関するいくつかの詳細です。 https://docs.datastax.com/en/cassandra/2.1/cassandra/dml/dml_manage_ondisk_c.html

いくつかの詳細

書き込みを行って、データがすぐにコミットログに書き込まれます。コミット・ログはクラッシュ・リカバリーのメカニズムです。書き込みは、コミット・ログに書き込まれるまで正常と見なされません。 データがコミットログに書き込まれると、memtableに書き込まれます。最近のバージョンのCassandra memtablesは、主にネイティブメモリに格納され、JVMヒープには格納されません。したがって、パフォーマンスも向上します。

memtableに格納されているオブジェクトの数がしきい値に達すると、memtableの内容がSSTableというファイルでディスクにフラッシュされます。新しいmemtableが作成されます。 memtableがSSTableにフラッシュされると、それは不変です。

すべての書き込みが追加操作であるため、Cassandraに値を書き込むための読み取りやシークは必要ありません。デフォルトMongoのことでMongoDBの

に関して

はBツリーを使用しているMMAPv1ストレージエンジン(https://docs.mongodb.com/manual/core/mmapv1/)を使用しているが、MongoDBの最近のバージョンはまた、LSM-ツリーをサポートすることができるWiredTigerストレージエンジン(https://docs.mongodb.com/manual/core/wiredtiger/)を使用します。

ロックに関して:WiredTiger MongoDBはドキュメントレベルのロックをサポートしていますが、MMAPv1はコレクションレベルの並行性制御をサポートしています。

いくつかの有用な記事: https://dba.stackexchange.com/questions/121160/mongodb-mmapv1-vs-wiredtiger-storage-engines https://docs.mongodb.com/manual/faq/concurrency/ https://www.percona.com/blog/2016/01/06/mongodb-revs-you-up-what-storage-engine-is-right-part-1/

+0

ここに一つの補正/明確化://docs.mongodb:MongoDBの3.2(2年前に〜発売)以来、デフォルトのストレージエンジンは、HTTPSを参照してください(WiredTigerてきました。 com/manual/core/storage-engines)を参照してください。 – IanWhalen

+0

しかし、mongoはCassandraよりも読み込みパフォーマンスが速いのですか? – emilly