【发布时间】:2013-02-03 09:37:00
【问题描述】:
我正在构建一个评论系统,一个评论可以有很多回复。
如果我要在 mysql 中实现这个,我会建立一个comments 表,并有列:
-
comment_id, -
parent_comment_id。
评论的父评论 id 为 0,回复的父评论 id。因此,如果我正在寻找对某个评论的回复,我会寻找具有parent_comment_id 的 cmets 来匹配我正在寻找的评论。
这对我来说似乎是多余的,因为它需要我遍历整个 comments 表来查找评论是否有回复(尤其是对于大数据),如果我有一个密钥库数据库,我将有一个评论 ID 的键,其中将是按日期排序的回复列表。
那么您认为哪种方法更能解决这个问题?
另外,我想将问题概括为任何一对多关系,以将其作为列表存储在密钥库数据库中。如果您推荐使用密钥库数据库,您会推荐哪一个来处理大数据? (我不想使用 redis,因为它是在内存中的,我怀疑对 cmets 的回复需要经常访问)。
感谢您的回复。
【问题讨论】:
-
您有数据库性能问题吗?关系数据库不适用于树结构,但如果将它限制在一个级别,如果 cmets 可能会有更好的性能,并且您可以使用自连接来一次获取所有 cmets。不管你要设置什么,说你有新的 cmets,等等。
-
我没有任何数据库性能问题,因为我还没有开始,我只是想在这里理论上谈谈。我确实有一级 cmets,仅此而已,但我希望桌子非常大。请问自加入是什么意思:)?
-
self join 意味着 SQL 查询将在查询中多次引用其自身。喜欢
select main.*, child.* comments main join comments child on main.id = child.parent_id where main.id = 1;
标签: mysql database database-design nosql database-performance