gpt4 book ai didi

mysql - 如何在不影响性能的情况下计算 MySQL 中的页面浏览量

转载 作者:行者123 更新时间:2023-11-30 22:36:29 25 4
gpt4 key购买 nike

我想计算一个页面的访问者数量,类似于 stackoverflow 对每个问题的“浏览量”所做的。

当前的解决方案只是增加 InnoDB 表的一个字段:

UPDATE data SET readers = readers + 1, date_edited = date_edited    WHERE ID = '881529' LIMIT 1

这是页面上最昂贵的查询,因为它正在执行写操作。

这个问题有更好的解决方案吗? stackoverflow 等高流量网站如何处理这种情况?

我正在考虑改用内存引擎写入表,然后每分钟左右将该内容写入 innodb 表。

例如:

INSERT INTO mem_table (id,views_new)
VALUES (881525,1)
ON DUPLICATE KEY UPDATE views_new = views_new+1

然后我会每分钟运行一个 cron 作业来更新 InnoDB 表:

UPDATE data d, mem_table m
SET d.readers = d.readers + m.readers_new
WHERE d.ID = m.ID;

DELETE FROM mem_table;

不幸的是,这对复制来说不是很好,而且应用程序使用的是 MySQL Galera 集群。

预先感谢您提出任何建议。

最佳答案

有一些方法可以通过启动一个单独的线程来更新您的计数器来减少直接的性能损失。当您有大量并行用户时(您的命中计数器有很多并行更新),建议使用排队机制来防止锁定(就像您的内存表一样)。您的队列将同时具有写入和读取功能,因此您必须考虑表和数据设计。

备选方案是在单独的文件中保留与文章相关的计数器。这可以防止带有命中计数器的单个表发生拥塞,或者如果您将它保留在为文章服务的表中:该文章表上的高锁定等待超时(导致各种前端错误)。将数据保存在单独的文件中并不能让您深入了解网站的总体点击率,但为此您可以只使用像 awstats 这样的日志图形工具。

关于mysql - 如何在不影响性能的情况下计算 MySQL 中的页面浏览量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32415378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com