Raven は、.NET/Windows向けのスキーマの無い、LINQが使えるドキュメント データストアである。 Ravenは、大規模なwebアプリケーションに必要なパフォーマンスとスケーラビリティのニーズを解決する非SQL、非リレーショナルなソリューションである。
Ravenは、あらゆる種類のデータを JSON ドキュメントとして保存でき、その内容に固有のスキーマは、不要である。すなわち、データは、以下の シナリオにあった任意のフォーマットを持つことができる:
- Web関連データ、ユーザ セッション、ショッピングカートなど- Ravenのドキュメントベースの性質から、単一のリモートコールでリクエストの処理に必要なすべてのデータを読出したり、保存したりできる。
- 動的なエンティティ、ユーザがカスタマイズ可能なエンティティ、非常に多数のフィールドを持ったエンティティなど-Ravenのスキーマ無しの性質から、リレーショナルモデルを実装するのに苦労する必要がない。
- 永続性ビューモデル、すべてのリクエストに対してゼロからビューモデルをその都度、作成するのではなく、ビューモデルの最終型をRavenに保存できる。このお陰で、計算が減り、リモート呼び出しが減り、その結果全体のパフォーマンスが改善される。
- 大きなデータセット、Ravenの基盤をなす保存メカニズムは、(単一マシン上で)1テラバイトを超える規模に拡大できることが知られており、データベースの非リレーショナルな性質により、複数のマシンを跨いだデータベースの共有は、容易であり、Raven がネイティブにできることである。
次のコード片は、Ravenに保存されるドキュメントの例である:
{ "PostTypeId":1, "Id":2321816, "Title":"Storing commercial files on the server", "AcceptedAnswerId":2321854, "LastActivityDate":"\/Date(1266953391687+0200)\/", "AnswerCount":3, "Comments":[ { "Score":null, "CreationDate":"\/Date(1266952919510+0200)\/", "Text":"are they \"sensitive\" information?", "UserId":"users/203907" }, { "Score":null, "CreationDate":"\/Date(1266953092057+0200)\/", "Text":"I wouldn't say they are sensitive information...", "UserId":"users/200145" } ] }
各ドキュメントは、それに関連したキーすなわちドキュメントIDを持っており、上の例では、そのキーは、“2321816”である。ドキュメント以外に、 Ravenは、メタデータやドキュメントに添付されたテキスト/バイナリファイルを保存できる。データストアからドキュメントを探し、呼び出すのに、Ravenは、インデックスを使う:
インデックスは、Linqクエリで、ドキュメント セットを操作し、効率的にクエリできるように、各ドキュメントからプロジェクションを生成する。インデックスは本質的に、Raven がバックグラウンドで実行するLinqクエリで、その結果は、永続的なストレージに保存される。その結果は、後で、効率的にクエリできる。
Titleによってpost(投稿)を整理するインデックスの例は:
from post in docs.Postswhere post.AcceptedAnswerId != null
select new { post.Title };
インデックスが生成された後、ユーザは、探しているドキュメントを入手するために、単にそれにクエリするだけである。
Raven は、HTTP APIとClient API (C#)を持っている。 HTTP API は、JavaScript と HTMLだけを使うことを許し、Client APIとほぼ同じ機能を提供する。コマンドのいくつかは:
HTTP APIもまた1回のコールや リクエストの一括処理で複数のドキュメントの取得 をサポートする。
Raven には3つのライセンシング オプションがある:
- Raven DB Community –オープンソースプロジェクトのみに使え、サポートの無い無料エディション。
- Raven DB Commercial – 商用ソフトウェア用の有料エディションで、1年間限定数のインシデントについてのサポートがある。
- Raven DB Enterprise – 上記のエディションに似ているが、追加のフィーチャとして、無制限のマスタ/スレーブのレプリカ、フェイルオーバ、 RDBMSへの複製、そしてより良いサポートが受けられる。
両方の有料エディションには、月単位の購買か永久ライセンスがある。 Ravenは、Hibernating Rhinosによって作成された。Ayende Rahien氏によって創立されたコンサルタント会社である。
他のリソース: Raven DB webサイト, ソースコード リポジトリ, Ayende Rahien氏によるRaven DB –入門 ディスカッション グループ。