時間ベースの一貫性ポリシーでは、レプリカ・ノードに許されるマスター・ノードからの遅れの時間を示します。レプリカのデータが、マスターと比べて指定された時間以上に古い場合、ConsistencyException
がスローされます。その場合、操作を中止するか、すぐに再試行するか、間をおいてから再試行します。
この種の一貫性ポリシーが機能するには、ストア内のすべてのノードの時計が、NTPなどのプロトコルを使用して同期している必要があります。
時間ベースの一貫性ポリシーを指定するには、Consistency.Time
クラスを使用します。このクラスのコンストラクタには、次の情報が必要です。
permissibleLag
レプリカに許されるマスターからの遅れのTimeUnits
数を表すlong
。
permissibleLagUnits
permissibleLag
で使用される単位を表すTimeUnit
。たとえば、TimeUnit.MILLISECONDS
です。
timeout
permissibleLag
制限を満たすためにレプリカが待機できる時間を表すlong
。つまり、レプリカがpermissibleLag
要件をすぐには満たさない場合、マスターからの必要なデータで更新されるかどうかをこの時間の間待ちます。レプリカがtimeout
期間内にpermissibleLag
要件を満たさない場合、ConsistencyException
がスローされます。
timeoutUnit
timeout
で使用される単位を表すTimeUnit
。たとえば、TimeUnit.SECONDS
です。
次の例では、2秒のデフォルト時間ベース一貫性ポリシーを設定します。タイムアウトは4秒です。
package kvstore.basicExample; import oracle.kv.Consistency; import oracle.kv.KVStore; import oracle.kv.KVStoreConfig; import oracle.kv.KVStoreFactory; import java.util.concurrent.TimeUnit; ... KVStoreConfig kconfig = new KVStoreConfig("exampleStore", "node1.example.org:5088, node2.example.org:4129"); Consistency.Time cpolicy = new Consistency.Time(2, TimeUnit.SECONDS, 4, TimeUnit.SECONDS); kconfig.setConsistency(cpolicy); KVStore kvstore = KVStoreFactory.getStore(kconfig);