カラクリサイクル

『輝かしい青春』なんて失かった人の雑記

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::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までお願いします。