永続性保証の設定
永続性保証を設定するには、Durability
クラスを使用します。これを行う場合、3つの情報を指定する必要があります。
-
受信確認ポリシー。
-
マスター・ノードの同期ポリシー。
-
レプリカ・ノードの同期ポリシー。
使用するポリシーの組合せは、データが失われる可能性をアプリケーションでどの程度許容できるか、および書込みのパフォーマンス要件によって決まります。
たとえば、書込みパフォーマンスが最大限によくなるのは、次の永続性ポリシーによる場合です。
-
受信確認なし。
-
マスター・ノードでNO_SYNC。
-
レプリカでNO_SYNC。
ただし、この永続性ポリシーでは、操作からの復帰と永続的ストレージへのデータの書込みの間にアプリケーションまたはマシンの障害によってデータが失われるリスクが最も高くなります。
一方、永続性保証を最も高くする場合、次のものを使用します。
-
すべてのレプリカが書込み操作を受信確認する必要があります。
-
マスターでSYNC。
-
レプリカでSYNC。
当然、これによって、書込みパフォーマンスは最も悪くなります。
通常、永続性ポリシーでは、書込みパフォーマンスとデータ永続性保証との間でバランスをとります。次に例を示します。
-
過半数(> 50%)のレプリカで書込みを受信確認する必要があります。
-
マスターでSYNC。
-
レプリカでNO_SYNC。
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.KVStore;
import oracle.kv.table.Row;
import oracle.kv.table.Table;
import oracle.kv.table.TableAPI;
...
TableAPI tableH = kvstore.getTableAPI();
// The name you give to getTable() must be identical
// to the name that you gave the table when you created
// the table using the CREATE TABLE DDL statement.
Table myTable = tableH.getTable("myTable");
// Get a Row instance
Row row = myTable.createRow();
// Now put all of the cells in the row.
row.put("item", "Bolts");
row.put("description", "Hex head, stainless");
row.put("count", 5);
row.put("percentage", 0.2173913);
// Construct a durability policy
Durability durability =
new Durability(Durability.SyncPolicy.NO_SYNC, // Master sync
Durability.SyncPolicy.NO_SYNC, // Replica sync
Durability.ReplicaAckPolicy.NONE);
// Construct a WriteOptions object using the durability policy.
WriteOptions wo = new WriteOptions(durability, 0, null);
// Now write the table to the store using the durability policy
// defined, above.
tableH.put(row, null, wo);