時間ベースの一貫性の使用
時間ベースの一貫性ポリシーでは、レプリカ・ノードに許されるマスター・ノードからの遅れの時間を示します。レプリカのデータが、マスターと比べて指定された時間以上に古い場合、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);