時間ベースの一貫性の使用
時間ベースの一貫性ポリシーでは、レプリカ・ノードに許されるマスター・ノードからの遅れの時間を示します。レプリカのデータが、マスターと比べて指定された時間以上に古い場合、ConsistencyException
がスローされます。その場合、操作を中止するか、すぐに再試行するか、間をおいてから再試行します。
この種の一貫性ポリシーが機能するには、ストア内のすべてのノードの時計が、NTPなどのプロトコルを使用して同期している必要があります。
時間ベースの一貫性ポリシーを指定するには、TimeConsistency
クラスを使用します。このクラスには、次の情報が必要です。
-
ONDB_PERMISSIBLE_LAG
レプリカに許されるマスター・ノードからの遅れの時間(ミリ秒)。
-
ONDB_TIMEOUT
permissibleLag制限を満たすためにレプリカが待機できる時間(ミリ秒)。つまり、レプリカがpermissibleLag要件をすぐには満たさない場合、マスターからの必要なデータで更新されるかどうかをこの時間の間待ちます。レプリカがtimeout期間内にpermissibleLag要件を満たさない場合、
ConsistencyException
がスローされます。
次の例では、2秒のデフォルト時間ベース一貫性ポリシーを設定します。タイムアウトは4秒です。
from nosqldb import Factory
from nosqldb import StoreConfig
from nosqldb import TimeConsistency
## Required for TimeConsistency
from nosqldb import ONDB_PERMISSIBLE_LAG
from nosqldb import ONDB_TIMEOUT
...
# locations where our store and proxy can be found
kvlite = 'localhost:5000'
proxy = 'localhost:7010'
...
# configure and open the store
def open_store():
tc = TimeConsistency({ONDB_PERMISSIBLE_LAG : 2000,
ONDB_TIMEOUT : 4000})
kvstoreconfig = StoreConfig('kvstore', [kvlite])
kvstoreconfig.set_consistency(tc)
return Factory.open(proxy, kvstoreconfig)
...