9 行バージョンの使用

が最初にストアに挿入される際や各更新の際、一意のバージョン・トークンが割り当てられます。バージョンは常にストアに書き込んだメソッドによって返されます(たとえば、Store.put()は、トークンをputCallBack()のオプションとして返します)。バージョン情報は、ストアからを取得するメソッドによっても返されます。

バージョンが重要である理由は2つあります。

  1. 更新や削除を行う場合、の値が変更されていない場合にのみ操作を行うことが重要な場合があります。これは、同時にを操作するスレッドやプロセスが複数存在可能なアプリケーションでは特に有用です。この場合、を読み取り、そのときにバージョンを確認します。その後、格納操作を実行できますが、バージョンが変更されていない場合にのみ格納操作が続行されます(これは通常、比較および設定(CAS)または読取り、変更、書込み(RMW)操作と呼ばれます)。これを保証するには、Store.putIfVersion()またはStore.deleteIfVersion()を使用します。

  2. クライアントが以前に書き込まれたデータを読み取る際、読取り操作をサービスするOracle NoSQL Databaseノードが以前の書込み情報で更新されていることを確認することが重要な場合があります。これは、以前に書き込まれたデータのバージョンを一貫性パラメータとして読取り操作に渡すことで行えます。一貫性の使用の詳細は、「一貫性保証」を参照してください。

バージョンは、Versionクラスを使用して管理されます。別のカプセル化クラス(ReturnRowクラスなど)の一部として返される場合もあります。

次のサンプル・コードでは、行を取得し、バージョンが変更されていない場合のみ、その行をストアに書き込みます。

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

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

   store.indexIterator('myTable', 'DoB', {},
       function (err, iterator) {
            if (err)
                throw err;
            else { 

                // Configure Iterator event done
                iterator.on('done', function() {
                    store.close();
                });

                iterator.forEach(function (err, returnRow) {
                    if (err)
                        throw err;
                    else { 
                        var version = returnRow.version;

                        /// Do work on the row here
                        
                        store.putIfVersion('myTable', 
                            returnRow.row, 
                            version,
                            function (err) {
                                if (err)
                                    throw err;
                                else
                                    console.log("Row rewritten");
                            });
                    }
                });
            }
       });
}).on('close', function() {
    console.log('Store closed.');
}).on('error', function(error) {
    console.log(error);
});
store.open();