時間ベースの一貫性の使用

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

...