kv_create_key()

#include <kvstore.h>

kv_error_t 
kv_create_key(kv_store_t *store,
              kv_key_t **key,
              const char **major,
              const char **minor) 

key/valueストアにキーを作成します。この構造によって使用されるリソースを解放するには、kv_release_key()を使用します。

この関数は、関数に渡された文字列の内容をコピーしないという点で、kv_create_key_copy()とは異なります。したがって、この関数によって作成されたkv_key_t構造が解放されるまでは、これらの文字列を解放または変更しないようにする必要があります。

キーは、階層ネームスペース内の値へのパスを表します。これは文字列パス・コンポーネント名のシーケンスで構成され、各コンポーネント名は階層ネームスペース内の1つ下のレベルへの移動に使用されます。文字列コンポーネントの完全なシーケンスは、フル・キー・パスと呼ばれます。

フル・キー・パス内の文字列コンポーネントのシーケンスは、2つのグループまたはサブシーケンスに分けられます。メジャー・キー・パスは初期または開始シーケンスで、マイナー・キー・パスは残りまたは終了シーケンスです。フルパスは、メジャー・パスとマイナー・パスをその順序で連結したものです。メジャー・パスには少なくとも1つのコンポーネントが必要ですが、マイナー・パスは空である(コンポーネントが0である)場合があります。

各パス・コンポーネントは、null以外の文字列である必要があります。空(長さがゼロ)の文字列を使用できます。ただし、メジャー・パスの最初のコンポーネントは空でない文字列である必要があります。

キーがある場合、key/valueペアの場所の検索は、2つのステップのプロセスです。

  1. メジャー・パスは、key/valueのペアが検出可能なノードを特定するために使用されます。

  2. この場合、そのノード内のkey/valueのペアの特定にはフルパスが使用されます。

したがって、同じメジャー・パスを持つすべてのkey/valueペアが同じノード上でクラスタ化されます。

共通メジャー・パスを共有するキーは、KVStoreによって物理的にクラスタ化され、kv_multi_get()などの特別な複数操作APIを介して効率的にアクセスできます。APIは、次の2つの方法で効率的に機能します。

  1. アプリケーションが単一ネットワーク・ラウンド・トリップでの複数操作を実行することを許可します。

  2. 共通の接頭辞キーとそれに関連付けられた値がそれ自体物理的にクラスタ化されるため、(複数の操作内の)個々の操作は効率的になります。

複数操作APIはACIDトランザクション・セマンティクスもサポートしています。複数操作に含まれる操作はすべて、単一のトランザクションのスコープ内で実行されます。

パラメータ

  • store

    storeパラメータは、キーが使用されるストアに対するハンドルです。ストア・ハンドルは、kv_open_store()を使用して取得されます。

  • key

    keyパラメータは、割り当てられたキーへのポインタのコピー先であるメモリーを参照します。

  • major

    majorパラメータは文字列の配列であり、その各要素はメジャー・パス・コンポーネントを表します。

    ここで使用される文字列はコピーされないことに注意してください。このメモリーを使用する構造が解放されるまでは、メモリーを解放または変更しないでください。

  • minor

    minorパラメータは文字列の配列であり、その各要素はマイナー・パス・コンポーネントを表します。

    ここで使用される文字列はコピーされないことに注意してください。このメモリーを使用する構造が解放されるまでは、メモリーを解放または変更しないでください。