sql >> データベース >  >> NoSQL >> Redis

非常に大量のデータ用のどのNoSQLデータベース

    私はRedisとMongoDBの経験がありますが、どちらもユースケースにはお勧めしません。 Redisはあらゆる点で優れていますが、RAMのみであり、クラスタリング機能がないため(まだ開発中です)、拡張性はあまり高くありません。 MongoDB小さなレプリカセット以外のものを必要とするものには二度と使用しません。

    基本的に、MongoDBは未成熟であり、あらゆる種類の大量の高性能要件には完全に適していません。ディスクのフラッシュ中に保持されるグローバル書き込みロックがあります。これは、実行内容によってパフォーマンスが大きく異なる可能性があることを意味します。実際には、ドキュメントを大きくする更新が不可能になるため、削除にも十分注意する必要があります。削除と言えば、データベースが大幅に断片化されるため、削除を何度も行うと、パフォーマンスが低下します。

    1.8.0から1.8.1でのシャーディングは惨事でした。安定したリリースになるはずのない完全なショーストッパーのバグがありました。構成が適切にフラッシュされず、データベースを不良状態にするのは非常に簡単だったため、チャンクがプライマリシャードから移動することはありませんでした。 1.8.2はそれらのほとんどを解決し、より安定しているように見えますが、シャーディングの実装を1ビット信頼していません。これに加えて、すべてが機能していてもシャーディングは難しいので、自然なシャードキーを選択するのは必ずしも簡単ではありません。シャーディングを行わないと、多くの悲しみが生じます。

    MongoDBは非常に使いやすく、機能セットは非常に優れています。ドキュメント、ドライバー、コミュニティはすべて素晴らしいです。 MongoDBはMySQLの代わりとして非常に機能しますが、スケールアウトする必要があるものには使用しないでください。

    現在、カサンドラへの移転を検討しています。ダイナモモデル(例:マスターノードなし、どこにでも書き込みと読み取り、クラスターを拡張するためにノードを追加するだけ)は魅力的であり、機能は多かれ少なかれ私たちに適しています。データモデルは、MongoDBと同じようにスキーマではありませんが、少し制限があります(基本的に、1つまたは2つのレベルのハッシュから選択できます)。コミュニティに参加すれば、コミュニティは良いと思いますが、これまでのところ、一般的な問題を解決するための適切な情報を見つけるのは難しく、ドキュメントが不足しています。ブログで見つけた情報のほとんどは1年前のものであり、それ以来多くのことが起こっています(0.7と0.8はどちらも非常に重要な更新のようですが、ほとんどの情報は約0.6です)。私がこれまで見てきたことから、ドライバーもあまり成熟しておらず、十分に文書化されておらず、Thrift、Avro、CQLのどれを使用すべきかについて誰もが議論しているようです(そしてそれは0.6から0.7から0.8に変更されました) 。

    Riakは、Cassandraと同じ理由で興味深いものですが、純粋なKey-Valueストアでは不十分であるため、最初に読み取りを行わずに更新できる必要があります。 Riakでは、値が単なるブロブであるため、これは不可能です。ただし、これは問題にはならないようです。

    HBaseは別の候補です。 ZooKeeper、HDFSなど、さまざまな要素があるため、セットアップして実行するのは面倒なようです。しかし、データモデルはCassandra(柱状、つまり1レベルのハッシュ)に似ています。あなたにとって重要です。試行錯誤のようですが、MongoDBの場合と同様に、シャーディングの問題に注意する必要があります。キーを検討する必要があります。そうしないと、問題が発生します。

    CouchDB、Project Voldemort、その他数え切れ​​ないほどの選択肢もあります。 「非常に大量のデータ」を真剣に考えているなら、それはCassandra、Riak、HBaseの間だと思います。純粋なKey-Valueストレージでは不十分な場合は、Riakをストライクします。 「完全に一貫性のあるレプリケーション」の意味によっては、古い値を読み取る可能性があるため(必ずしも大きくなく、調整可能であるとは限りません)、CassandraとRiakは除外されます。

    結局、特定のユースケースで試してみる必要があるので、この答えから本当に持ち帰る必要があるのは、MongoDBを気にしないでください。



    1. MongoDB $ radionsToDegrees

    2. 1つのRedisLuaスクリプトで複数のDBを使用しますか?

    3. MongoDB-.find()で条件ステートメントを設定する

    4. MongoDBデータ型の概要