例如,如果您有一个用户表,并在用户之间有一个朋友映射器。你应该在名为'friends-count'的用户中添加一个额外的列,并在每次添加朋友时更新它,或者你应该在每次需要计数时进行计数查询。哪一个更有效率?
答案 0 :(得分:2)
为什么你会有两个版本的事实,如果他们不同步你会怎么做......你将如何确定。
最有效的方法是每次计数,维护缓存的支持和验证工作可能超过任何计算收益。与开发人员的努力相比,CPU周期便宜。
如果它最终成为您应用程序的瓶颈,那么请查看缓存,然后您可以获得缓存的实际好处。
答案 1 :(得分:1)
这取决于。并不总是如此,因为joocer说更有效的选择是每次计数。
当您的系统具有关于查询的频率的关系信息不是很多时,可能会出现这种情况,该频率允许查询在下一个查询到来之前返回结果(限制取决于您的架构效率)。我的意思是,如果你可以在1秒钟内统计友谊,并且你在第二次得到10个计数请求,你的系统很快就会崩溃。
对于每个请求,对一个大而且经常被查询为“Facebook”的系统的计数操作并不是真正有效。
计数字段上的并发可以通过许多高级技术处理(中间层,前端甚至数据库,具体取决于您对每个体系结构的偏好),而系统没有太多的过度工作, t取决于数据库大小。
如果您要说明有关您的架构的更多详细信息,您可以针对具体情况获得更好的答案。
缓存是一种类似于存储计数额外列的方式(例如,数据库物化视图,如果您的RDBMS支持,我倾向于建议您)。根据缓存实现,它通常比以最佳方式直接在RDBMS上存储额外信息的效率低。