2

例如,如果您有一个用户表,以及用户之间的朋友映射器。您是否应该在用户中添加一个名为“friends-count”的额外列并在每次他们添加朋友时更新它,或者您是否应该在每次需要计数时进行计数查询。哪个效率更高?

4

2 回答 2

2

为什么你会有两个版本的真相,如果它们不同步你会怎么做......你将如何确定这一点。

最有效的方法是每次计数,维护缓存的支持和验证工作可能会超过任何计算收益。与开发人员的工作相比,CPU 周期很便宜。

如果它最终成为您应用程序中的瓶颈,那么请查看缓存,然后您会从缓存中获得实实在在的好处。

于 2012-08-25T17:17:56.687 回答
1

这取决于。正如joocer所说,更有效的选择是每次都计数,这并不总是正确的。

当您的系统有关于查询的人不多的关系信息的频率允许查询在下一个查询到来之前返回结果时,这可能是正确的(限制取决于您的架构效率)。我的意思是,如果你可以在 1 秒内统计友谊,并且你在一秒钟内收到 10 个计数请求,那么你的系统很快就会崩溃。

例如,在一个大且经常被查询为“Facebook”的系统上,针对每个请求的计数操作并不是真正有效的。

计数字段的并发可以通过许多高级技术(通过中间层、前端甚至是数据库,具体取决于您对每种架构的偏好)来处理,并且系统不会过度工作,这不依赖于很多由数据库大小。

如果您会说出有关架构的更多详细信息,则可以针对您的具体案例获得更好的答案。

缓存是一种类似的方式来表示存储计数额外的列(例如,数据库物化视图,我倾向于建议你,如果你的 RDBMS 支持它)。根据缓存实现的不同,它通常比以最佳方式直接在 RDBMS 上存储额外信息效率低。

于 2012-08-26T13:48:50.903 回答