KVストアでの書込みは、マスター・ノードでの書込み操作(作成、更新、削除操作)の実行によって行われます。書込み操作の一環として、マスター・ノードは通常、操作が永続的ストレージに行われたことを確認した後、操作の完了とみなします。
マスター・ノードは、レプリケーション・グループ内のレプリカ・ノードへの書込みの伝送も行います。レプリカからの受信確認を待ってから操作の完了とみなすようマスター・ノードに求めることもできます。
レプリカは、データベースに操作を適用してから書込み操作を受信確認します。
この書込みアクティビティをすべてまとめて永続性保証と呼びます。つまり、永続性保証は、ストア内で突発的に障害が発生した場合のデータの永続性の程度を示すポリシーです。(突発的な障害の例には、停電、ディスク・クラッシュ、物理的なメモリーの破損、アプリケーションの致命的なプログラミング・エラーなどがあります。)
永続性保証が高い場合、ストア内で突発的な障害が起きた場合に書込み操作が保持される可能性が非常に高くなります。永続性保証が低い場合、突発的な障害が起きた場合に書込みが保持される可能性が非常に低くなります。
永続性保証が高いほど、ストア内の書込みスループットが低下します。これは、永続性保証が高い場合、非常に多くのディスクとネットワークのアクティビティが必要になるためです。
実行ごとに変わる非常に一時的なデータの場合、そのデータの永続性保証は最も低いレベルに設定しますが、通常は、一定程度の永続性保証を使用します。
永続性保証には、受信確認保証と同期保証という2種類の情報があります。これらの2種類の保証については、次の各項で説明します。その後、永続性保証の設定方法を示します。
マスター・ノードが書込み操作(作成、更新、削除)を行う場合、その操作を各レプリカ・ノードに送信する必要があります。レプリカ・ノードは書込み操作をローカル・データベースに適用し、レプリカとマスター・ノードとの整合性がとられます。
書込み操作のローカル・データベースへの適用に成功すると、レプリカは受信確認メッセージをマスター・ノードに返します。このメッセージは、書込み操作が受信され、レプリカのローカル・データベースに正常に適用されたことを単に示します。
受信確認ベースの永続性ポリシーは、マスター・ノードがこの受信確認を待って、書込み操作が正常に完了したとみなすかどうかを示します。受信確認を待たない、過半数のレプリカ・ノードからの受信確認を待つ、すべてのレプリカ・ノードからの受信確認を待つのいずれかをマスター・ノードに求めることがでます。
マスターが必要とする受信確認が増えるほど、書込み操作のパフォーマンスは低下します。受信確認を待つということは、書込みメッセージがマスターからレプリカへ伝送され、レプリカで書込み操作が実行されて(これはディスクI/Oを意味します)、受信確認メッセージがレプリカからマスターへ返されるのを待つということです。コンピュータ・アプリケーションの観点からは、これには時間がかかります。
受信確認ベースの永続性ポリシーを設定する場合、次のものからの受信確認を求めることができます。
すべてのレプリカ。つまり、レプリケーション・グループ内のすべてのレプリカ・ノード。ストアには複数のレプリケーション・グループがある場合があることに注意してください。つまり、マスター・ノードは、ストア内のすべてのマシンからの受信確認を待つわけではありません。
ゼロ(0)レプリカ。この場合、同期ベースの永続性ポリシーを満たすとすぐに、マスターは正常ステータスで書込み操作から復帰します。これは、次の項で説明します。
レプリカの過半数。つまり、レプリケーション・グループに5つのレプリカ・ノードがある場合、マスターは、3つのノードからの受信確認を待ちます。