用户评论存在哪种存储好点? mongodb 好像不太适合

2019-03-13 14:29:12 +08:00
 51300520

本来公司一直用的 mongodb,也挺好用。现在要开放评论。mongodb 单文档的限制是 16M,能满足绝大部分需求,但是评论这个东西理论上条数大小无上限,这样继续用 mongodb 存评论好像不合适。

我现在该用什么存? mysql 还是别的什么?或者有什么办法让 mongo 突破 16M 限制? 用 mongodb 的 gridfs 存储的话性能跟得上吗?看网上评测 mongodb 的 gridfs 的性能好像不太行。 其实如果 mongodb 的 gridfs 性能能达到 mysql 的水平我觉得就可以了,毕竟如果存 mysql 的话冗余数据太多了

4349 次点击
所在节点    问与答
11 条回复
514146235
2019-03-13 15:11:25 +08:00
单条评论超过 16M ?几乎不可能吧。
Trim21
2019-03-13 15:15:19 +08:00
啥样子的评论这么大…
ccoming
2019-03-13 15:19:02 +08:00
这个到底是评论还是论坛回复?
haozxuan001
2019-03-13 15:27:13 +08:00
第一、 图片、音频、视频等适合 gridfs ;
第二、在你的认知中 mysql 能无限存下去的原因,是因为每条回帖记录一条,只要盘不爆,不担心大小限制;
第三、谁跟你说我一个帖子和回帖要存在一个 doc 里面的,你如果设计回帖为数组的话,你现在的操作就是向一个数组中无限制 append 数据,抛开数据库不聊,这个开发模式也是极为糟糕的;
解决方案:只需要在一条 doc 中添加一个 parentId,约定回帖条数超过 200 条,新开一个 doc 存储;
PS:mongo 看似随便,但基本的设计理念还是要有的,否则就太随便了。
marcong95
2019-03-13 15:35:04 +08:00
你应该是把评论内容作为 Embedded Document 塞到一条 Document 里面了,你可以考虑弄成个链表一类的?毕竟超过 16M 的情况应该是挺少的,没必要上 GridFS ?
xkeyideal
2019-03-13 16:27:08 +08:00
评论小于 16M 的存 mongodb,超过 16M 的存 gridfs,觉得 gridfs 的性能有问题,评论存 ceph,mongo 里存 ceph 的文件地址
51300520
2019-03-13 23:55:13 +08:00
@514146235 我补充了,麻烦看看
51300520
2019-03-13 23:56:01 +08:00
@ccoming
@haozxuan001
@marcong95
@xkeyideal
我补充了,麻烦看看
xkeyideal
2019-03-14 09:00:38 +08:00
@51300520 这么设计肯定有非常多的问题

1、用户删除某条评论,你这样怎么删,评论也应该有个唯一 ID 吧?
2、评论需求后续有扩展,需要加字段,而且某个需求需要在扩展的字段上加索引,你怎么加?

mongodb 虽然没有关系型数据库的设计范式要求,也不能随便来吧,无论哪种 db 的设计在某种程度上至少能满足各第二范式吧

"content":"评论库设计的有很多潜在问题","time":"2019 年 3 月 14 日"
514146235
2019-03-14 11:20:19 +08:00
@51300520 我只能说你的设计很任性。你基本上是把数据库当 txt 文本文件在用啊。
shd
2019-03-14 13:24:20 +08:00
我寻思这最少两张表吧、post,reply

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/544134

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX