[英]Which is better database design?
给定像StackOverflow这样的网站,最好创建num_comments列来存储提交的注释数量,然后在发表评论时更新它,或者仅使用COUNT函数查询行数? 看起来后者会更具可读性和优雅性,但前者会更有效率。 SO的想法是什么?
绝对要使用COUNT。 存储评论的数量是经典的去标准化,会产生令人头疼的问题。 它的检索效率稍高,但使插入更加昂贵:每个新注释不仅需要插入注释表,还需要对包含注释计数的行进行写锁定。
前者未规范化,但会产生更好的性能(假设读取次数多于写入次数)。
后者更加规范化,但需要更多资源,因此性能较差。
哪个更好归结为应用程序要求。
我建议计算评论记录。 虽然另一种方法会更快,但它可以提供更清洁的数据库。 添加计数列将是一种数据重复,更不用说需要额外的代码步骤和插入。
如果您期望数百万条评论,那么您可能想要选择计数列方法。
我同意@Oded的观点。 这取决于应用程序的要求以及网站的活跃程度,但这也是我的两分钱
设计的“正确”方法是使用另一个表,加入它和COUNT
。 这与数据库规范化教授的内容一致。
规范化的问题在于它无法扩展。 皮肤猫只有很多方法,所以如果你每天有数百万个查询,其中很多都涉及表X,那么数据库性能就会低于地面,因为服务器还必须处理并发写入,事务等。 。
为了解决这个问题,通常的做法是分片 。 分片的副作用是表的行不存储在同一个物理位置,这样做的主要后果就是你不能再JOIN
了; 你如何JOIN
半桌并获得有意义的结果? 显然,尝试JOIN
对表的所有分区并合并结果将比疾病更糟糕。
因此,您可以看到,不仅您在实践中使用的替代方案用于实现高性能,而且还有工程师可以采取的更为激进的步骤。
当然,除非你确实遇到性能问题,否则分片甚至去标准化只会让你的生活更加艰难,没有任何实际的好处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.