QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

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

关注

评论

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

【Python】这个列表TTT熟悉

謓泽

Python 2月月更

一次TDD(Test Driven Development)尝试感受

Bruce Talk

技术 敏捷 TDD Agile

Pandas+Seaborn+Plotly:联手探索苹果AppStore

Peter

数据挖掘 数据分析 可视化 Kaggle

攻克MySQL-索引基础

javaadu

MySQL 面试题 索引

一个简单的方法排列任务优先级

Bruce Talk

过完年了, 为明年设计一个春联自动生成器, 给大家助助兴

DS小龙哥

2月月更

实践GoF的23种设计模式:SOLID原则

元闰子

设计模式 SOLID

迭代器总结

编程三昧

JavaScript 前端 迭代器 2月月更

NFT盲盒商城系统开发技术

薇電13242772558

NFT

设计千万级学生管理系统的考试试卷存储方案

王大胖

mxGraph教程-开发入门指南

No Silver Bullet

流程图 2月月更 mxGraph

跨平台应用开发进阶(五) :uni-app 实现列表项左划操作

No Silver Bullet

uni-app 2月月更 左划删除

攻克MySQL—索引优化

javaadu

MySQL 面试题 索引

模块八

Only

架构师实战营 「架构实战营」

互联网产品管理课-笔记(16/100)

hackstoic

产品

作业8

施正威

国内外好用的OKR管理工具有哪些?

爱吃小舅的鱼

一次历史漏洞分析与复现的全部过程

H

网络安全

书单

林逸民

学习 读书

从俄乌战争看区块链技术在未来国防领域的应用

CECBC

Go 语言入门很简单:Go 反射

宇宙之一粟

【ELT.ZIP】OpenHarmony啃论文俱乐部——综述视角解读压缩编码

ELT.ZIP

鸿蒙 OpenHarmony 数据压缩

SSR 和前端编译,在这点上是一样的

CRMEB

人人皆可虚拟,直播还能这么玩?声网推出 MetaLive 元直播解决方案

声网

人工智能 音视频

人大代表谈“元宇宙”:把握机遇,加速布局

CECBC

能源产业数字化转型:区块链如何“炼”?

CECBC

如何通过服务提升产品价值?

石云升

产品思维 体验设计 产品分析 2月月更 服务产品化

简谈什么是 Web 3.0

devpoint

元宇宙 Web3.0 2月月更

模块八

撿破爛ぃ

架构训练营

精选22个pandas实用函数

Peter

Python 数据分析 pandas

【干货】Servlet内存马加载流程分析

网络安全学海

黑客 网络安全 信息安全 渗透测试 安全漏洞

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