上一篇文章我们讲解了 RavenDB 的安装以及示例数据库的创建,并且其中涉及到了 RavenDB Stuido 的使用,但是只是简单的讲解了一下。...那么在这篇文章中我将带领大家来具体的学习 如何在 RavenDB Studio 中实现增删改查。...一、增加 当需要手动向 RavenDB 库中增加一条数据时,我们可以在 RavenDB Studio 中手动添加。...虽然说 RavenDB Studio 在增加一个新文档时,会基于现有文档来生成,但是因为在 RavenDB 中没有类似于 schema 的东西,所以我们可以随意增加和删除属性来修改文档结构,这个功能使数据模型在演变和处理复杂数据的时候更加容易...三、删除 如果要删除 RavenDB 中指定的文档,只选择该文档并点击 Delete 按钮即可。
RavenDB 非常适合键/值存储,为了确保快速存取数据库,RavenDB 在设计的时候降低了存储和加载文档的成本,这是 RavenDB 和其他数据库相比最大的有点。...由于数据限制必须是 JSON ,因此使用 RavenDB 作为键/值存储是完全没问题的。使用 RavenDB 缓存信息的常见场景有:存储购物车信息、存储用户会话数据、缓存热点数据等等。...在使用 RavenDB 作为键/值存储的情况下,下面所列的内容是很有用的: 可以独立于使用的集合生成文档标识符; 通过提供要加载的 ID,可以在单个调用中完成加载文档; RavenDB 为文档提供自动过期功能...但在,RavenDB 中允许我们非常轻松地查询和聚合数据。但是考虑到 RavenDB 对数据的处理能力,仅将 RavenDB 用于键/值数据有点浪费。...因此,我们还能将它作为标准的数据库进行操作,下一篇文章我将讲解 RavenDB 数据建模。
"海南", "HUN":"湖南", "SH":"上海" } 上面这种对 Reference data 建模的方式有如下几个有点: 数据易于处理,可以一次性将所有内容加载出来,减少 RavenDB...的处理次数; 融入了 RavenDB 缓存数据的方式; 降低了反序列化的成本; 降低了使用和编辑数据的成本。...TIP:Reference data 会使一个单一的文档,因此我们可以使用 RavenDB 做更多的任务,这些将在后续内容中讲解。...在 RavenDB 中对时态数据进行建模的方法是 完全接受其文档性质 ,因为在大多数时态域中,文档和视图随时间变化的概念非常重要。
但是这里存在一个致命的问题,历史订单已经完成了配送,当我们修改的地址与历史订单有关联时就会出现历史订单的配送信息改变了,这样就造成了数据损坏。...这个问题是在建模过程中出现的缺陷(解决这个问题也很简单,在这里我们就不再讨论),这是建模人员只局限于以关系的眼光看待事务造成的。...在 RavenDB 这种非关系型文档数据库中并不能完全解决这个问题,但是对于大多数业务系统来说 RavenDB 存储数据的模型还是比较合适的。...在 RavenDB 中每个文档都是一个聚合,它是面向文档的建模技术,为解决类似于订单和地址这种问题提供了很好的解决方案。 Q:什么是聚合?...在这个专题中,我们将学习如何拜托关系型思维模式以及如何为 RavenDB 建模。
在本专题中我们首先将 RavenDB 视为一个简单的键/值存储。只需将数据存储进去并通过键访问数据即可。同时我们还学习了使用过期功能来存储与时间相关的数据。...接下来,我们讨论了建模时必须考虑的一些约束,例如如何处理文档的增长以及RavenDB中文档的良好大小。...然后我们学习了如何处理带有附件的二进制数据,以及使用修订功能进行审计和更改跟踪,并且了解了我们可以在 RavenDB 中如何让文档数据过期。简要介绍了索引和查询时的引用处理。...在RavenDB中文档以某种方式存储和访问,而我们默认使用查询以获得更高的性能并有更多的优化机会。此行为由用户根据具体情况进行控制,因此你可以为每个方案选择适当的模式。
项目新建成功后,我们需要在项目中安装 RavenDB 的包。在 NuGet b包管理其中查找 RavenDB.Client 包并安装它。...新增 既然要操作 RavenDB 肯定就少不了实体类,虽然说 RavenDB 使用的是完全动态的数据库,但是在实际开发中大多数情况都需要使用实体类。...然后将任务存储在会话中并调用 SaveChanges 方法将会话中的所有更改保存到 RavenDB 中。...在开发中除非特殊的情况下我们才会每执行一次 CURD 就去执行一次 SaveChange 方法,大部分情况我们会将同一个会话中的所有操作执行完后采取执行 SaveChange 方法,在这里我们不需要担心如果在中途出先异常,数据只保存了部分的问题...,这时因为 RavenDB 具有其他 NoSQL 数据库所没有的真正的事务,要么全部保存成功,要么全部保存失败,不会出现部分成功和部分失败的问题。
RavenDB是一个在.NET下的文档型数据库,它具有高扩展性,支持MapReduce,提供RESTful的接口。同时它又支持ACID的事务。下面是一个RavenDB的系列教程,从入门到精通。...lifecycle tracking documents structure entities, repositories, and commands user registration Using RavenDB...with ASP.NET MVC NoSQL with RavenDB and ASP.NET MVC- Part 1 NoSQL with RavenDB and ASP.NET MVC - Part...2 Building an ASP.NET MVC app using RavenDB as a Backing Store 将 RavenDB 嵌入 ASP.NET MVC 3 应用程序中 RavenDB...Elmah.RavenDB: RavenDB provider for ELMAH Using RavenDB and ASP.NET MVC 4 to create a Twitter Clone Chirpy
Metadata 默认存储什么 Metadata 的存储格式和文档本身一样也是 Json,RavenDB 使用 Metadata 存储有关跟踪文档的几个重要信息: 集合名称,存储在 @collection...Raven-Clr-Type .NET客户端 Raven-Java-Class Java 客户端 Raven-Python-Class Python客户端 自定义 Metadata 属性命名规范 除了使用 RavenDB...session.Advanced.GetMetadataFor(order); metadata["Last-Modified-By-User"] = "张三"; session.SaveChanges(); } 我们在 RavenDB...TIP:当我们在 RavenDB 文档中看到以 @ 开头的 Metadata 属性时,就说明这个属性是 RavenDB 保留给自己用的,因此我们在扩展 Metadata 属性时不能使用与之一样的属性名,
在 RavenDB 中对如何在应用程序中进行数据建模没有任何要求,我们可以使用任何形式进行建模,RavenDB 只关心如何构建数据,这就是我们后续几篇文章要讲解的内容。...public Parent Mother { get; set; } public Registration Registration { get; set; } } 我们在建模时应遵循 RavenDB...那么我们该如何解决这个问题呢?说我们有三种方法: 在 Child 文档中添加一个数组,数组中存储祖父母辈的文档 ID; 在祖父母辈的文档中添加一个数组,数组中存储孙子辈的文档ID; 两者相互存储。...在这种情况下,仅为订单标头创建文档大概率是有意义的,但是如果使用投影也是可以的(这些内容将在后面的文章讲解),这样就省去了拆分数据的需要,在 RavenDB 中构建一对一关系的典型方法是利用文档 ID...另一种情况是,如果需要对文档进行并发活动,由于文档是 RavenDB 中的并发单位,因此需要对文档进行建模,以便它们具有更改的单一原因。
1、延迟加载 原来的查询方式如下: IEnumerable<User> users = session .Query<User>() .Wher...
在静态索引这块,RavenDb其实的是lucene,所以里面有很多概念,其实都是lucene本身的。...+0300)\/", "Document": "bob" } ] } 6.查询 在查询当中用 string.Contains()方式是会报错的,因为RavenDb...不支持类似通配符*term*这样的方式,这样会引起性能问题,它会抛出NotSupportedException异常。
1)Result Transformers public class Order { public DateTime OrderedAt { get;...
1、读取 Raven.Abstractions.Data.Attachment attachment = documentStore.DatabaseComma...
在 RavenDB 对文档的大小限制是有硬性规定的,不超过2GB,不要觉得着2GB不够用,RavenDB会对 JSON 文档进行压缩处理,因此如果你存储的数据大小在 2GB的话,经过 RavenDB 压缩后所占的空间会非常非常的小...因此我们完全不需要担心 RavenDB 无法支持我们的业务数据需求,即使无法支持,你可别忘了 RavenDB 是一个完全兼容分布式,多集群部署的NoSQL数据库。...虽然说 RavenDB 对存储大型文档来说有着天生的优势,但是我们也要考虑一下成本问题,首先我们通过网络读取文档时可能出现传输速度很慢的情况(文档很大),即使我们读取到了文档,因为 RavenDB 的文档都是经过压缩的...这些都是我们需要考虑的问题。 以下是开发人员在实际开发中总价的方法:只要以千字节为单位衡量文档大小是有意义的,就可以了。...包含大小不受限制的集合: 这种原因经常出现在文档必须包含大量数据字段的情况,一般我们会采用将文档按照业务拆分为多个小文档来解决这个问题,在使用时将这些小文档再合并成一个大文档。
我们修改或者删除文档后,同样也需要调用SaveChanges 方法来更新 RavenDB,而且利用 Query 查询出来的文档在会话中也只有一个实例,不管你查询了多少次。...这里要注意 RavenDB 不允许在查询期间进行计算(例如:SUM、AVG 这类的计算),并且它不存在表扫描或慢查询的问题。...Name = "Oscar Arava" }; session.Store(person); 同样,与 Delete 方法一样,只有在调用 SaveChanges 方法后,数据才会真正的保存在 RavenDB...中,并且对于新增来说,RavenDB 会为新实体提供一个 ID。...那么就可以调用 Store 方法来将实体和会话绑定在一起,并且它的 ID 不是空的,RavenDB 认为它以存在于库中,因此将会以更新的形式存入库中。
文档会话 会话是代码和 RavenDB 交互的主要方式。...如果在 RavenDB 中没有找到指定的文档,那么字典中文档的 ID 值为 null。...其实这个问题完全不必担心,当我们调用 session.Store(person) 后,RavenDB 客户端已经为 Perosn 的 Id 属性赋予了一个唯一值 ,因此在调用 person.Id 时不会出错...在 RavenDB 中其实是没有咱们常说的外键关系的,对另一个文档的引用只是一个字符串的属性。那么我们该如何查询出文档及其关联的文档呢?...这时,当我们调用 Load 方法来获取 Person 文档时,因为会话缓存中已经存在了这个文档,因此不会再去查询 RavenDB ,而是直接返回数据。
在上一节当中已经介绍了RavenDb的文档设计模式,这一节我们要具体讲一讲如何使用api去访问RavenDb 1.连接RavenDb var documentStore = new DocumentStore...connect to a remote RavenDB instance at ravendb.mydomain.com, to the default database Url = http://ravendb.mydomain.com...;Database=Northwind connect to a remote RavenDB instance at ravendb.mydomain.com, to the Northwind database...there Url = http://ravendb.mydomain.com;User=user;Password=secret connect to a remote RavenDB instance...at ravendb.mydomain.com, with the specified credentials DataDir = ~\App_Data\RavenDB;Enlist=False use
RavenDb是文档型数据库,但是我们常常也需要定义对象之间的关系,那RavenDb当中是如何处理的呢?...RavenDb提供了优雅的解决方式,使用正确的话,可以减少数据开销以及网络拥堵 Denormalization 第一种就是反规范化,下面是一个订单的JSON格式 在Order这个订单当中我们把我们需要的客户信息...set; } public string Name { get; set; } public string Address { get; set; } } Includes 1)RavenDb
下面我们来看一下 RavenDB 生成文档 ID 的策略。 TIP:RavenDB 的文档 ID 是数据库全局唯一的,这和关系型数据库的主键是所在表唯一不一样。...这里存在一个问题,当又多个客户端从不同的节点同时向服务端发送保留文档 ID 的请求时,很有可能出现这几个客户端获得打文档 ID 范文是一样的,那么为了解决这个问题各个节点之间会相互通信,如果发现有节点的文档...生成结果如下图: 这个策略存在一个问题,如果我们尝试使用 ID 保存文档并且保存失败,值仍然会递增。因此,即使 Identity 生成连续数字,如果事务已回滚,它仍可能会跳过标识符。...RavenDB 通过将文档 ID 存储在 B+Tree 中来跟踪它们。如果文档 ID 非常大,则意味着 RavenDB 可以在给定空间中存储更少的文档 ID。...它非常适合大型批处理作业,并且在其中包含许多额外的优化; 语义生成的 ID 是未排序的,RavenDB 可以轻松处理大量带有语义标识符的文档,对于性能来说也没什么大问题; Identity 生成文档 ID
RavenDb是一个文档型的数据库,和芒果Db是一个类型的东西,但是公司选择了它,主要是因为它对事务的支持比较好,芒果Db在事务方面有问题。 下面有一个例子。
领取专属 10元无门槛券
手把手带您无忧上云