AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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:112515
用户头像

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

关注

评论

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

js异步编程面试题你能答上来几道

loveX001

JavaScript

React组件之间的通信方式总结(上)

beifeng1996

React

React源码分析2-深入理解fiber

goClient1992

React

从2开始,在Go语言后端业务系统中引入缓存

闫同学

Go 设计 后端 11月月更

跟着卷卷龙一起学Camera--信号采样02

卷卷龙

ISP camera 11月月更

极速体验docker容器健康

程序员欣宸

容器化 docekr 11月月更

跟着卷卷龙一起学Camera--信号采样01

卷卷龙

ISP camera 11月月更

如何在知乎平台上做营销推广:推荐几种引流方式

石头IT视角

promise执行顺序面试题令我头秃,你能作对几道

loveX001

JavaScript

决策树-泰坦尼克号幸存者预测

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

一次基于Fastjson的JNDI注入

网络安全学海

网络安全 安全 信息安全 渗透测试 漏洞挖掘

从1开始,扩展Go语言后端业务系统的RPC功能

闫同学

后端 go语言 11月月更

圆满落幕!回顾 eBPF 技术的发展与挑战

OpenAnolis小助手

Linux 云原生 ebpf 云栖大会 龙蜥社区

年前端react面试打怪升级之路

beifeng1996

React

跟着卷卷龙一起学Camera--MIPI 03

卷卷龙

ISP camera 11月月更

前端必会面试题总结

loveX001

JavaScript

📢利用Vite插件助力证书安装

小鑫同学

前端 插件 11月月更

Ansible 部署的时候提示错误 SSH password instead

HoneyMoose

React源码分析4-深度理解diff算法

goClient1992

React

React源码分析3-render阶段(穿插scheduler和reconciler)

goClient1992

React

MySQL能力全开放,OceanBase 社区版 4.0 正式上线

OceanBase 数据库

互联网安全体制的挑战与机遇

阿泽🧸

互联网安全 11月月更

StarRocks 技术内幕 | Join 查询优化

StarRocks

数据库

设计模式之美-面向对象、设计原则、设计模式、编程规范、重构的关系

GalaxyCreater

设计模式

Linux中 dir 命令还能这样玩!

wljslmz

Linux 11月月更

百度前端react面试题总结

beifeng1996

React

史海峰:成为技术领导者 从技术到管理的必经之路丨声网开发者创业讲堂 • 第 5 期

声网

技术管理 人工智能’

企业级业务架构设计:方法论与实践 学习笔记

程序员架构进阶

业务架构 TOGAF 11月日更 Zachman

React组件之间的通信方式总结(下)

beifeng1996

React

从0开始,用Go语言搭建一个简单的后端业务系统

闫同学

后端 go语言 11月月更

这样回答前端面试题才能拿到offer

loveX001

JavaScript

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