バージョンベースの一貫性の使用

バージョンベースの一貫性は、各操作ベースで使用されます。レプリカで行われる読取りが、少なくとも、マスターで以前に行われた書込み程度に最新であることが保証されます。

これが使用される場合の1つの例は、顧客からの情報(名前など)を収集するWebアプリケーションです。そして、その名前の顧客に対して表示されるすべての後続ページをカスタマイズします。顧客の名前の格納は、マスター・ノードによってのみ実行できる書込み操作ですが、後続ページの作成は、ストア内のいずれのノードでも起こる読取り専用操作として実行されます。

この一貫性ポリシーを使用するには、アプリケーション内のプロセス間でバージョン情報が転送される必要があります。

バージョンベースの一貫性ポリシーを作成するには、Types.VersionConsistency()関数を使用します。これを行う場合、次の情報を指定する必要があります。

  • version

    読取りで一致する必要のあるVersion。返される値は、ポリシーで指定されたバージョン以上です。

  • timeout

    version要件を満たすためにレプリカが待機できる時間(ミリ秒)。つまり、レプリカがversion要件をすぐには満たさない場合、マスターからの必要なデータで更新されるかどうかをこの時間の間待ちます。レプリカがtimeout期間内に要件を満たさない場合、ConsistencyExceptionがスローされます。

たとえば、次のコードでは、ストア書込みを行い、バージョン情報を収集して、バージョンベースの一貫性ポリシーの作成に使用します。

...
// Store handle configuration and open skipped for brevity
...

store.on('open', function () {
   console.log('Store opened');

    var row = {item: "Bolts",
              description: "Hex head, stainless",
              count: 5,
              percentage: 0.2173913};


   var matchVersion = null;
   store.put('myTable', row,
           function (err, putResult) {
                if (err)
                    throw err;
                else {
                    console.log("Row inserted.");
                    matchVersion =     
                        putResult.currentRowVersion;
                    store.close();
                }
           });
}).on('close', function() {
    console.log('Store closed.');
}).on('error', function(error) {
    console.log(error);
});
store.open(); 

このアプリケーション・コードの別の箇所、あるいはまったく別のアプリケーションで、上で取得したmatchVersionを使用してバージョンベースの一貫性ポリシーを作成します。

...
// Store handle configuration and open skipped for brevity
...

store.on('open', function () {
   console.log('Store opened');

   var versionConsistency =  
        new Types.VersionConsistency(
                matchVersion,
                1000);

   var primaryKey = {item: "Bolts"};

   var readOptions = nosqldb.Types.ReadOptions (
                        versionConsistency,
                        1000);

   store.get('myTable', primaryKey, readOptions,
           function (err, result) {
                if (err)
                    throw err;
                else {
                    console.log("Row retrieved.");
                    console.log(result.currentRow);
                    store.close();
                }
           });

}).on('close', function() {
    console.log('Store closed.');
}).on('error', function(error) {
    console.log(error);
});
store.open();