写点什么

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

  • 2010-05-20
  • 本文字数:1665 字

    阅读完需:约 5 分钟

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

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

2010-05-20 22:112422
用户头像

发布了 254 篇内容, 共 60.1 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

BAT面试有关散列(哈希)表的面试题详解,flutter图片压缩上传

android 程序员 移动开发

Butterknife源码分析,android开发环境搭建实验报告

android 程序员 移动开发

ButterKnife被弃用,ViewBinding才是findView的未来?,秀出天际

android 程序员 移动开发

JMH实践记录

Clarke

JMH性能基准测试

Dart 层如何 兼容 Android 和iOS平台特性 (1),Android开发面试技巧

android 程序员 移动开发

FART:ART环境下基于主动调用的自动化脱壳方案,androidndk开发教程

android 程序员 移动开发

Flutter Android 工程结构及应用层编译源码深入分析,Android面试题及答案2020

android 程序员 移动开发

Flutter Android 端 FlutterInjector 及依赖流程源码分析

android 程序员 移动开发

华云大咖说 | 安超DCM运维场景解决方案

华云数据

ConstraintLayout 2,android双击事件响应

android 程序员 移动开发

Flutter 与 Compose怎么选?小孩子才做选择,kotlinwindows桌面开发

android 程序员 移动开发

Dart Flutter 1,flutter页面跳转动画

android 程序员 移动开发

Dart _ 什么是Stream,安卓开发不得不会

android 程序员 移动开发

DateUtils(一个日期工具类),androidauto百度地图

android 程序员 移动开发

ByteDance张一鸣:抖音很多年轻人,出色的都有这些闪光点

android 程序员 移动开发

Chameleon跨端框架——壹个理想主义团队的开源作品,旧版android模拟器

android 程序员 移动开发

ConstrainLayout 基础教程2,2021Android精选面试实战总结整理

android 程序员 移动开发

Flutter Candies 一桶天下,kotlin编程软件

android 程序员 移动开发

下一代信息技术论坛云操作系统介绍

架构 操作系统

BAT资深面试官-带你破解Android高级面试,渣本逆袭大厂面经分享

android 程序员 移动开发

BroadcastReceiver官方概览,【面试总结

android 程序员 移动开发

Context那些你不知道的事?,张口就来

android 程序员 移动开发

Coroutine 基本原理,Android开发大佬的百度美团快手等大厂Offer收割之旅

android 程序员 移动开发

EventBus核心原理其实保存这三张图就可以弄懂了,收藏一下

android 程序员 移动开发

filter、interceptor、aspect不知如何选择,移动应用开发案例教程

android 程序员 移动开发

BroadcastReceiver源码分析,一线互联网大厂中高级Android面试真题收录

android 程序员 移动开发

如何打造实时性的弹窗?

神策技术社区

UI sdk Android;

Flutter RichText支持图片显示和自定义图片效果,经典Android开发教程

android 程序员 移动开发

Flutter _ 日志还能这么打印,太秀了!,android移动应用基础教程

android 程序员 移动开发

ConstraintLayout 1,flutterrow换行

android 程序员 移动开发

DialogFragment探索与实现,音视频编解码技术

android 程序员 移动开发

Raven——一个.NET上的文档数据库_.NET_Abel Avram_InfoQ精选文章