*Hirabiのデータ操作 [#e0edaed3]

HibariはKVSであり、キー(Key)と値(Value)から成るデータをいかに効率的に操作し、使用するかを求められます。
ここでは、そのデータ操作についてユーザが指示できるオペレーションコマンド等について示してみます。

**対応プロトコル [#g817cd6f]

Hibariには、データ操作を行うための直接的なGUIインターフェイスが存在しません。~
このため、Hibariに対して何らかの操作を行うためには、以下のいずれかのプロトコルを使用してCUIベースの命令語を発行する必要があります。~
以下、使用可能なプロトコルについて示しました。

|CENTER:プロトコル名|CENTER:概要|
|Erlang API|Hibariにアクセスする事が可能なErlangモジュールを使用して命令語を発行します。&br;主にデータ操作を可能とする「brick:simple」モジュールと、複雑な命令やテーブルの管理・追加などをサポートする「brick_server」モジュールに分かれ、Hibariの操作体系を意識しやすい構成となっています。&br;但し、当然ではありますが開発言語としてはErlangのみのサポートとなります。|
|UBF|Erlangの開発者でもある「Joe Armstrong」氏が提唱したバイナリスキーマであり、XMLやJSON等と同一の構成を持ってはいますがその構成はシンプルです。&br;また、バイナリベースのためネットワーク通信などにおいても帯域を圧迫しません。UBFのルールに従っていれば開発言語には特に依存せず、汎用的に使用する事ができます。|
|JSON-RPC|JavaScript言語をベースに生まれた軽量のデータフォーマットです。UBFと同様に特定の開発言語には依存しない上、テキストベースで解りやすく、また多くの開発言語では専用のフォーマット整形ライブラリが用意されているため、非常に使いやすいプロトコルと言えます。&br;但しテキストベースであるため、バイナリベースのUBF等と比べると効率が悪いといった欠点も存在します。|
|JSON(overTCP)|Hibariが用意しているJSON用のネットワークポート(デフォルト値はポート7582)にアクセスし、JSONプロトコルで命令語を発行する事によってデータを操作する事も出来ます。&br;telnet等でアクセスし、直接テキストベースで操作可能のため、動作試験用として非常に手頃に扱う事ができます。|
~

**データ操作のオペレーション(命令語) [#y68dd8b7]

Hibariがサポートするデータ操作系のオペレーションについては、以下のようなものがあります。~
使用するプロトコルによって命令語、またはデータ指定の方法に若干の違いがありますが、操作出来る内容等には違いはありません。以下の表にはその概要と、また一般的なRDBに置き換えて考えた場合の「対応する命令語」をまとめました。

|CENTER:データ&br;操作区分|CENTER:Hibari&br;命令語|CENTER:命令内容|CENTER:一般的なRDBに&br;おける対応した&br;PL/SQL命令語|
|参照系|get|データの参照を行い、データが存在すれば取得を行います。|SELECT|
|~|get_many|指定された条件に関してデータを絞り込み、条件に合うデータ全てを取得します。|~|
|更新系|add|新規に新しいキー値を持つデータをテーブルに格納します。&br;すでにデータが存在している場合はエラーとなります。|INSERT|
|~|set|既にキー値が存在するデータに対して、データの変更を行います。&br;該当するデータが存在していない場合はエラーとなります。|UPDATE|
|~|replace|対象となるデータに対して、既にキー値がデータが存在していない場合にはadd命令を、データが存在している場合にはset命令をそれぞれ行います。|MERGEまたは&br;UPSERT|
|~|delete|指定された条件に該当するデータを削除します。|DELETE|
|トラン&br;ザクション|txn|一貫したデータ操作を行うためのトランザクション処理を行ないます。&br;指定された命令を全て行うまで、データに対しての反映を行いません。|TRANSACTION~&br;ROLLBACK&br;/COMMIT|
|~|do|~|~|

各プロトコル毎のCUI操作例、および命令語の詳細については、以下の項目を参照してください。

~

***get(データの取得) [#sd2e1071]



-単純なキー値の取得

--Erlang API
 brick_simple:get(テーブル名, キー値)

--UBF Format
---Erlangの場合
 ubf_client:rpc(P1, {get, テーブル名, <<"キー値">>}).

---Javaの場合
 UBFObject res4 = ubf.rpc(
     UBF.tuple(new UBFAtom("get"), atom_テーブル名, new UBFBinary("キー値")));

--JSON-RPC
 {"$T": [{"$A":"get"}, {"$A":"テーブル名"},"キー値"]}

***get_many(データの複数取得) [#wd315678]

執筆中

***add(データの追加) [#de87ff4d]

執筆中

***set(データの更新) [#r97b3edd]

執筆中

***replace(データの追加/更新) [#debcd259]

執筆中

***delete(データの削除) [#ua99bf08]

執筆中

***txn/do(トランザクション処理) [#k9bd589f]

執筆中


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS