2012-04-27 15 views
4

NoSQLデータベースは、高輝度データ読取りアプリケーションに適したオプションですが、データの更新やトランザクション性が非常に重要な場合にはあまり適していませんACIDに準拠していない)。右?おそらくあまりにも単純です。NoSQLデータベース:一貫性はどうですか?

しかし、私が少なくとも部分的には、NoSQLデータベースが読んだり書いているデータの「読み込み一貫性のある」ビューをどのように維持しているかについて懸念しています。それとも彼らは?もしそうでなければ、本当に大きな問題ではないでしょうか?

つまり、読んでいる(または更新している)データが読んでいるときに変更されていると、一貫性のない/汚れた結果セットが得られる可能性があります。 Oracleのrdbmsのバックグラウンドから来ていますが、これはすべてあなたのためだけに処理されていますが、読み込みの一貫性の欠如が大きな問題ではないことを混乱させます。私はこのすべてについていくつかの重要な点を見逃していますが、うまくいくかもしれません。誰かが私をまっすぐにすることができます

答えて

2

MongoDBは、アプリケーションが「懸念を書く」を使用して読取り一貫性の所望のレベルを選択することができます。このコンセプトでは、特定の条件が満たされるまでアプリケーションをブロックすることができます。

例として、操作がマスターサーバーに通信されている限り、書き込みは成功したものと見なすことができます。あるいは、レプリカセット内の大部分のノードに書き込みが伝播されるまでブロックできます。このようにして、パフォーマンス/一貫性を味わうことができます。

+1

詳細を教えてください。同様に、そのような設定のドキュメント参照を提供することができますか? – lcestari

2

NoSQLデータベースは読み込みに一貫性がありますが、それほど大きな問題ではない場合は、CAP theoremを参照してください。この分野では多くの研究が行われていますが、Amazon's Dynamo paperを読んで、NoSQLデータベースなどの分散システムが直面するいくつかの問題と解決策を素早く確認することをお勧めします。

1

それぞれ異なる戦略を実装するため、使用しているNoSQLデータベースによって異なります。たとえば、Riak's explanationの "最終的な一貫性"モデルまたはLars Hofhanselの書面アップを読むことができますACID in HBase

4

私はOracle NoSQLデータベースの開発者であり、特定のNoSQLシステムに関する質問に答えます。

Oracle NoSQL Database APIを使用すると、プログラマは、各APIコールで、読取り一貫性のレベルを指定できます。最も厳しいものから最も安いものまでの4つの可能な値は、絶対、時間、バージョン、およびなしです。 Absoluteは、常に最新の値が返されるように、複製マスターから常に読み取るように指示します。 「時間」は、システムが、少なくともマスターの特定の時間デルタ内にある(例えば、マスターの2秒以内にある任意のレプリカからの値を読み取る)任意のレプリカから値を返すことができることを示す。システムへのすべての読み取りおよび書き込み呼び出しは、「バージョンハンドル」を返します。このバージョンハンドルは、Consistency.Versionが指定されている場合は読み取り呼び出しに渡すことができ、少なくともそのバージョンと同じ日付のレプリカから読み取るようにシステムに指示します。これは、Read Modify Write(CASとも呼ばれます)シナリオで役に立ちます。最後の値、Consistency.Noneは、どのレプリカも使用できる(つまり、一貫性が保証されていない)ことを示しています。

私はこれが役に立ちそうです。

チャールズ・ラム