事前定義された一貫性の使用

Consistencyベース・クラスの静的インスタンスを使用して、一貫性保証のレベルを指定できます。そのように使用できるインスタンスは2つあります。

  1. Consistency.ABSOLUTE

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

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

  2. Consistency.NONE_REQUIRED

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

  3. Consistency.NONE_REQUIRED_NO_MASTER

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

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

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

package kvstore.basicExample;

import oracle.kv.Consistency;
import oracle.kv.ConsistencyException;
import oracle.kv.KVStore;
import oracle.kv.table.PrimaryKey;
import oracle.kv.table.ReadOptions;
import oracle.kv.table.Row;
import oracle.kv.table.Table;
import oracle.kv.table.TableAPI;

...

// KVStore handle creation is omitted for brevity

...

TableAPI tableH = kvstore.getTableAPI();

// The name you give to getTable() must be identical
// to the name that you gave the table when you created
// the table using the CLI's 'table create' command.
Table myTable = tableH.getTable("myTable");

// Construct the PrimaryKey. 
PrimaryKey key = myTable.createPrimaryKey();
key.put("item", "Bolts");

// Create the ReadOption with our Consistency policy
ReadOptions ro = new ReadOptions(Consistency.ABSOLUTE,
                                 0,     // Timeout parameter. 
                                        // 0 means use the default.
                                 null); // Timeout units. Null because
                                        // the Timeout is 0. 


// Retrieve the row. This performs a store read operation.
// Exception handling is skipped for this trivial example.
try {
    Row row = tableH.get(key, ro);
} catch (ConsistencyException ce) {
    // The consistency guarantee was not met
}