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的程序也可以访问。包含如下一些命令:

  • GET
  • PUT
  • POST
  • DELETE
  • PATCH

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介绍,讨论组,Ayende博客。

原文地址:http://www.infoq.com/news/2010/05/Raven

另一个.NET上的文档数据库Raven[转载]相关推荐

  1. 【转载】SAP OO ALV 在自定义屏幕上添加ALV控件 一个屏幕上使用2个ALV

    终于完成了 OO ALV的学习,第一个作品. 一个屏幕上放了2个ALV控件,上面用来显示表头,下面用来显示详细的行项目. 业务背景: 在汽车的售后服务环节,汽车零件在质保期内损坏,维修产生的费用,整车 ...

  2. 如何删除一个CSDN上自己上传的资源

    如何删除一个CSDN上自己上传的资源 第一步,找到你想删除的资源,其URL举例为: http://download.csdn.net/detail/ssergsw/9733040 则删除的get请求为 ...

  3. 从tabBarController的一个item上的控制器跳转到另一个item上的控制器

    先从习惯性的tabBarController开始,很多应用的外框都是用这个开始的,而从tabBarController的一个item上的控制器跳转到另一个上的,往往都是直接通过点击tabBar上的不同 ...

  4. [共享]一个文件上传的控件,绝对是精品源码

    [共享]一个文件上传的控件,绝对是精品源码 前段时候在www.codeproject.com上看到一个文件上传的控件,觉得很好,共享给园子里的朋友. 原文链接:http://www.codeproje ...

  5. PDF N-Up Maker:一个把PDF转成小册子或者把多个页面放到一个页面上的工具(免费,免Acrobat,命令行模式)...

    N-Up Printing allows you to shrink several pages onto one page(N-Up打印输出允许你缩小若干个页面 到一个页面上) Booklet就是小 ...

  6. 写一个Windows上的守护进程(4)日志其余

    写一个Windows上的守护进程(4)日志其余 这次把和日志相关的其他东西一并说了. 一.vaformat C++日志接口通常有两种形式:流输入形式,printf形式. 我采用printf形式,因为流 ...

  7. 理解ConstraintLayout性能上的好处(转载,仅供学习)

    本文转载自:https://www.jianshu.com/p/fae1d533597b,仅供学习 (译)理解ConstraintLayout性能上的好处 本文介绍了ConstraintLayout对 ...

  8. 使用必应查询接口开发搜索工具:反查一个IP上的旁站

    一 API申请 申请地址:https://datamarket.azure.com/dataset/bing/search 当然首先要进行登陆,没有账号的话就注册一个,但是需要注意的是"国家 ...

  9. 28.纯 CSS 绘制一个世界上不存在的彭罗斯三角形

    28.纯 CSS 绘制一个世界上不存在的彭罗斯三角形 原文地址:https://segmentfault.com/a/1190000014946883 感想:三个平面图形旋转 HTML代码: < ...

最新文章

  1. 文巾解题 283. 移动零
  2. Pandas.plot 做图 demo(scatter,bar,pie)
  3. LeetCode 88. 合并两个有序数组(Merge Sorted Array)
  4. pytorch常用函数API简析与汇总——以备查询
  5. Android平台Chromium net中的代理配置信息获取
  6. 搭建nagios监控服务
  7. 【转载】要有梦想-创造卓越的职业生涯
  8. 关于过程和线程的常识点汇总
  9. oracle对象之触发器
  10. 通过BitmapFactory.Options解决activity之间传递图片出现内存溢出(OOM)问题
  11. 比较好用的mysql可视化工具-----pycharm连接mysql图文教程
  12. c语言队列ADT 学习总结
  13. 解决WPS word论文英文摘要不对齐的问题
  14. Vivado中FIFO遇到【Common17-55】警告总结
  15. java 文本框排版_怎么用java代码实现将文本框输入的内容按照设计的排版格式
  16. Echarts X轴类型为time时,X轴标签的细化(年月日时分秒)
  17. 什么不能吃——总结版来了!
  18. OSChina 周五乱弹 ——程序员的爱情观
  19. Python 棋子移动游戏
  20. 小布老师讲座笔记(一)

热门文章

  1. C++_引用_常量引用_函数_函数的默认参数---C++语言工作笔记033
  2. ES6新特性_ES6模板字符串---JavaScript_ECMAScript_ES6-ES11新特性工作笔记007
  3. STM32工作笔记0052---串口通信原理--UART
  4. opencv编译问题
  5. ConcurrentHashMapK, V的实现
  6. Linux创建用户、用户组 及 删除
  7. 用nohup重定向python输出到文件不成功的解决办法
  8. 【OpenCV入门教程之一】 OpenCV 2.4.8 +VS2010的开发环境配置
  9. android 电话 流程,android电话系统和ril分析(1)————概述和电话系统流程
  10. python编程(巧用装饰器)