前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RavenDB 文档建模--琐碎的注意事项--处理无限增长的文档

RavenDB 文档建模--琐碎的注意事项--处理无限增长的文档

作者头像
喵叔
发布2022-04-06 19:05:26
4770
发布2022-04-06 19:05:26
举报
文章被收录于专栏:喵叔's 专栏

使用 RavenDB 进行数据建模的一个重大挑战是数据不同的特征和行为会对各种操作成本产生不同的影响,这又反过来影响我们设计和使用模型的方式。从这篇文章开始我将通过4到6篇文章来讲解 RavenDB 文档建模琐碎的注意事项。

处理无限增长的文档

多大的文档才能被成为大文档?多小的文档才能被称为小文档?不同的 NoSQL 数据库给出的答案是不一样的,但是一般来说良好的文档大小范围应该在千字节左右。在 RavenDB 对文档的大小限制是有硬性规定的,不超过2GB,不要觉得着2GB不够用,RavenDB会对 JSON 文档进行压缩处理,因此如果你存储的数据大小在 2GB的话,经过 RavenDB 压缩后所占的空间会非常非常的小。这还只是一个文档的最大的大小,如果我们的业务需要几十个上百个文档呢?因此我们完全不需要担心 RavenDB 无法支持我们的业务数据需求,即使无法支持,你可别忘了 RavenDB 是一个完全兼容分布式,多集群部署的NoSQL数据库。 虽然说 RavenDB 对存储大型文档来说有着天生的优势,但是我们也要考虑一下成本问题,首先我们通过网络读取文档时可能出现传输速度很慢的情况(文档很大),即使我们读取到了文档,因为 RavenDB 的文档都是经过压缩的,我们该如何将压缩后的JSON解析到我们的实体中呢(解析占用的内存必然会比压缩后的JSON占用的内存高)?其次,假如文档很大,那么我们如何才能将数据展示在网页中呢?在使用完这些数据后我们该如何让GC回收它呢?这些都是我们需要考虑的问题。 以下是开发人员在实际开发中总价的方法:只要以千字节为单位衡量文档大小是有意义的,就可以了。RavenDB 在遇到过大的文档时会在 Studio 中生成警告,但对系统的行为和性能没有任何影响。 出现大文档常见的原因有两个:

  1. 包含多个非常到大的字段: 这种原因一般会出现在二进制数据和大文件的情况下。对于这种情况我们要考虑这些大量的数据是否必须存储在文档中,是否可以独立成一个外部文档,我们可以使用 RavenDB 提供的附件功能,将这些超大的数据/文件作为附件附加到文档中。

TIP:RavenDB 附近是没有大小限制的,在加载文档时我们无法访问。

  1. 包含大小不受限制的集合: 这种原因经常出现在文档必须包含大量数据字段的情况,一般我们会采用将文档按照业务拆分为多个小文档来解决这个问题,在使用时将这些小文档再合并成一个大文档。例如在订单系统中,不可能在页面上展示所有的订单,我们会根据年或月来拆分订单(比如某东的订单页面),这样我们就得到了如下文档:

文档

说明

order/zhangsan

用户zhangsan全部订单简略信息

order/zhangsan/202101

用户zhangsan2021年1月的订单

order/zhangsan/202102

用户zhangsan2021年2月的订单

这么拆分订单后,我们可以快速查询某人某段时间的订单的所有信息。当然这种方式是以时间为基础来进行拆分的,如果文档无法用时间来拆分该怎么办呢?那么,我们可以自定义拆分规则,还以订单文档为例,将订单拆按照100的倍数拆分,就会行程如下的文档:

文档

说明

order/zhangsan

用户zhangsan全部订单简略信息

order/zhangsan/1

用户zhangsan 第1个到第100个订单

order/zhangsan/2

用户zhangsan 第101个到第200个订单

这两种方法我们都可以使用 ​ Include ​ 将某用户的部分订单查询出来。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/04/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 处理无限增长的文档
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档