我读了这个话题 https://meta.stackexchange.com/questions/36728/how-are-the-number-of-views-in-a-question-calculated.我了解算法,但我不明白如何在mysql,php中做到这一点。
每次注册新命中时,除了即将过期的缓存条目外,还会将其添加到内存缓冲区中。缓冲区本身也会在几分钟后或填充到一定大小后过期,以先发生者为准。当它过期时,它积累的所有内容都会批量写入数据库。他们称之为"缓冲写入方案"。
我们在mysql中使用存储引擎-MEMORY,或者使用mysql,php更好的解决方案。
谁能帮我如何使用 php、mysql 为视图计数器提供"缓冲写入方案"。
非常感谢。
它不会比MySQL更快。
查询的存储过程可以加快该过程,但数据库设计是另一半。
确保你有一个表来计数:
user_therad_visit:
----------------------------
user_id | thread_id | count
----------------------------
确保在"user_id"和"thread_id"列上有一个索引,或者更好的是两行唯一索引。
当用户登录时,读取他的整个值和thread_id计数值,并将它们保存在 $_SESSION 数组中。
通过这种方式,您可以按 $_SESSION var 检查用户是否已经访问过该页面,如果他已经在这里,则只需忽略获取数据库,这将大大减少查询。
然后不要忘记更新您的数据库,以防用户从未在此线程上,并直接手动更新您的 $_SESSION 数组。
使用查询帮助程序:
插入到表 (a,b,c) 值 (1,2,3),(4,5,6) 在重复键更新 C=值(A)+值(B);
您可以简单地将插入和更新(无论需要什么)组合到一个查询中,从而提高性能。
这样,查询仅在用户第一次进入线程时才触发,您别无选择,只能在某处写下,数据库是最快的方法之一。
只要您的thread_id和user_id字段已编制索引,即使表中有一百万行,您也应该非常快速地使用 SELECT 查询。