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

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.Key;
import oracle.kv.Value;
import oracle.kv.ValueVersion;

import java.util.ArrayList;

...

ArrayList<String> majorComponents = new ArrayList<String>();

...

// Define the major path components for the key
majorComponents.add("Smith");
majorComponents.add("Bob");

// Create the key
Key myKey = Key.createKey(majorComponents);

// Now retrieve the record. Note that we do not show the creation of 
// the kvstore handle here.

try {
    ValueVersion vv = kvstore.get(myKey,
                        Consistency.ABSOLUTE,
                        0,     // Timeout parameter. 
                               // 0 means use the default.
                        null); // Timeout units. Null because
                               // the Timeout is 0. 
                                   
    Value v = vv.getValue();
    /*
     * From here, deserialize using your Avro binding.
     */
} catch (ConsistencyException ce) {
    // The consistency guarantee was not met
}