每次访问数据库记录时存储视图计数的适当且最有效的方法是什么?
我有桌子ITEMS
包含以下字段:id, item_name
每个项目都有自己的永久链接:http://domain.com/item_name http://domain.com/item_name
我希望能够使用这些数据并显示Views: 2,938
在页面上。哪种方法最好?
Method A
创建附加字段view_count
in the ITEMS
表并更新它以增加视图计数:
view_count = view_count + 1;
Method B
创建一个新表VIEWS
包含以下字段:
id, item_id, timestamp, ip
并添加一条新记录VIEWS
每次查看页面时都会表。
Method C
还有另一种方法吗?
我见过方法 A 在各种 PHP 论坛软件中使用,但是我的大学导师告诉我方法 B 更好,因为add()
需要的应变小于update()
确实,INSERT 操作通常比 UPDATE 语句消耗更少的资源。但经过良好调整的 UPDATE 语句不一定是一种压力”。
还有其他考虑因素。如果唯一已知和预见的要求是“总”页数,则单行消耗的存储空间比为每个“查看”事件存储单独的行要少得多。此外,检索视图计数的查询也会更加高效。
(现实世界中的“压力”在于存储,不仅仅是磁盘空间,还包括磁带数量以及备份所需的时钟时间、恢复所需的时间等)
如果您需要能够按小时或按天报告观看次数,那么拥有更精细的数据将使您能够做到这一点,而这是您无法从总数中获得的。
你实际上可以两者都做。
如果我需要“摘要”计数来放置页面,我不想对历史事件记录中的大量行运行查询,只是为了在下次页面时得出新值 2,939被查看。每次查看页面时,从单行检索单个列值对数据库资源的“压力”要小得多,而与每次查看页面时翻阅数千行事件数据以将其聚合为计数相比,要小得多。
如果我还需要能够按国家/地区或按 IP、按小时、按天、按周或按月以管理方式报告“视图”,我还将存储各个事件行,以便将它们用于切片和切块分析。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)