永続性および一貫性データ型

この項では、永続性ポリシーと一貫性ポリシーをサポートするために使用するデータ型を定義します。

kv_ack_policy_enum

typedef enum {
    KV_ACK_ALL = 1,
    KV_ACK_NONE = 2,
    KV_ACK_MAJORITY = 3
} kv_ack_policy_enum;

レプリケート環境では、ネットワーク上のレプリカに対して変更をコミットすることで、アプリケーションのトランザクション・コミットの保証を向上させることができます。この列挙は、このようなネットワーク・コミットの処理方法に関するポリシーを定義します。

確認ポリシーは、永続性保証の定義の一部として設定されます。永続性保証は、kv_create_durability()を使用して作成します。

考えられる確認ポリシーは次のとおりです。

  • KV_ACK_ALL

    すべてのレプリカが、トランザクションをコミットしたことを確認する必要があります。

  • KV_ACK_NONE

    トランザクションのコミットの確認は不要で、マスターがレプリカの確認を待つことはありません。

  • KV_ACK_MAJORITY

    レプリカの単純多数が、トランザクションをコミットしたことを確認する必要があります。

kv_consistency_enum

typedef enum {
    KV_CONSISTENCY_ABSOLUTE = 0,
    KV_CONSISTENCY_NONE,
    KV_CONSISTENCY_TIME,
    KV_CONSISTENCY_VERSION,
    KV_CONSISTENCY_NONE_NO_MASTER
} kv_consistency_enum; 

読取り操作に使用する一貫性保証を定義するために使用される列挙。値は次のとおりです。

  • KV_CONSISTENCY_ABSOLUTE

    一貫性が絶対的となるよう、マスターで読取りトランザクションを処理することを必要とする一貫性ポリシー。

  • KV_CONSISTENCY_NONE

    マスターに関連したレプリカの状態に関係なく、レプリカで実行される読取りトランザクションを続行できるようにする一貫性ポリシー。

  • KV_CONSISTENCY_TIME

    レプリカがマスターより遅延することが許可される時間を示す一貫性ポリシー。このポリシーは、kv_create_simple_consistency()を使用して指定することはできません。かわりに、kv_create_time_consistency()を使用します。

  • KV_CONSISTENCY_VERSION

    レプリカ・ノードの環境が少なくとも、kv_get_version()に提供された値によって使用された環境、またはkv_result_get_version()またはkv_result_get_previous_version()に提供された結果セットによって使用された環境と同程度に最新のものであることを保証する一貫性ポリシー。

    このポリシーは、kv_create_simple_consistency()を使用して指定することはできません。かわりに、kv_create_version_consistency()を使用します。

  • KV_CONSISTENCY_NONE_NO_MASTER

    読取り操作をマスターではなくレプリカで処理することを規定する一貫性ポリシー。この一貫性ポリシーを使用するときに、使用可能な唯一のノードがマスターである場合、読取り操作は実行されません。

    大量の読取りを処理するアプリケーション(例: 分析)の場合は、読取りリクエストの対象をストア内のレプリカのみに制限することにより、マスターの負荷を削減することをお薦めします。この種の読取り分離を実現するためのメカニズムとして、この一貫性ポリシーよりセカンダリ・ゾーン機能を使用することをお薦めします。ただし、セカンダリ・ゾーンの使用が望ましくない場合や現実的でない場合は、この一貫性ポリシーを使用すると、セカンダリ・ゾーンの場合に必要となる可能性があるリソースを追加することなく同様の効果を上げることができます。

kv_sync_policy_enum

typedef enum {
    KV_SYNC_NONE = 1,
    KV_SYNC_FLUSH = 2,
    KV_SYNC_WRITE_NO_SYNC = 3
} kv_sync_policy_enum;

トランザクションをコミットするときに使用する同期ポリシーを定義します。同期化のレベルが高いほど、トランザクションがディスクに対して永続的であることが保証されますが、その分、パフォーマンスが低下します。

同期ポリシーは、永続性保証の定義の一部として設定されます。永続性保証は、kv_create_durability()を使用して作成します。

考えられる同期ポリシーは次のとおりです。

  • KV_SYNC_NONE

    トランザクションのコミット時は、ログを書き込んだり同期的にフラッシュしません。

  • KV_SYNC_FLUSH

    トランザクションのコミット時に、ログを書き込み同期的にフラッシュします。

  • KV_SYNC_WRITE_NO_SYNC

    トランザクションのコミット時に、ログを書き込みますが、同期的にフラッシュしません。