Raven 是一种用于.NET/Windows 的基于 LINQ 的弱格式(shcema-less)文档数据存储服务。Raven 不是另外一种 NoSQL,也非关系型解决方案,而是希望解决大型 Web 应用的性能和扩展性要求。
Raven 能把所有类型的数据都保存为 JSON 文档,而不会把特定的格式强加于这些内容之上。这意味着,数据能以任意格式保存,尤其适合如下场景:
- 和 Web 相关的数据,比如用户 Session、购物车等等——Raven 基于文档的特性意味着你可以在一个单独的远程调用中,获取和保存所有需要处理的数据。
- 动态实体,比如用户自定义实体,带有大量可选字段的实体等等——Raven 自由格式的特性意味着你不需要疲于实现关系模型。
- 持久视图模型——不用在每次请求的时候都从零开始重新创建视图模型,你可以直接把它的最终形式保存在 Raven 中。这就减少了计算时间、减少了远程调用的次数,提高了总体性能。
- 大数据集——众所周之,Raven 的底层存储机制可以支持超过 1T 的容量(在单台机器上),并且非关系型的特性让其很容易在多台机器上共享数据库,这样做对于 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 作为索引来组织帖子的例子:
from post in docs.Posts <p>where post.AcceptedAnswerId != null</p><p>select new { post.Title };</p>
在这个索引被创建之后,用户只用查询它就可以获得想找的文档了。
Raven 提供 HTTP API 和客户端 API (C#)。HTTP API 具备和客户端 API 一致的功能,让那些只能使用 JavaScript 和 HTML 的程序也可以访问。包含如下一些命令:
HTTP API 也支持在一个调用中获取多个文档或批请求的功能。
Raven 基于 3 种许可协议发布:
- Raven DB Community – a free edition that can be used only for open source projects with no support
- Raven DB Commercial – a paid-for edition for commercial software with support for a limited number of incidents/year
- Raven DB Enterprise – similar to Commercial but has extra features like sharding, unlimited master/slave replicas, failover, replication to RDBMS, and better support.
- Raven DB Community——免费版本,只能用于开源项目,无技术支持
- Raven DB Commercial——付费的商业软件,提供有事件和年度限制的技术支持
- Raven DB Enterprise——类似商业版,不过具备一些额外的特性,如分片、无限的主 / 从复制、故障转移、复制到 RDBMS,并提供更好的技术支持。
两种商业版都具有月度订阅或长期许可的选择。Raven 由 Hibernating Rhinos 开发,一个 Ayende Rahien 创建的咨询公司。
其他资源: Raven DB 网站,源代码仓库,由Ayende Rahien 编写的 Raven DB 介绍,讨论组。
评论