BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Raven——一个.NET上的文档数据库

| 作者 Abel Avram 关注 7 他的粉丝 ,译者 朱永光 关注 0 他的粉丝 发布于 2010年5月22日. 估计阅读时间: 7 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

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

where post.AcceptedAnswerId != null

select new { post.Title };

在这个索引被创建之后,用户只用查询它就可以获得想找的文档了。

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介绍讨论组

 

查看英文原文:Raven, a Document Database for .NET

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

商业价值在哪里? by 王 丽兵

想请问下:它的商业价值在什么地方?

shcema-less??? by Wu Junyin

shcema-less???

Re: 商业价值在哪里? by Chen AntiGameZ

分片、无限的主/从复制、故障转移、复制到RDBMS,技术支持,这些都是要钱的。包括未来一些调优工具(比如nhprof),肯定也是要钱的。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

3 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT