okuyamaでのアプリ開発で押さえておきたい機能
5. オブジェクトの保存
この機能はプログラム中でインスタンス化したオブジェクトをそのままokuyamaに保存する機能です。OkuyamaClientのsetObjectValueにて登録を、getObjectValueにて取得する事が可能です。通常のsetValue、getValueではStringオブジェクトしか扱えないのに対して、この機能ではJavaのSerializableインターフェースの実装クラスであれば全て扱う事ができます。登録、取得時に変換の必要のないデータを利用する事ができるため、取り出したデータが即プログラム内で利用可能なところが、この機能を使用する利点です。しかし、利用言語に依存しますので、Javaのクライアントで登録したオブジェクトをPHPのクライアントから取り出す事などはできません。
この機能を利用するためのOkuyamaClientのメソッド名はデータを登録するメソッドがsetObjectValueとなり、取得メソッドが、getObjectValue、getObjectValueAndUpdateExpireTimeになります。
コード5(クリック拡大)
6. Tagを使ったデータ操作
次はokuyamaの特徴的な機能の1つである、Tagを使ったデータ操作です。Tagの複数のデータに対して付加する事で、同一のTagが付加されたデータをまとめて取得する事が可能な機能です。また1つのデータにいくつでも付加する事が可能です。今回は、いくつかある取得方法について詳しく解説します。
取得方法は大きく以下の2種類に分類する事が可能です。
- 1回の処理呼び出しでTagに紐付くデータを全てokuyamaサーバ側から取得する方法
- 取得依頼を行い、受け取ったOkuyamaResultSetから紐付くデータを順次取り出す方法
まず1つ目の方法ですが、この方法は紐付くデータを1回でクライアント側に取得するので、取得後はクライアント側のサーバ上のメモリで処理できます。そのため、関連するデータを処理する際にokuyamaサーバ側との通信処理が発生する事なく、高速に処理する事が可能です。しかし、一度にメモリ上に乗せる事が可能なデータ量が取得できる限界だという事に注意する必要があります。また一度に大量のデータをやり取りすれば、ネットワーク資源も大量に消費する事になるので、対象とするデータ量との関係を意識する事も必要です。
対してもう1つの方法ですが、こちらは取得依頼を行い、OkuyamaResultSetを受け取り、そこから紐付くデータを、カーソルを動かすように順次取り出していきます。この方法は大量のデータが対象になった場合でも一度に取得をするわけではないため、メモリ資源、ネットワーク資源に大きな負担を掛けずに取得する事が可能です。その代わりに、カーソル移動時にデータをokuyamaサーバから取得するため、処理速度は最初の方法に比べると落ちます(※実際はカーソルを1つ移動するたびに取得を行っているわけではなく事前に一定数単位で取得して内部でキャッシュし、カーソル移動事にキャッシュから返却しています)。
両方とも複数のTagを指定してANDやORでの取得に対応しています。また、OkuyamaResultSetを利用する後者は取得時にKeyやValueに対してフィルタリングの条件をして取得するデータを限定する事が可能です。
この機能を利用するためのOkuyamaClientのメソッド名は、一度にメモリ上に取得するメソッドがgetTagKeys、getTagValues、getMultiTagKeys、getMultiTagValuesとなり、後者のOkuyamaResultSetを取得するメソッドがgetTagKeysResult、getMultiTagKeysResultになります。
コード6(クリックで拡大)
まとめ
連載最終回となる今回はアプリ開発のTipsをご紹介してきましたが、いかがだったでしょうか?コードはそのまま利用できますので、ぜひお手持ちの環境で実践いただければと思います。
okuyamaはversion0.9.0でhadoop対応やキューの実現など、今回ご紹介できなかった機能も盛り込んでいます。今後も継続して機能追加や改善を続ける予定ですので、もしご要望や、ご意見などあればぜひ筆者のtwitterアカウント(@okuyamaoo)にご連絡をいただければと思います。
最後までお読みいただきありがとうございました。