Consistency
ベース・クラスの静的インスタンスを使用して、一貫性保証のレベルを指定できます。そのように使用できるインスタンスは2つあります。
Consistency.ABSOLUTE
操作がマスター・ノードでサービスされることを要求します。この場合、行は常にマスターと一致します。
これは、要求できる一貫性保証のうち最も厳しいものですが、すべての読取りと書込みのリクエストがマスター・ノードでサービスされるというコストを伴います。すべてのトラフィックをマスター・ノード(パーティションごとに1台のマシン)に送信すると、読取り操作がレプリカ全体に分散することはなくなります。マスターは読取りリクエストの処理でビジー状態になるため、書込み操作も遅くなります。このことから、この一貫性保証はあまり使用しないようにします。
Consistency.NONE_REQUIRED
マスターと比較したレプリカの状態に関係なく、格納操作を進めることができます。これは、要求できる一貫性保証のうち最も緩やかなものです。格納のパフォーマンスは最もよくなりますが、アプリケーションが、古い(最新でない)情報を操作する可能性が高くなります。
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 CREATE TABLE DDL statement. 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 }