Nosqlの因果的一貫性とは

公開: 2022-12-13

近年、組織が従来のリレーショナル データベースに代わるものを探しているため、NoSQL データベースの人気が高まっています。 NoSQL データベースの主な利点の 1 つは、データの保存方法とアクセス方法に関して高度な柔軟性を提供できることです。 ただし、この柔軟性には代償が伴います。トレードオフの 1 つは、因果関係の一貫性が保証されないことが多いことです。 因果的一貫性は、分散システムでよく使用される強力な一貫性モデルです。 因果的に一貫性のあるシステムでは、因果的に関連するすべての書き込みは、すべてのクライアントから同じ順序で表示される必要があります。 これは、2 つのクライアントが因果関係のある書き込み操作を実行する場合、それらの書き込みは他のすべてのクライアントから同じ順序で認識される必要があることを意味します。 この柔軟性のトレードオフは、NoSQL データベースでは因果的一貫性が保証されないことが多いことです。 これは、2 つのクライアントが因果関係のある書き込み操作を実行した場合、それらの書き込みが他のすべてのクライアントで同じ順序で表示されるという保証がないことを意味します。 これにより、データベースに格納されているデータに不整合が生じる可能性があります。 NoSQL データベースで因果関係の不一致が発生する要因は多数あります。 1 つは結果整合性の使用です。これは、NoSQL データベースでよく使用される整合性モデルです。 結果整合性システムでは、書き込みがすべてのクライアントにすぐに表示されるわけではありませんが、最終的にはすべてのレプリカに伝達されます。 これは、さまざまなクライアントによって書き込みが順不同に見える時間枠があることを意味します。 因果関係の不一致に寄与する可能性があるもう 1 つの要因は、last-writer-wins 競合解決の使用です。 後書き優先システムでは、2 つのクライアントが互いに競合する書き込み操作を実行すると、最後に操作を実行したクライアントからの書き込みが優先されます。 これにより、書き込みが実行される順序がすべてのクライアントで同じでない場合、不整合が生じる可能性があります。 最終書き込み者優先の競合解決は、最終的に一貫性のあるシステムでよく使用されます。これは、最新の書き込みがすべてのクライアントに表示されるようにするのに役立つためです。 ただし、書き込みが実行される順序がすべてのクライアントで同じでない場合、不整合が生じる可能性もあります。 一般に、NoSQL データベースの柔軟性のトレードオフは、因果的一貫性が保証されないことです。 これは、保存されているデータに矛盾が生じるリスクがあることを意味します。

この記事では、MongoDB の因果整合性保証をリアルタイムで破る方法を説明します。 マジョリティはそれを修正するためにも使用され、最初の試みはマジョリティの読み取りと書き込みを使用することです。 これに続いて、Mongo の論理クロック間隔と無秩序なセッションを見ていきます。 この場合、コーディングには Mongo C# ドライバーを使用しますが、それは完全に私次第です。 レプリカ セット メンバーの大半は、マジョリティ読み取りでクエリから返されたデータを確認しました。 Majority Write の後に Majority Read を使用するという考えは、Write Your Write の問題に対する魅力的な解決策のように見えるかもしれません。 マジョリティ書き込みが理解されると、すべてのセカンダリ サーバーは最新のマジョリティ書き込みのインメモリ スナップショットを保持します。

各オブジェクトには、それを使用して実装される因果整合性モデルでマルチパート タイムスタンプが割り当てられます。 これらのタイムスタンプは、各レプリカでのオブジェクトのバージョン番号を含むベクトルに格納されます。

定義があります。 一貫性は、操作間の潜在的な因果関係を捉えることで、すべてのプロセスが同じ順序で可換操作を監視することを保証します。 つまり、システム内のすべてのプロセスは、因果関係のある操作を実行する方法について共通の理解を持っています。

以下は、シーケンシャルの一貫性に向けた手順です。a) シーケンシャルな書き込みの一貫した順序。 b) 順次書き込みの一貫した順序。 c) 順次書き込みの一貫した順序。 因果一貫性で書く場合、因果関係のある読み取りを同じ順序に保つ必要があります。

Nosqlの一貫性とは?

Nosqlの一貫性とは?
画像ソース: https://slidesharecdn.com

その結果、NoSQL データベースでは、高可用性を維持するためにかなりの一貫性が必要になります。 それらは強い整合性を達成しません。 むしろ、長期的な一貫性につながります。 Base 機能を保証するデータストアがそうできない可能性があるため、最新の書き込みの結果を返すことができない場合があります。

ドキュメント データ ストアの実装は、リレーショナル モデルの実装よりもはるかに変更が困難です。 さらに、インフライト ストア内のデータのリファクタリングの複雑さは、RDBMS の単純な ETL 変換の複雑さよりもはるかに大きくなります。 開発者やアーキテクトは、間違いを犯した場合に職を失うことを認識していないか、理解していないか、恐れているため、この機会を逃してしまいます。 レプリケーションとレイテンシーがプロセスであり、さらに悪いことに、サードパーティのシステムをプロセスに引きずり込むことを思い出すのではなく、アトミック トランザクションを論理的な断片に分解します。 最終的にはアウトソーシングされ、他の誰かが引き続き部門を運営することになります。

データベースの不整合は、不正確または不完全なデータ、欠落している制約、無効なトリガー、不適切に構成されたカスケードなど、さまざまな要因によって引き起こされます。 これらすべての問題により、正しくないデータがデータベースに格納される可能性があります。 その結果、分析と意思決定の精度と有効性に重大な影響が及ぶ可能性があります。 完全で一貫性のあるデータベース スキーマは、データの正確さと一貫性を確保するための最も重要なステップです。 さらに、適切に定義されたスキーマにより、データがデータベースに正しく入力され、データを管理するルールが適切に解釈されることが保証されます。 これにより、データの不整合を防ぎ、データベース内のデータを正確に反映することができます。

Nosql データベースは銀行取引や ATM 取引にはあまり適していません

データベースの信頼性は、nosql の場合、SQL の場合ほどスムーズではありません。これは、ほとんどのデータベースが後の整合性モデルを使用しているためです。 その結果、データが常に一貫しているとは限らないため、銀行や ATM の引き出しなどのトランザクションにはあまり適していません。

並行一貫性および因果関係一貫性とは

並行一貫性および因果関係一貫性とは
画像ソース: https://slideserve.com

同時および因果関係のある一貫性は、2 つ以上のイベントが同時に発生し、互いに関連している場合に存在するタイプの一貫性です。 この種の一貫性は、イベントが一貫した方法で発生することを保証する必要がある物理学や工学などの多くの分野で重要です。

分散システムは、データが共有および複製される多数のコンピューティング ノードで構成されます。 一貫性は、ノードとレプリカが同時に同じデータ ビューを持つことを保証する分散システム プロパティです。 これは、弱形式の一貫性を使用して、因果関係のある操作の順序を維持するための実験的な方法です。 因果的一貫性と逐次的一貫性との主な違いは、因果的一貫性は全体の桁数を必要としないということです。 直感的な一貫性は、書き込みが因果関係にある場合にのみ読み取りが新鮮であることを意味します。 分散システムの例を以下に示します。これは、P1、P2、P3、および P4 の 4 つのプロセスで構成されています。

因果関係を成立させる作業を行う作業の順序が一致するプロセスの数をとることで算出できる性質です。 次の要件を満たすすべてのプロセスは、一貫性があると言われます。任意の 2 つのプロセス P と Q について、P が Q を引き起こし、Q が R を引き起こす場合、P は他のプロセスで R を引き起こします。 これは、因果関係のあるすべての操作が実行される順序に一致するプロセスの数の尺度です。 P が Q の原因となり、Q が R の原因となり、P が R の原因となるという要件を満たす場合、1 つのプロセスは一貫性があります。一貫性要件は要件の 1 つです。 一貫したプロセスを一貫した方法で使用すると、正しい結論が得られる可能性が高くなります。 プロセスの一貫性は、さまざまな方法で測定できます。 これを調べる 1 つの方法は、因果関係のある操作が発生する順序について一致したプロセスの数を検討することです。 その結果、一貫性指標があります。 一貫性指数は、プロセスがどの程度一貫して維持されているかの測定値です。 一貫性を保つために、プロセスは次の要件を満たす必要があります。任意の 2 つのプロセスについて、P は Q の原因となり、Q は R の原因となるため、P は Q と Q だけでなく R の原因にもなります。 プロセスがこれらの要件を満たす場合、プロセスは次のように一貫性があると言われます。P が Q の原因となり、Q が R の原因となる場合、P は P と Q の任意の 2 つのプロセスに対して R の原因となります。一貫性がありません。 一貫性のないプロセスは、誤った結論につながる可能性が高くなります。 一貫性指数は、プロセスの一貫性を評価するために使用できます。 これは、プロセスの一貫性を測定し、より正確な因果関係の結論を生み出すプロセスを特定する方法です。

因果的一貫性と結果的一貫性

分散システムには主に 2 つのタイプの一貫性があります。因果的一貫性と結果的一貫性です。 因果的一貫性は、2 つのイベントが関連している場合、それらがすべてのプロセスで同じ順序で表示されることを保証します。 結果整合性は、十分な時間が与えられた場合、すべてのプロセスが同じ中間状態を見なくても、システムの同じ最終状態を見ることを保証します。

分散システムにおける因果的一貫性

一貫性の一貫性基準を使用して、分散データベースの因果関係を判断できます [1]。 操作が因果関係にある場合、分散システムのすべてのノードは、同じデータが読み書きされる順序で表示されます。

結果的および因果的など、他の一貫性モデルもよく知られています。 分散システムでは、従来のデータベースよりも一般的です。 一貫性のあるモデルとは、システムとそのユーザーが一貫した合意を持っていることを示す素晴らしい方法です。 相互作用が発生すると、これらの機能はシステムがどのように動作するかを説明します。 システムがシリアル化可能であると主張する場合、場所に関係なく、すべてのプロセスに対してすべての操作がグローバルな順序で表示される単一のグローバルな場所として表示される必要があります。 システムが適切と判断した場合、操作をインターリーブすることは許容されます。 プロセスの実際の順序は (定義に従って) 保証されていませんが、操作順序が保持されている場合は保証されます。

一部の操作は、何年も前に行われたように見える可能性さえあります。 操作 (書き込み/書き込み) が因果関係にあるという事実は、それらが分散される順序がすべてのプロセスで均一であることを意味します。 以下の画像に示すように、両方のプロセスが異なる値を x に書き込むため、順序の保証はありません。 新しい書き込みを停止すると、システムは最終的により一貫性のある状態に収束します。 結果整合性の保証では、システムに対して更新 (書き込み) が行われず、すべてのクライアントがシステムがどのように機能しているかを正確に確認できます。 単調な文字を $100 のアカウントに書き込むと、$165 が請求されます。 クライアントが書き込みの読み取り (RYW) でアイテムを更新すると、更新の完了後にそのアイテムの値が返されます。 PRAM は、プロセスが 1 つのプロセスからのすべての操作を同じ方法で参照できるようにするパイプライン メモリの一種です。

Mongodb の結果整合性

これは、読み取っているデータが現時点では一貫していない可能性があることを意味しますが、最終的にはそうなるでしょう。 これは、セカンダリから読み取ることができる readPreferences のいずれかを使用して取得されます。

MongoDB では、プライマリ データは常に非同期で複製されますが、セカンダリ データは同時に複製されます。 MongoDB のデフォルトは w1: (プライマリへの書き込みに成功) およびジャーナリングの場合は j:false です。 非同期レプリケーションが原因で、パーティションがマイノリティ側で分割されたり、プライマリが失われたりすると、通常は一貫性が失われます。 分割中に、w と j の値を調整して、さまざまなレベルのレイテンシとボード全体での一貫した保証を実現できます。 パーティションがない場合は書き込み速度が低下し、書き込みがある場合は書き込みがレプリケーションを待機しません。 w &j の組み合わせを使用している場合、セカンダリからの読み取り/非読み取りは、一貫性レベルに大きな影響を与える可能性があります。 MongoDB には、4 つの異なるレベルの一貫性があります。

書き込みに最適なタイミングは、パーティションがなく、すべてのノードがアクティブなときです。 MongoDB は一貫性があり、待ち時間が短いです。 機能しているプラ​​イマリが失われ、パーティションがいっぱいになった場合、失敗するのは最も一般的なタイプの書き込みです (エラー writeTimeout)。 MongoDB にはベスト エフォート型の可用性があります。これは、クラスターをどのように分割するかに関係なく、クラスターの一部 (少なくとも一定の割合) が常に失われるためです。 PACELC 定理の CAP と CP/EC では、w:majority、j:true、プライマリからの READ のみを使用して、MongoDB を CP として分類できます。

Mongodb はどのように一貫性を維持していますか?

複数のクライアントが同じ MongoDB データを同時に読み書きできます。 MongoDB は、ロックと同時実行管理を採用して、クライアントが同じデータを同時に変更するのを防ぎます。 1 つのドキュメントに書き込むときは、完全に書き込むか、まったく書き込まないかのどちらかであり、クライアントには常に一貫した結果が表示されます。

Nosqlの結果整合性とは何ですか?

データ モデリングにおける結果整合性の概念は、複数のノードに分散された NoSQL データベースに加えられた変更がすべてのノードに反映されるようにすることです。 その結果、同じデータベース クエリは、時間の経過とともに同じ結果を返します。