*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] 執筆中