目次:
- という低品質保証を提供します。この動作は、単一レコード単位で実装される傾向があるため、通常は限定されています。
- と呼ばれます。変更はローカルに行われますが、他のすべてのノードが更新されたときにのみ適用され、クライアントに確認されます。
データベースの 整合性 プロパティは、データがデータベースに正常に書き込まれると、それに続くクエリはデータにアクセスしてデータの一貫したビューを取得できます。実際には、これは、レコードをデータベースに書き込んですぐにそのレコードを要求すると、そのレコードが確実に表示されることを意味します。 Amazonの注文や銀行振込などの場合に特に便利です。
<! - 一 - >一貫性はスライディングスケールですが、ここでカバーするには深すぎるテーマです。ただし、NoSQLの世界では、一貫性は一般的に次の2つのキャンプのいずれかになります。
-
ACID一貫性(ACIDは原子性、一貫性、分離、耐久性の略です):ACIDは、データが書き込まれると、読む。 最終的な一貫性(BASE):
-
BASEは、データが書き込まれると、最終的には読み上げられるようになることを意味します。 <!データベースの強固な一貫性が必要ではないと信じている人と、絶対に信じる人の間で闘争が激しさを増しています(999人を
NoSQL企業に
'マーケティング部門! )。 現実はどこかにある。誰かのFacebookの投稿が彼の友達全員に5分間見られないことは重要ですか?いいえ、おそらくそうではありません。しかし、「Facebookの投稿」を「10億ドルの金融取引」に変更すると、あなたの態度は急速に変わります!どの一貫性アプローチを選択するかは、状況によって異なります。しかし、私の経験では、ミッションクリティカルなエンタープライズシステムの状況では常に強い一貫性が選択されています。 <! ACIDは、トランザクションシステムの一般的な原則であり、リレーショナルシステムだけにリンクされたものではなく、単にデータベースであっても、よく知っておく価値があります。 ACIDは、基本的には「 このデータベースには、すべてのデータベースに対して指定されていないデータの破損または喪失を防止する機能があります。実際、NoSQLデータベースの大部分はACID保証を提供していません。
Foundation DB、MarkLogic、Neo4jは注目に値する例外です。一部のNoSQLデータベースは、トランザクションの完了を許可する前に他の誰かが文書を変更したかどうかを確認する
確認と設定という低品質保証を提供します。この動作は、単一レコード単位で実装される傾向があるため、通常は限定されています。
MongoDBは、チェックとセットの機能を提供する注目すべきデータベースです。 MongoDBでは、更新中にノード全体のデータをロックすることができるため、操作が完了するまですべての読み取り操作とすべての書き込み操作ができなくなります。しかし、同社はこの制限を取り除くために取り組んでいる。 BASE BASEは、ACID保証を行うのではなく、データベースが一貫性とデータ可用性の調整可能なバランスを持っていることを意味します。これは、通常、特定のデータベースクラスタのノードがデータベースの一部のプライマリマネージャとして機能し、他のノードが読み取り専用のレプリカを保持する場合です。
すべてのクライアントがすべての更新を確実に見るためには、データを保持するプライマリノードへの書き込みは、すべての読み取り複製が最新になるまでロックする必要があります。これは、 2つの -
フェーズコミット
と呼ばれます。変更はローカルに行われますが、他のすべてのノードが更新されたときにのみ適用され、クライアントに確認されます。
BASEはこの要件を緩和し、トランザクションが成功するためには、同じデータを保持するノードのサブセットのみを更新する必要がある。トランザクションがコミットされた後、読み取り専用レプリカが更新されます。
このアプローチの利点は、トランザクションがより迅速にコミットされることです。読み取り可能なライブレプリカを持つことは、データの読み込み負荷を分散して、読み込みをより迅速に行うことも可能になります。欠点は、読み取り複製物の一部に接続しているクライアントが、指定されていない期間の古い情報を参照する可能性があることです。いくつかのシナリオでは、この状態は正常です。あなたがFacebookに新しいメッセージを投稿し、あなたの友人の何人かが数分間それを見ないなら、それは大きな損失ではありません。ただし、銀行に支払い注文を送信した場合は、即時取引が必要な場合があります。読取り専用レプリカに対する別のアプローチは、クラスタ上の1つのノードのみが常にデータベースの特定の部分にサービスを提供する - 何もない クラスタを有することである。 共有は何もあなたが複製を失うことを意味しません。この方法を採用しているデータベースは、通常、別のプライマリノード(複数可)のセカンダリ領域にデータをレプリケートしますが、読み取りと書き込みのマスターはいつでも1つのみです。共有されていないクラスタは、より単純な整合性モデルの利点がありますが、レプリカには2フェーズコミットが必要です。この事実は、すべてのレプリカが更新されている間にトランザクションがロックされることを意味します。 (内部ロックと他のノードのロックにより、2つのフェーズが得られます)。非共有レプリカ・データ領域には読取り要求が受信されないため、通常、読取り専用レプリカを持つ共有データ・クラスタよりも影響が少なくなりますデータベースの一部。したがって、2フェーズ・コミットは、シェアード・ナッシング・クラスタでは、読み取り可能なレプリカを持つクラスタよりも高速です。
ACIDまたはBASEを選択しますか?
予想通り、NoSQLベンダーは異なる独自のアプローチを主張することで、競合他社と差別化できるからです。しかし、ロードマップにACID準拠のNoSQLベンダーが多数いることは興味深いことです。
いくつかのNoSQLデータベースは、BIDを支持しているにもかかわらず、ロードマップにACID準拠を持っています。これは、ACID保証が企業、ミッションクリティカルなシステムにどの程度関連しているかを示しています。
多くの企業ではアイデアをテストする際にBASE一貫性のある製品を使用しています。これは無料なので、ミッションクリティカルなシステムで稼動させたい場合はACID準拠の有料データベースに移行します。 あなたがACIDを必要としているかどうかを判断する最も簡単な方法は、人と他のシステムがあなたのデータと持つ相互作用を考慮することです。たとえば、データを追加または更新する場合は、次のクエリで変更を確認することが重要ですか?言い換えれば、データベースの現在の状態に重要な決定が下されていますか?期限切れになっているデータが少しだけ古いことが判明すれば、その決定に致命的な欠陥が生じる可能性がありますか? 金融サービスでは、一貫性の必要性が明らかです。トレーダーが在庫を購入すると考えてください。彼らは取引前に現金残高をチェックして、取引をカバーするための資金を確保する必要があります。彼らは正しいバランスが見えない場合、別の取引にお金を使うことにします。彼らが照会しているデータベースが最終的に一貫しているだけであれば、十分な資金が不足しているとは見られず、組織は財務リスクにさらされます。ヘルスケア、防衛、知能、その他の分野において、ACIDのBASEに対する同様のケースを構築することができる。しかし、それはすべてデータにまでこだわっており、適時性とデータセキュリティの両方の重要性があります。