永続性保証の設定

永続性保証を設定するには、Durabilityクラスを使用します。これを行う場合、3つの情報を指定する必要があります。

使用するポリシーの組合せは、データが失われる可能性をアプリケーションでどの程度許容できるか、および書込みのパフォーマンス要件によって決まります。

たとえば、書込みパフォーマンスが最大限によくなるのは、次の永続性ポリシーによる場合です。

ただし、この永続性ポリシーでは、操作からの復帰と永続的ストレージへのデータの書込みの間にアプリケーションまたはマシンの障害によってデータが失われるリスクが最も高くなります。

一方、永続性保証を最も高くする場合、次のものを使用します。

当然、これによって、書込みパフォーマンスは最も悪くなります。

通常、永続性ポリシーでは、書込みパフォーマンスとデータ永続性保証との間でバランスをとります。次に例を示します。

KVStoreハンドルにデフォルト永続性ポリシーを設定できますが、データにデフォルトの永続性が必要ない場合(またはデフォルト以上の永続性が必要な場合)、各操作ベースでポリシーを上書きすることもできることに注意してください。

たとえば、ほとんどのデータに必要なのは中程度の永続性ポリシーで、一部のデータは永続性がそれほど重要でない一時的なデータか、簡単に再作成できるデータだとします。その場合、次のようにします。

まず、KVStoreハンドルにデフォルト永続性ポリシーを設定します。

package kvstore.basicExample;

import oracle.kv.Durability;
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");

Durability defaultDurability = 
    new Durability(Durability.SyncPolicy.SYNC,    // Master sync
                   Durability.SyncPolicy.NO_SYNC, // Replica sync
                   Durability.ReplicaAckPolicy.SIMPLE_MAJORITY);
kconfig.setDurability(defaultDurability);

KVStore kvstore = KVStoreFactory.getStore(kconfig); 

コードの別の箇所で、通常以外の書込み操作の永続性保証を緩和し、それらの特定の書込み操作のパフォーマンスを向上させます。

package kvstore.basicExample;

...

import oracle.kv.Durability;
import oracle.kv.DurabilityException;
import oracle.kv.Key;
import oracle.kv.RequestTimeoutException;
import oracle.kv.Value;
import java.util.ArrayList;

import org.apache.avro.Schema;
import oracle.kv.avro.GenericAvroBinding;
import oracle.kv.avro.GenericRecord;

...

ArrayList<String> majorComponents = new ArrayList<String>();

...

// Define the major and minor path components for the key
majorComponents.add("Smith");
majorComponents.add("Bob");

// Create the key
Key myKey = Key.createKey(majorComponents);

...

// Binding and schema creation omitted

...

final GenericRecord person = new GenericData.Record(personSchema);
person.put("ID", 100011);
person.put("FamiliarName", "Bob");
person.put("Surname", "Smith");
person.put("PrimaryPhone", "408 555 5555");

Value myValue = binding.toValue(person);

// Create the special durability policy
Durability durability = 
    new Durability(Durability.SyncPolicy.NO_SYNC, // Master sync
                   Durability.SyncPolicy.NO_SYNC, // Replica sync
                   Durability.ReplicaAckPolicy.NONE);

// Now put the record. Note that we do not show the creation of the
// kvstore handle here.
try {
    kvstore.put(myKey, myValue,
                null,       // ReturnValueVersion is null because
                            // we aren't using it.
                durability, // The per-operation durability
                0,          // Use the default request timeout
                null);      // Use the default timeunit value
} catch (DurabilityException de) {
    // The durability guarantee was not met
} catch (RequestTimeoutException re) {
    // The operation was not completed within the 
    // timeout value
}