Event Store のリードアーキテクトである Greg Young 氏は先日,Event Store の Projections Library と,それを Read Model として使用する方法について 講演した。プレゼンテーションの中で氏は,Projections Library とは何なのかを主要なユースケースを挙げて説明した上で,多数の実例を示した。
Projections Library は,時制問合せ(temporal query)を主な用途とするストリーム・データベースだ。時制問合せは,時系列的に発生する事象の関連付けを行うために使用される。"birthday" という単語を使ってから1分以内に "presents" という単語を使ったTwitter ユーザを検索する,というようにである。氏によれば,時制問合せはビジネスシステムにおいては一般的な形式のクエリであって,Event Store で簡単に対応可能なのだという。同じような問題をSQLで対処しようとすると,非常に複雑なものになる場合が多い。しかもそれは,必要なサブクエリの数に比例して指数級数的に増加する傾向があるのだ。
Projection Library には次のような機能がある。
- イベントストリームを取得して,他の形式に変換する。例えば,新規顧客イベントのストリームから名前を選択する。
- ストリームを新たなグループにパーティショニングする (ストリームの分割や結合を行う)。
- 複数のストリーム間でプロジェクション(Projection)を行うことにより,大量のイベントを対象とするクエリの実施を可能にする (特定のトランザクションを持つすべての銀行口座をコンカレントに検索する,というように)。
- 連続クエリ(continuous queries)。プロジェクションを継続的に実行する。新たなデータが入力されれば,それもクエリ結果に反映される。
- 新たなイベントを送出する。例えば特定の規模以上の受注を検索して,特別な与信管理の対象とする「大規模オーダ」イベントを作成する。
Projection Library はビッグデータの問題,連続クエリ,データストリーミングなどを念頭において開発されている。
氏が特に強調したのは,Projection Library は(ドキュメントデータベースなど)NoSQL データベースの代用ではない,という点である。それは本来の用途とはかけ離れている。
プロジェクションの記述には,通常はJavaScriptを用いる。JavaScriptがデフォルト言語であるということは,すなわちプロジェクションの記述にWebブラウザを使用できるということだ。ブラウザを使用したプロジェクションのデバッグ機能も組み込まれている。
基本的なインターフェースは AtomPub である。ほとんどのプラットフォームは HTTP リクエストを送信する機能を備えているので,Event Store クライアントの構築や,あるいは異機種接続環境の一部として利用することが可能だ。
Event Store は Event Source のコンセプトに従って,イベントをストアする場所として開発されたデータベースである。今日存在する大部分のデータベースとは異なるタイプのものだ。Event Store はオープンソース製品だが,商用オプションを選択することも可能である。2012年9月にロンドンでの ローンチイベント においてリリースされ,最新のバージョン1.0.1がリリースされたばかりだ。