mongodb文章和评论放在同一条数据里对效率有什么影响-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

mongodb文章和评论放在同一条数据里对效率有什么影响

2016-02-13 17:14:47 3237 1

将评论和文章放在一起,这里我有一个疑问,当评论数量很大以后,会不会导致在查询文章列表页的时候效率低下?
如果将comments剥离到另一个collection里,这样是不是能缓解只显示文章列表的情况下的压力
screenshot

取消 提交回答
全部回答(1)
  • 蛮大人123
    2019-07-17 18:42:13

    如果评论不多,放在一起的设计很合适,楼上说得很好。但是如果评论多了,问题就来了。最重要的有两基本出发点: 1. 硬盘太慢; 2. 只要数据在内存里,就没问题。
    1.find
    数据特别大了之后,在磁盘上读好多数据,因为Memory Mapped File都会放在内存里,可是我们只需要里面的一小部分,最主要的问题是可能OS会把别的数据换页到硬盘上。单就列出文章列表来说,内存就没有被有效地利用。
    2.insert
    在磁盘文件上,如果一个document一直长啊长,好多次,这不是一个好事。因为 如果新加入数据后,比如加了一个新评论,document变大了,原来的地方放不下了,就要找新的地方,以前的空洞会被重新利用。但是问题是,document位置变了,所有跟它有关的索引都要变。如果你还有个数组上的索引,比如发表评论的用户名,那更新的索引就跟这个数组长度成线性关系。
    综上,评论特别多的时候,会影响性能。
    总结,schema设计要考虑
    1.数据规模,经常访问的数据只要在内存里,对访问来说没什么问题。上面第一条find里提到的内存利用不充分,其实不是大问题。因为热门文章的评论总有不少人看,放内存里也不错。如果document一直长呀长,MongoDB会自动地在分配磁盘空间时多分配一些。
    2.与Access Pattern相适应。写评论相对看文章看评论,太小了,Twitter的数据是平均发tweet 5K/s, 读timeline 300K/s. 60倍呀!只要读请求在内存里能满足就好了。用MongoDB就可以不用另搞caching了。不是访问真得特别大,写特别多这样极端的情况,都好说。真得到了那一天,MongoDB的sharding就派上用场了。
    3.开发方便 产品的成本不仅仅是机器硬件、网络的成本,更重要的是程序员的开发成本,工资都那么高……所以,写着快捷方便,不容易出错也是很重要的一点,对不?这也就解释了为什么MongoDB文档模型的灵活性广受好评了。
    话说回来了,我觉得绝大多数这类应用的评论都不会过百吧……这时候单文档就发挥出优势了,几百评论都没问题的,题主的问题就不是问题了。希望题主的应用能突破这个数……

    0 0
相关问答

1

回答

MongoDB哪个命令可以切换数据库?

2021-12-14 22:36:22 621浏览量 回答数 1

1

回答

云数据库MongoDB版是什么?

2021-12-14 22:59:29 352浏览量 回答数 1

1

回答

MongoDB哪个命令可以切换数据库

2020-05-23 13:53:15 264浏览量 回答数 1

1

回答

什么时候使用mongodb数据库

2019-12-10 14:17:36 671浏览量 回答数 1

0

回答

云数据库MongoDB是否支持嵌套

2017-10-30 17:53:07 2797浏览量 回答数 0

0

回答

如何在云数据库 MongoDB集群版中迁出数据

2017-10-30 16:37:44 1605浏览量 回答数 0

1

回答

mongoose mongdb数据库问题

2017-05-18 12:04:59 3234浏览量 回答数 1

3

回答

MongoDB云数据库

2016-04-15 16:45:17 6151浏览量 回答数 3

1

回答

MongoDB 集群如何读取数据?

2016-02-29 15:07:17 1688浏览量 回答数 1

1

回答

MongoDB是否有数据库表设计?

2016-02-25 11:04:48 2235浏览量 回答数 1
+关注
蛮大人123
我说我不帅他们就打我,还说我虚伪
0
文章
7733
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载