TechEd で説明を最初に聞いた時には、説明している場所が ADO.NET のところだったので、ConnectionString を用いて接続するオンメモリデータベースの一種かと思っていたのだが、実際には memcached+α といったものだった。
ニュースサイト等でも 【TechEd 2008】いわばMS版「memcached」,分散メモリー・キャッシュ技術「Velocity」を公開 というような紹介をされている。
実際特定の文字列をキーとして値を一定時間キャッシュし取り出すことができる、という側面でいえば memcached そのもの。
一方で後発プロダクトらしく拡張もされており、特にロックの仕組みが提供されている点は状況によっては大きな意味がある。ロックの仕組みもMSの伝統として? 楽観的ロックと悲観的ロック を用意していて、楽観的ロックモードでは Velocity 内部でバージョン番号を管理してくれるようになっている。
また、利用するクライアント内部でもローカルキャッシュを保持し、2層キャッシュの構成をとることもできる。
出たばかりのCTP1なのでロックやデータの同期について、シビアな環境でどれぐらい信頼できるかは未知数ではあるが…
個人的に最も残念なのは、x86 版しか存在していないところ。是非ともメモリキャッシュは4GBを超えたところで試してみたい。
少し設定しようとしてドキュメントから読み取れなかった部分
- TTL の単位は 分 (TTL – default and config による)
- size の単位は MB (インストール時のダイアログ設定による)
(追記) ASP.NET Session State Server Provider を提供しているところは嬉しいといえば嬉しいのだが、cache host ダウン時にはそのhostがかかえていたデータは失われてしまうため更新系のセッション保持には利用できない。というかマシンがダウンしなくてもそもそもキャッシュなのでいつ消えても文句は言えず、普通のセッションのつもりでは使えないので注意。
どちらかというと HttpContext.Current.Cache っぽく振舞って欲しい。でも Cache クラスはインターフェースとして IEnumerable しか持ってないから抽象化した状態ではつかいにくいんだよな。IDictionary が実装されていればよかったのに。
(追記) サービス実行にあたっては設定ファイルを置くための共有フォルダが必要なのだが、共有名が8文字を超えていると2台目以降のインストールで失敗するような気がする。