ストアでの新しいレコードの作成および既存レコードの更新は、通常は同一の操作です(ただし、レコードを更新する場合のみ、または作成する場合のみ動作するメソッドは存在します。このことは、この項の少し後ろの方で説明しています)。どちらの場合も、適切なキーを使用するストアにレコードを単純に書込みます。そのキーを持つレコードが現在ストアに存在しない場合、レコードが新たに作成されます。指定のキーを使用するレコードが存在する場合、そのレコードは、ストアに書き込む情報で更新されます。
通常のレコードをストアに格納するには、次のようにします。
キーのすべてのメジャー・パス・コンポーネントとマイナー・パス・コンポーネントを必ず指定してキーを作成します。メジャー・パス・コンポーネントとマイナー・パス・コンポーネントの詳細は、「レコードの設計に関する考察」を参照してください。
値を作成します。これは、ストアに格納する実際のデータです。通常はAvroデータ形式(「Avroスキーマ」および「Avroバインディング」で説明)を使用します。
KVStore
クラスのputメソッドのいずれかを使用してレコードをストアに格納します。
次に、ストアへのレコードの書込みの簡単な例を示します。KVStore
ハンドルがすでに作成されているものとします。簡略化のため、この例では簡単に文字列をシリアライズして、格納操作の値として使用します。これはコードで実行するものではありません。むしろ、この簡単な例でもAvroデータ形式を使用します。
package kvstore.basicExample; ... import oracle.kv.Key; import oracle.kv.Value; import java.util.ArrayList; ... ArrayList<String> majorComponents = new ArrayList<String>(); ArrayList<String> minorComponents = new ArrayList<String>(); ... // Define the major and minor path components for the key majorComponents.add("Smith"); majorComponents.add("Bob"); minorComponents.add("phonenumber"); // Create the key Key myKey = Key.createKey(majorComponents, minorComponents); String data = "408 555 5555"; // Create the value. Notice that we serialize the contents of the // String object when we create the value. Value myValue = Value.createValue(data.getBytes()); // Now put the record. Note that we do not show the creation of the // kvstore handle here. kvstore.put(myKey, myValue);
前述した非常に単純な使用方法であるKVStore.put()
メソッド以外に、使用できる重要な格納操作が3つあります。
KVStore.putIfAbsent()
このメソッドでは、キーが現在ストアに存在しない場合にのみレコードが格納されます。つまり、このメソッドは、作成操作になった場合にのみ成功します。
KVStore.putIfPresent()
このメソッドでは、キーがすでにストアに存在する場合にのみレコードが格納されます。つまり、このメソッドは、更新操作になった場合にのみ成功します。
KVStore.putIfVersion()
このメソッドでは、指定されたバージョン情報に値が一致する場合にのみレコードが格納されます。詳細は、「バージョンの使用」を参照してください。