第10章 一貫性保証

目次

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

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

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

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

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

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

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

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

一貫性ポリシーの指定

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

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

一貫性保証を使用する2つ目の方法は、格納操作に使用しているTableAPIメソッドに指定するReadOptionクラス・インスタンスを使用し、KVStoreメソッドでConsistencyパラメータを使用して、デフォルト・ポリシーをオーバーライドすることです。

次の例では、ストアのデフォルトの一貫性ポリシーの設定方法を示します。この後の各項で、各操作での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);