OrcaというCache::Memcached::Fast互換のKVS interface adaptor作りました

読了まで:約5分


概要: Orca と​いう​ Cache::Memcached::Fast と​部分的に​互換の​ある​モジュール作った


こんに​ちま!​ いつも​心に​ Cookbook、​悪い​意味で​ドキュメントが​恋人、​ に​ゃるらこと​岡村直樹(​そのうち 23 歳)です。​みなさんの​たうちまわりながら​コーディングしてますか?

まあまたかって​感じの​ユヤタンパロディは​いつもの​ことと​して、​ 今日は​昨日あたりに​ github に​上げたOrca と​いう​モジュールを​紹介したいと​思います。

Orcaとは​何か?

Orcaとは​何かっていうと、​いろんな​ KVS とか​ RDBMS とかの​データを、​ Cache::Memcached::Fastライクな​ API で​操作する​ための、​ インターフェースアダプターモジュールです。

と、​言っても​わかりづらいんで、​一言で​いうと、

いろんな​データストアの​操作 Cache::Memcached::Fast 互換な​ API で​操作してしまおう!

と​いう​感じの​モジュールです。

まあ実際の​ところ、Orcaには​元に​なった​モジュールが​あって、​ それは​僕は​作りかけで​放置したApplishと​いう​ Web Application framework の​出来損ないの​中で​実装した、​ Applish::Cacheと​いう​モジュールが​元です。

Applish::Cacheと​いう​名前から​推察できるに、​元はCache::Memcached::Fastと​ある​程度の​互換が​ある​ Cache interface module だったのですが、​Cache interfad module には​ CHI を​筆頭に、​ それなりに​いろいろ​そろってたりするので、​今更作っても​ dis られる​こと間違いなしと​いうか、​ それ誰得?​ ​今更だよね?​ と​いうか既存モジュール​使えよハゲ、​等々、​が​さっと​思い浮かんだので、​ とりあえずいろんな​ KVS をCache::Memcached::Fast​互換な​ API で​使える​ Wrapper module と​いう​事に​しました。​ ごまか​してますね。​はい。

あと、Applish::Cache​な頃はMoose​ or Mouseに​依存してましたが、​ Orcaでは​できるだけ依存を​簡単に​する​ため、​大抵の​環境には​いっているか、​ もしくは​インストールが​容易な​モジュールのみに​依存してます。​ まあこの​あたりOrcaMakefile.PLを​見てみてください。

Orcaの​特徴

Orcaの​特徴と​いえば、​なんと​言って​もCache::Memcached::Fastの​部分的に​互換の​ある​ API です。

Orcaの​ POD には​書いてありますが、​なんで​ 部​分的な​互換 と​言ってるのかと​いうと、​ それはCache::Memcached::Fastの​サーバ接続関連の​ API は​実装してないからです。​ あと、​データの​出し入れの​メソッドの​内部的な​仕様が​よく​わからなくて​これで​いいの?​ と​いう​実装も​含まれてるので、​その​あたりも​ 部​分的な​互換 、となってる​理由です。

まあそうは​言っても、​データの​出し​入れに​関しては​多分互換性が​あると​思うので、​ Cache::Memcached::Fastの​代わりにOrcaを​使う、と​いったことも​可能です。

まあここでmemcachedの​ CAS とか​どうなってんの?​ と​思われると​思うのですが、​ もちろん​ CAS も​使えます!​ ……​なんちゃって​ CAS ですけど​>< と​いうか、​ネットで​調べた​ CAS の​仕組みを​とりあえず​実装した、って​感じなので、​ 本当に​ CAS と​互換が​あるのかどうかは​ちょっと​怪しいです。

あと​今の​ところOrcaの​ Engine と​いうか Backend は、Cache::LRUを​使った​メモリベースのOrca::Engine::Memoryと​ とりあえず​モジュールだけが​あって、​テストも​何も​ないOrca::Engine::Memcachedの​二つのみですが、​ まあ​今後テストやら​ドキュメントなんかを​足していけたらなーと​思ってます。

Orcaの​使い方

で、​能書きは​いいんでOrcaの​使い方を​ちょろっと​紹介すると、

use Orca;
my $orca = Orca->new('Memory');
$orca->set( $key, $value, $expire );
my $value = $orca->get($key)

と​いう​感じです。​と​いうかさっきも​書きましたが、Orca​は​基本的にCache::Memcached::Fastの​ API を​参考に​作られてるんで、​ Cache::Memcached::Fastを​使うような​感じでOrcaを​使うことができます。

で、Orcaの​エンジンを​書きたい!​ と​いう​場合、Orca::Engineの​ POD にも​書いてありますが、​ 基本的には、Orca::Engineを​継承して、

  • new
  • namespace
  • set
  • cas
  • get
  • gets
  • delete
  • flush_all

の​八つの​メソッドを​実装すれば、​必要な​機能が​そろう、と​いう​感じに​なってます。

Orcaの​今後

Orcaに​関しては、​需要が​あるのかどうか​サッパリ分からないのと、​ 既存モジュールと​激しく​ダブってるような​気が​するんで、​今の​ところ​ CPAN に​ upload する​予定は​ありません。

と​いうかまだ​作った​ばっかりで​自分ですら​使ってないので、​ も​う​ちょっと​使い​込んでから​様子を​みたいと​思ってます。

と​いうわけで​今日はOrcaっていう​モジュールを​作ったよ!​ って​話でした。​ まあ​何か連絡あったら​ Twitter: @nyarla まで​お願いします。

#FIXME

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。