カラクリスタ

「輝かしい青春」なんて失かった人のブログ

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

概要: 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::FastAPI を参考に作られてるんで、 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