単純な一貫性の使用

Types.SimpleConsistency()を使用して、一貫性保証のレベルを指定できます。そのように使用できるインスタンスは3つあります。

  1. Types.SimpleConsistency.ABSOLUTE

    操作がマスター・ノードでサービスされることを要求します。この場合、は常にマスターと一致します。

    これは、要求できる一貫性保証のうち最も厳しいものですが、すべての読取りと書込みのリクエストがマスター・ノードでサービスされるというコストを伴います。すべてのトラフィックをマスター・ノード(パーティションごとに1台のみのマシン)に送ると、読取り操作をレプリカに分散しないことになります。また、マスターが読取りリクエストの処理でビジー状態になるため、書込み操作の速度も遅くなります。このことから、この一貫性保証はあまり使用しないようにします。

  2. Types.SimpleConsistency.NONE_REQUIRED

    マスターと比較したレプリカの状態に関係なく、格納操作を進めることができます。これは、要求できる一貫性保証のうち最も緩やかなものです。格納のパフォーマンスは最もよくなりますが、アプリケーションが、古い(最新でない)情報を操作する可能性が高くなります。

  3. Types.SimpleConsistency.NONE_REQUIRED_NO_MASTER

    読取り操作がマスターではなく常にレプリカでサービスされることが必要です。このポリシーが使用されると、使用可能なノードがマスターのみである場合、読取り操作は実行されません。

    可能であれば、セカンダリ・ゾーン機能のためにも、この一貫性ポリシーを使用しないようにしてください。

たとえば、必ず最新データを扱う必要があるクリティカルな読取り操作を行うとします。この場合、次のようにします。

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

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

   var primaryKey = {item: "Bolts"};

   var readOptions = 
        new nosqldb.Types.ReadOptions (
            Types.SimpleConsistency.ABSOLUTE, // Consistency 
            1000 // Operation timeout in ms 
            );

   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();