一貫性保証の設定

デフォルトでは、読取り操作はNONE_REQUIREDの一貫性保証で実行されます。次のいずれかを使用して、このデフォルトをオーバーライドする一貫性保証を作成します。

  1. SimpleConsistency

  2. VersionConsistency

  3. TimeConsistency

1つの表の行の読取りに対して一貫性保証を設定するには、new ReadOptions()を使用してReadOptionsオブジェクトを作成します。次に、一貫性オブジェクトを作成してReadOptionsオブジェクトに含めます。

最後に、パラメータとしてReadOptionsオブジェクトを指定したstore.Get()を使用して、ストアで単一の表の行の読取り操作を実行します。

たとえば、単一の表の行の読取りに示すコード・フラグメントは、次の方法で一貫性ポリシーを使用するようにリライトできます。

public static void getRow(IKVStore store, String tableName, String loginId)
{
	IRow fetchedRow = null;
	ReadOptions readoptions = new ReadOptions(SimpleConsistency.ABSOLUTE, 500L);
	var row = store.CreateRow(tableName);
	row["loginId"] = loginId;
	fetchedRow = store.Get(row, readoptions);
	Console.WriteLine(fetchedRow); //prints the fetched row in JSON format
}

複数の表の行の読取りに対して一貫性保証を設定するには、FetchOptionsを使用する必要があります。

たとえば、複数の表の行の読取りに示すすべての行を読み取るためのコード・フラグメントは、次の方法で一貫性ポリシーを使用するようにリライトできます。

public static void getAllRows(IKVStore store, String tableName)
{
	FetchOptions fetchoptions = new FetchOptions();
	TimeConsistency timeconsistency = new TimeConsistency(10, 400L);
	fetchoptions.ReadOptions.Consistency = timeconsistency;            
	var row = store.CreateRow(tableName);        
	var fetchedRows = store.Search(row, fetchoptions);            
	foreach (IRow fetchedRow in fetchedRows)
		Console.WriteLine(fetchedRow);
}

単一の行と複数の行の読取り操作すべてに対して一貫性保証を設定するには、ストアへの接続のコード・フラグメントの次の内容(KVDriver.Create()の前)を追加します。

ReadOptions readoptions = new ReadOptions(SimpleConsistency.ABSOLUTE, 300L); //for reading single table row
FetchOptions fetchoptions = new FetchOptions(Read); //for reading multiple table rows
fetchoptions.ReadOptions = readoptions;
dict.Add(Options.OPTIONS_FETCH_DEFAULT, fetchoptions);
dict.Add(Options.OPTIONS_READ_DEFAULT, readoptions);

ドライバでは、読取り、検索および書込み操作にそれぞれReadOptionsFetchOptionsおよびWriteOptionsを使用します。これらのオプションにnullを指定した場合は、デフォルト値が使用されます。読取り、フェッチおよび書込みオプションのデフォルト値は、それぞれIKVDriver.DefaultReadOptionsIKVDriver.DefaultFetchOptionsおよびIKVDriver.DefaultWriteOptionsを使用して取得することもできます。

たとえば、ReadOptionsにはデフォルト値を使用するが、特定の操作にデフォルト以外の値を使用する場合は、次のようにします。

//Connecting to the store is skipped for brevity
//Similar approach can be followed for FetchOptions and WriteOptions
ReadOptions readoptions = new ReadOptions();
readoptions = driver.DefaultReadOptions;
readoptions.Consistency = new TimeConsistency(100, 10);

前述の例のように、変更時の読取りオプションで、ドライバのデフォルト値が変更されることはありません。