マイクロソフトの太田です。今回は、CTP3 がリリースされた Project Code Name Velocity というキャッシュについて解説します。1月に行われた TechDays2009 では Velocity セッションとして紹介しましたが、ほとんど情報提供をしてきておりませんので、1回では網羅できません。何回かに分けて、キャッシュの位置付け、Velocityの機能、特徴的な点、等々を説明していきたいと思います。
キャッシュの用途ですが、一般にキャッシュの用途は明確です。
1.オリジナルデータソースよりも位置的に近い、あるいは構造的に簡単であることによるパフォーマンスの向上
2.オリジナルデータソースが使用できない場合の代用
3.オリジナルデータソースの機能の一部を代替することによる負荷分散
1 は、キャッシュをたとえばクライアントアプリケーションと同じマシンに置く、あるいは複数のクライアントで使用する場合でもクライアントマシンと同一ネットワーク上に置くということでネットワーク上の距離を短縮することで遅延を少なくするという考え方が一つ。もう一つは、SQL Server のような複雑なクエリをサポートしないことで、データアクセス自体のスピードを向上させるという方法です。単純な操作を行うだけであれば処理自体が簡単になりますからその分だけ高速になります。ADO.NET の非接続型の DataSet もこのようなキャッシュの一例と考えることができます。
2 は外出先のノート PC やモバイル機器のような場合が典型的な例ですが、このような非接続環境により、ネットワークへのアクセスが制限されている場合のデータアクセスに対してキャッシュが代替するという考え方です。この場合、データのフレッシュネス(新鮮さ:データが最新のものではないとしても最新のものに近いかどうか)が問題になります。更新頻度の高いトランザクションデータは、キャッシュによる代替では意味がない場合も多々あります。一方で多くのマスターデータ(製品のリスト)のように、通常あまり頻繁に更新されることのないデータはキャッシュによる代替は有効です。モバイルで使用される SQL Server Compact Edition はこの分類に入るものと考えることができます。
3 は 2 と同様の考え方ですが、データソースが使用できる場合であっても、適宜データソースとキャッシュの間で同期をとりながらフレッシュネスを保ち、かつ1つのデータソースにアクセスが集中することを防ぐという用途です。すでに多くのアプリケーションでもこれらの用途ごとの使用がされています。データグリッドや HPC などにおける参照データの一時格納領域は、この分類に入るでしょう。
現時点では、Velocity をはじめとするキャッシュのターゲットとしては、ASP.NET でのステータスのストアをはじめとする一時的なデータストアが挙げられますが、今後は上記のデータグリッドにおけるキャッシュとして直接アプリケーションからクエリを行うような形式や、クラウドのデータアクセスにおける遅延をカバーするためのキャッシュが重要になると考えられます。
分散キャッシュテクノロジ Velocity
さて、Velocity は現在 CTP3 がリリースされたばかりですが、予定では夏ごろにリリースされる予定です。現状では、次のような特徴を持つものになります。
つまり、メモリ上に一時的な記憶領域を持つサーバを複数のノードで分散配置することで最初に列挙したキャッシュの機能を提供することが Velocity の役割です。
上記の機能に加えて、昨日リリースされた CTP3 では、以下のようなアップデートが行われました。
具体的な使用方法等については今後紹介していく予定です。