“缓冲写入方案”,用于使用PHP,MySQL的视图计数器


"buffered write scheme" for view counter with php, mysql

我读了这个话题 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 查询。