第10章 一貫性保証

目次

一貫性ポリシーの指定
事前定義された一貫性の使用
時間ベースの一貫性の使用
バージョンベースの一貫性の使用

KVストアは、ネットワークを使用して連携している数台のコンピュータ(一般的にノードと呼ばれます)から作成されます。ストアのすべてのデータは、まずマスター・ノードに書き込まれます。マスター・ノードによってそのデータがストア内の他のノードにコピーされます。マスター・ノードではないノードはレプリカと呼ばれます。

分散システムのパフォーマンスがあまりよくないことから、任意の時点で、マスター・ノードで実行された書込み操作が、ストア内の他のノードでまだ実行されていないことがあります。

一貫性は、ノードAのとノードBの同じが異なることが可能かどうかを示すポリシーです。

あるノードに格納されていると別のノードに格納されている同じが同一である可能性が高い場合、高一貫性保証と呼ばれます。同様に、低一貫性保証とは、あるノードのと別のノードに格納されている同じが異なっている可能性があることです。

一貫性保証のレベルを制御できます。一貫性保証を高く設定すると、それと引き換えに、ストアの読取りパフォーマンスが低一貫性保証を使用する場合ほど上がらないことがあることに注意してください。

使用できる一貫性保証にはいくつかの方式があります。これらについて次の項で説明します。

デフォルトでは、Oracle NoSQL Databaseは可能なかぎり低い一貫性保証を使用することに注意してください。

一貫性ポリシーの指定

一貫性ポリシーを指定するには、Consistencyクラスの静的インスタンスのいずれか、またはそのネストしたクラスのいずれかを使用します。

一貫性ポリシーを選択したら、2つの方法のいずれかで使用できます。1つ目は、これを使用してデフォルトの一貫性ポリシーを定義する、KVStoreConfig.setConsistency()メソッドの使用です。このメソッドを使用すると、操作時に操作ベースでオーバーライドされないかぎり、すべての格納操作でそのポリシーが使用されることになります。

一貫性ポリシーを使用する2番目の方法は、ストア操作を実行するために使用しているデフォルト・ポリシーを上書きすることです。

次の例では、ストアのデフォルトの一貫性ポリシーの設定方法を示します。この後の各項で、各操作でのConsistencyクラスの使用方法を示します。

package kvstore.basicExample;

import oracle.kv.Consistency;
import oracle.kv.KVStore;
import oracle.kv.KVStoreConfig;
import oracle.kv.KVStoreFactory;

...

KVStoreConfig kconfig = new KVStoreConfig("exampleStore", 
    "node1.example.org:5088, node2.example.org:4129");

kconfig.setConsistency(Consistency.NONE_REQUIRED);

KVStore kvstore = KVStoreFactory.getStore(kconfig);