OBKV-Tableは汎用的な分散ストレージ機能を提供しており、シンプルなKey-Valueストレージとしても使用できます。この章では、OBKV-Tableで基本的なKey-Value操作を実装する方法を例を使って説明します。
スキーマ
OBKV-Tableの基盤となるストレージエンジンはテーブルモデルに基づいており、すべてのデータはテーブルに格納されます。シンプルなKVシナリオでは、システム全体で1つのテーブルを作成するだけで済みます。参考スキーマは以下の通りです:
CREATE TABLE IF NOT EXISTS `kv_table` (
`key` varchar(1024) NOT NULL,
`value` varbinary(1048576) DEFAULT NULL,
PRIMARY KEY (`key`)
);
説明:
- サンプルスキーマでは、Keyの最大長は1k、Valueの最大サイズは1Mです。このサンプルスキーマはほとんどのユースケースを満たせます。
- 実際の運用では、ビジネスシナリオに基づき、OceanBaseのテーブル設計指針を参考にして、KeyとValueの型および制約を再定義できます。非常に大きなValueを格納することが多い場合は、OceanBaseのBLOB型をValueとして使用することを検討できます。
データベースへの接続設定
以下は直接接続モードの例です。
ObTableClient obkvHandle = new ObTableClient();
obkvHandle.setFullUserName("");
obkvHandle.setParamURL("");
obkvHandle.setPassword("");
obkvHandle.setSysUserName("");
obkvHandle.setSysPassword("");
obkvHandle.init();
データアクセス
put
public void put(Object key, Object value) throws Exception {
MutationResult result = obkvHandle.insert("kv_table")
.setRowKey(colVal("key", key))
.addMutateColVal(colVal("value", value))
.execute();
}
get
public Object get(Object key) throws Exception {
QueryResultSet result = obkvHandle.query("kv_table")
.select("value")
.setScanRangeColumns("key")
.addScanRange(key,key)
.execute();
}
del
public void del(Object key) throws Exception {
MutationResult result = obkvHandle.delete("kv_table")
.setRowKey(colVal("key", key))
.execute();
}
batch
public class writeBatch {
BatchOperation batch = null;
ObTableClient kvHandle = null;
public writeBatch(ObTableClient handle) {
kvHandle = handle;
batch = handle.batchOperation("kv_table");
}
public void put(Object key, Object value) throws Exception {
Insert insert = insert().setRowKey(colVal("key", key))
.addMutateColVal(colVal("value", value));
batch.addOperation(insert);
}
public void del(Object key) throws Exception {
Delete del = delete().setRowKey(colVal("key", key));
batch.addOperation(del);
}
public BatchOperationResult execute() throws Exception {
return batch.execute();
}
}