目次:
- キー・バリュー・ストア内のデータ・タイプ
- 同じデータの複数のコピーを他のサーバー、またはサーバーのラックに保存すると、1台のサーバーに障害が発生した場合でもデータの可用性が確保されます。サーバーの障害は、主に同じクラスタで発生します。
- 自動競合解決を有効にするには、最新バージョンのデータを示すメカニズムが必要です。最終的に一貫したキーバリューストアは、さまざまな方法で競合解消を実現します。
ビデオ: An Introduction To NoSQL Databases 2024
鍵を適切に管理すると、NoSQLでデータを格納する方法を設計し、安全で常に作業にアクセスできるようにすることができますあなたはする必要があります。
キー・バリュー・ストア内のデータ・タイプ
キー・バリュー・ストアは通常、“バケツ”バイナリデータの場合。一部のデータベースは、強力な内部データ型の指定やスキーマのサポートを提供します。他のユーザーは、一般的なアプリケーションデータ構造をキー値ストアにシリアル化するために、クライアントドライバに便利なヘルパー関数を提供するだけです。例には、マップ、リスト、およびソートされたセットが含まれます。
<!単純なバイナリ・ストア
-
高度に構造化されたAvroスキーマ・サポート
-
Avroスキーマは、リレーショナル・データベース・スキーマに似ています。非常に厳密なセットを強制します次の図に示すように、データベース内に格納されているJavaScript Object Notation(JSON)データのフォーマットルールを使用します。
{username:“あとで” 、sessionid:13452673、以来:1408318745、テーマ:“ bluesky”}
JSON文書を使用してAvroスキーマを定義します。これは、以前に示したストアド・データのAvroスキーマの例です。
<! - 2 - >
{“タイプ” :“レコード” 、“名前空間” :“ com。例” 、“名前” :“ UserSession” 、“フィールド” :[{“名前” :“ユーザー名” 、“タイプ” :[“文字列” ” null”]}、{“名前” :“ sessionid” 、“タイプ” :“ int”}、{“名前” :“以来” 、“タイプ” :“長い”}、{“名前” :“テーマ” 、“タイプ” :[“文字列” ” null”]}]}Avroスキーマは、スキーマが重要な場合にデータベースに非常に強力な型指定を提供します。前の例では、文字列データ、数値のセッションID、日付(ミリ秒、Unix Time Epoch、長整数)、およびWebサイトで使用するテーマのパーソナライズ設定が表示されます。
他のNoSQLデータベースは、JSONコンテンツを持つ値の任意のプロパティに二次インデックスを提供します。たとえば、Riakは
ドキュメントの分割に基づいてセカンダリインデックスを提供します。 - 基本的に、JSONドキュメント内の既知のプロパティは型でインデックスされます。これにより、単純な等価比較および等しくない比較に加えて、範囲照会(より小さいまたはより大きい)が可能になる。 Riakは厳密なスキーマなしで範囲クエリを提供することができます。単純なインデックス定義です。データがある場合は、インデックスに追加されます。 データの複製
同じデータの複数のコピーを他のサーバー、またはサーバーのラックに保存すると、1台のサーバーに障害が発生した場合でもデータの可用性が確保されます。サーバーの障害は、主に同じクラスタで発生します。
レプリカを2つの主な方法で操作できます。
マスター - スレーブ:
- すべての読み取りと書き込みはマスターに起こります。マスターが失敗した場合にのみ、スレーブが引き継ぎ要求を受け取ります。 マスタ/スレーブレプリケーションは、通常、ACID準拠のキー値ストアで使用されます。一貫性を最大限にするには、プライマリストアに書き込まれ、トランザクションが完了する前にすべてのレプリカが更新されます。このメカニズムは、
2フェーズコミット と呼ばれ、レプリカで余分なネットワークと処理時間を作成します。 マスター - マスター:
- 読み取りと書き込みは、キーを管理するすべてのノードで発生する可能性があります。 &ldquoという概念はありません。プライマリ”パーティションの所有者。 マスター・マスター・レプリカは、最終的には一貫性があり、クラスターはキーの最新の値を判別し、古い値を削除する自動操作を実行します。
ほとんどのキーバリューストアでは、読み取り時にゆっくりと発生します。 Riakは、通常の操作中の一貫性をチェックするアンチエントロピーサービスを備えているため、ここでは例外です。
バージョン管理データ
自動競合解決を有効にするには、最新バージョンのデータを示すメカニズムが必要です。最終的に一貫したキーバリューストアは、さまざまな方法で競合解消を実現します。
Riakはベクトル・クロック・メカニズムを使用して、最新のコピーを予測します。他のキー値ストアは、単純なタイムスタンプを使用して失効を示します。競合を自動的に解決できない場合は、両方のデータのコピーがクライアントに送信されます。クライアントに送信される競合するデータは、次の状況で発生する可能性があります。
クライアント1がレプリカA 'Adam:{likes:Cheese}に書き込みます。
-
レプリカAはデータをレプリカBにコピーします。
-
レプリカAのデータを「Adam:{likes:Cheese、hates:sunlight}」に更新します。
-
レプリカAは、最新のデータをレプリカBにコピーするのに十分な時間がありません。
クライアント2は、レプリカBのデータを「Adam:{likes:Dogs、hates:kangaroos}」に更新します。
-
この時点で、レプリカAとレプリカBは競合しており、データベースクラスタはその差異を自動的に解決できません。代替のメカニズムは、タイムスタンプを使用し、最新のデータを示すためにそれらを信頼することである。このような状況では、アプリケーションが値を更新する前にタイムスタンプが最新の値を読み取ることを確認するのが常識です。
チェックの有無をチェックし、
メカニズム
を設定します。これは基本的に '最新バージョンがまだバージョン2であれば、バージョン3を保存します' 。このメカニズムは、 読み取り一致更新(RMU) または 読み取り一致書き込み(RMW) と呼ばれることがあります。 このメカニズムは、Oracle NoSQL、Redis、Riak、およびVoldemortが使用するデフォルトのメカニズムです。