特徴
柔軟なインストール
K2HASHは、あなたのOSに応じて、柔軟にインストールが可能です。あなたのOSが、Ubuntu、CentOS、Fedora、Debianなら、packagecloud.ioからソースコードをビルドすることなく、簡単にインストールできます。それ以外のOSであっても、自身でビルドして使うことができます。
キーとサブキー
K2HASHの一番の特徴は、キーに対して値を保持するKVSの機能に、キーに対してサブキーを紐付けることができます。
つまり、キーとキーに相関関係(親子関係)を持つことができ、この相関関係をライブラリレベルでサポートします。
この相関関係をライブラリがサポートすることにより、キー同士を親子関係で紐付け、階層化したデータの保持、アクセス、操作を簡単にすることができます。
また、後述のいくつかの機能は、このサブキーを持つことができることにより実現できている機能があります。
データ保管タイプ
K2HASHは、オンメモリ、ファイル(一時ファイル含む)でデータを保管できます。
オンメモリタイプは、特に高速にアクセスできます。ファイルタイプの場合には、多量のデータ数、データ容量をサポートすることができ、かつ永続化できます。
ファイルタイプであってもフルメモリマッピングを利用することで、オンメモリタイプと同様に非常に高速に動作します。
マッピングのタイプ
ファイルタイプをメモリにマッピングする方法を2通り提供します。
1つはファイル全体を全てメモリマッピングするフルメモリマッピングであり、もう1つはKVSデータのインデックス情報部分のみをマッピングする方法です。
後者では非常に大容量(ファイルシステムに依存)のデータ容量をサポートできることが特徴です。
高速
K2HASHは、データへのアクセス(リード、ライト)は高速です。
ファイルタイプのフルメモリマッピングのタイプでない場合(インデックスのみのマッピング)であっても高速に動作します。
バイナリデータ
キー(Key)、値(Value)は、バイナリ(任意の値)を取り扱いでき、可変長のデータとして取り扱いことができます。
システム的な上限は存在していますが、大きなサイズのデータであっても取り扱うことができます。
また、今後完全に上限の廃止ができるように継続して改良していきます。
データ容量の自動サイズ拡張
動的にKVSのサイズ(データエリア、Hashテーブル)の拡張を可能とします。
キー(Key)数の増加、総データ容量の増加による領域の自動拡張をサポートします。
初期のデータ保管サイズが小さくとも、容量の増加に伴い、オートスケールできます。
データページサイズ
K2HASHの内部では、データ(キー、値他)を保管する領域は全てページングされた領域となっています。
これにより、フラグメントが小さくなるように設計されています。
マルチスレッド/マルチプロセス対応
K2HASHライブラリは、マルチプロセス、マルチスレッドに完全対応できています。
ライブラリ利用者は、マルチプロセス、マルチスレッドを意識せず、必要なAPIを呼び出すだけです。
各APIは必要に応じた排他制御を行い(利用者はデータのロックを意識する必要がなく)、安全にKVSデータへのアクセス、更新を提供します。
暗号化
保持するデータの値をキー単位で暗号化できます。
暗号化には、共通の暗号化鍵(パスフレーズ)で全てのキーを対象に暗号化するタイプと、キー別に暗号化鍵(パスフレーズ)を指定するタイプがあります。
暗号化鍵(パスフレーズ)はファイルとして設定することも、都度APIに引き渡すこともできます。
履歴機能
K2HASHに保管するキーの更新ごとに、過去の値を履歴として残せます(バージョニング)。
この機能は、キーの変更履歴として利用できます。
属性
K2HASHには、サブキーの特徴と同じように、キーに対して属性を設定できるようになっています。
属性は、組み込みの属性と、利用者が独自の属性をプラグインとして設定できる2種類が提供されています。
組み込み属性については、以下を参照してください。
更新時刻属性
キーの更新した時刻を属性として保持できます。
有効時間属性
キーの有効期限を属性として設定できる機能です。
この属性に設定された有効時間を経過するとキーはリジェクトされ、アクセスできなくなります。
キャッシュとして利用するなど、キーに有効期限を設定したいときに利用できる属性です。
暗号化属性
属性として暗号化のためのパスフレーズ(のMD5値)を保持できます。
暗号化されたキーの場合には、この属性が存在します。
独自の属性を加えたい場合には、属性プラグイン(シェアードライブラリ)を準備して、K2HASHライブラリに設定することで自由に属性を追加できます。 組み込み属性と同様の機能を加えることができます。
トランザクション
K2HASHへのデータ更新を行った際の処理をトランザクションとして、独自の処理ができます。
このトランザクション処理は、更新のタイミングで呼び出されます。
トランザクション処理は、プラグインプログラム(シェアードライブラリ)としてK2HASHライブラリに設定することができ、独自のトランザクション処理を組み込むことができます。
トランザクションプラグインプログラムは、K2HASHライブラリを利用するプログラム内で動作します。
トランザクションプラグインプログラムは、同期、非同期(別スレッド)で動作できます。
デフォルトで組み込まれているトランザクション処理があり、この処理は後述のアーカイブ機能として利用できます。
K2HASH標準のトランザクションプラグインプログラムとして提供される K2HTPDTOR は、トランザクション(キー操作およびそのデータ)を CHMPX を通して他のサーバーへ転送するために提供されています。
アーカイブ
K2HASHへのデータ更新を行った際の処理をデフォルトで組み込まれているトランザクション処理を利用して、アーカイブファイルとして出力できます。
このアーカイブファイルには、全ての更新トランザクションの操作が記録されており、アーカイブファイルを保持することによりK2HASHデータの復元などに利用できます。
K2HASHデータの復元を行うには、アーカイブファイルをロードすることで簡易に実現できます。
キュー
K2HASHのサブキー機能を利用した組み込みの機能として、FIFO、LIFOのキュー機能が提供されます。
値のみ、もしくはキーと値のセットを、キューとしてK2HASHに保管(PUSH)できます。
保管されたキューから、FIFO、LIFOとして取り出せます(POP)。
ツール
K2HASHライブラリに対応したコマンドラインツールを提供します。
これらのツールによりK2HASHデータの操作、デバッグ、ダンプなどできるツールを標準でサポートします。