博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mongo数据库的数据模型
阅读量:4948 次
发布时间:2019-06-11

本文共 1572 字,大约阅读时间需要 5 分钟。

  在构建数据模型时,需要考虑数据的一致性、读取速度以及更新速度等。在目前的数据模型中主要包括两种:嵌入式和引用式。

  嵌入式

    嵌入式模型也就是将子文档以字段的形式添加到文档中。以博客为例,一篇博客包括:标题、内容、标签、作者姓名和评论,评论又包括评论作者、内容以及时间。评论是一个完整的文档,并且以子文档的形式嵌入到博客中。格式如下:

    

{     "_id":"" ,             "title":"",    "body":"",     "author":"",     "tags":[               "Tag1"               "Tag2"                "Tag3"     ],      "createDate":,     "comments":[       {        "body":"",       "author":"",        "createDate":""}]}

  

    嵌入式模型可以在获取博客相关的内容时,一次获取,减少了与数据库的交互。单文档操作可以保证数据要么执行成功要么失败,对于数据的一致性来说也是一种很好的体验。

  引用式

    所谓的引用式就是只将子文档的id嵌入到文档中,并且子文档以文档的形式保存到集合中。格式如下:

    

{     "_id":"" ,             "title":"",    "body":"",     "author":"",     "tags":[               "Tag1"               "Tag2"                "Tag3"     ],     "createDate":,     "comments":[        "comment_id1",       "comment_id2",        "comment_id3"]}

  

    在读取数据时,在读取博客内容后,通过博客中保存的评论id,再次从评论集合中获取所有对该博客的评论,在更新博客的评论时,只需修改博客评论即可。或者在搜索评论时,无需通过搜索博客来筛选。这样会大大提高操作效率。

  模型使用决策

    在选择数据库的模型来说主要考虑一下几点:

    1、如果在访问数据时只通过一种方式,并且在频繁的访问,具有强烈的数据一致性。可以通过嵌入式在实现。

    2、对数据的访问形式具有多种。例如博客中有许多评论可以通过博客来搜索评论,也可以通过评论的作者进行搜索。

    3、一次修改可以实现多个文档的修改可以通过引用式实现。例如人员信息中包含住址,住址有包含多项内容。可以在人员信息中只包含地址文档的id。

    4、文档与子文档具有一对多的关系时可以使用引用式实现。因为随着数据的不断增多,内存消耗更多。如果使用嵌入式,可能没法保证将整个文档一次获取,造成缺页现象,对读取数据造成影响。在更新性能上也会出现影响,由于一个子文档可能关联多个文档,引用式可以保证一次更新多个文档得到修改。提高了数据操作效率。

    5、文档与子文档存在多对多关系时,使用引用式可以减少数据冗余。如果使用嵌入式,一篇博客具有多个标签,一个标签可能有多篇文档。随着数据的不断增加,博客中不断有大量的标签重复,这会导致出现大量的冗余标签数据。同时在更新标签信息时也会由于大量的博客文档使用了标签,需要对每个文档进行更新,降低了更新效率。使用引用式可以降低数据冗余,提高更新效率,因为只需更新标签文档信息即可。

转载于:https://www.cnblogs.com/youzhongmin/p/8390722.html

你可能感兴趣的文章
Server2016开发环境配置
查看>>
分布式光伏发电建设中的逆变器及其选型
查看>>
增强网络安全防御 推动物联网走向应用
查看>>
UML中关联,组合与聚合等关系的辨析
查看>>
《大数据管理概论》一3.2 大数据存储与管理方法
查看>>
PowerBuilder开发简单计算器
查看>>
怎样使用linux的iptables工具进行网络共享
查看>>
《HTML5与CSS3实战指南》——导读
查看>>
RHEL6下安装oracle 10g(一)
查看>>
Kconfig的格式
查看>>
关于Cursor的moveToFirst和moveToNext的意义
查看>>
个人--工资划分5份
查看>>
有关文件下载的文件名
查看>>
史上最详细的wamp配置虚拟域名步骤
查看>>
oracle 授权
查看>>
lv扩展磁盘空间
查看>>
java8之stream流的基本操作
查看>>
二维数组计算协方差java
查看>>
SpringBoot下Redis相关配置是如何被初始化的
查看>>
为你的AliOS Things应用增加自定义cli命令
查看>>