【发布时间】:2013-05-04 10:25:32
【问题描述】:
实现评论系统(大量数据写入)的最佳方式是什么?
1) 使用 RDBMS 数据库,例如 MySQL,2 个表,一个用于主题,一个用于 cmets 优点是新评论的插入是快速、高效和简单、高效的索引。 缺点是横向扩展(水平缩放)很难。
2) 使用nosql数据库如couchdb或mongodb,优点是容易横向扩展(横向扩展),支持大数据写入,无模式缺点 我认为新数据的插入不如RDBMS快速高效
例如更新couchdb文档需要抓取整个文档,在本地更新后再提交,文档会很大,会占用带宽。
另外我认为 couchdb 就地更新,Mongodb 更新会很慢并且不会像在 RDBMS 中那样高效
此外,当您想获取每个用户在各种主题中的 cmets 时,我认为在 RDBMS 中搜索会比在 nosql 系统中更快。
这是一个couchdb数据库文档的样本[每个主题的文档样本]
{"_id":"doc id",
"_rev":"45521231465421"
"topic_title":"the title of the topic"
"topic_body":"the body of the topic"
"comments":[
{"date":"mm/dd/yy hh:mm:ss"}, {"commment":"bla1"}, {"user":"user1"}
{"date":"mm/dd/yy hh:mm:ss"}, {"commment":"bla2"}, {"user":"user2"}
{"date":"mm/dd/yy hh:mm:ss"}, {"commment":"bla3"}, {"user":"user3"}
{"date":"mm/dd/yy hh:mm:ss"}, {"commment":"bla4"}, {"user":"user4"}
{"date":"mm/dd/yy hh:mm:ss"}, {"commment":"bla5"}, {"user":"user5"}
{"date":"mm/dd/yy hh:mm:ss"}, {"commment":"bla6"}, {"user":"user6"}
]
}
【问题讨论】:
-
为什么您认为 CouchDB 或 MongoDB 在插入数据时速度较慢?您是用自己的基准验证了这一点,还是只是在听自己的直觉?
-
要对couchdb文档添加评论,您需要抓取整个文档,在本地更新并再次提交,并且文档会很大,因此会占用带宽。所以它会“更慢”
-
为什么要将 cmets 嵌入到博客文章中?您是否期望在显示博客文章时还需要显示其所有 cmets?为什么您认为 RDBM 中的搜索会比 MongoDB 更快?它们都使用索引,都将索引结构作为 B 树。您为什么不实际针对您期望使用的数据对测试进行基准测试?