我有一个网站,它使用多个 MySQL 查询来计算用户参与度/事件。
对于典型用户,我会问:
他们进行了多少次更新? 他们上传了多少张照片? 等等等等
这些只是对相关表格、更新、照片的基本 COUNT 查询。然后,我将每个值的 COUNT 个值相加以获得分数。每个查询需要一个JOIN,每个查询大约需要0.0006秒,每个用户总共10次查询,总共0.006秒。
虽然对于一个用户来说还不错,但我必须针对 100,000 个用户、10 分钟的理论处理时间和大约 1,000,000 个数据库查询进行计算。感觉我正在以错误的方式处理这个问题,想知道是否有人有任何想法?
我曾考虑过将用户得分存储在他们的用户记录中,并在每次执行特定操作时增加它,但它不太灵活(我无法返回并查看某一天累积了多少积分)实例)。
非常感谢任何帮助!
最佳答案
有一个user_activity
链接表。它需要一个 action_id
、user_id
和一个 timestamp
。例如,当用户上传照片时,会创建一条 activity_id
= 2 的记录(对于从 activities
表引用的“照片上传”), user_id
和当前时间戳。这很容易查询,并且消除了当您拥有无数用户时长时间运行查询的担忧。
关于php - 计算用户参与/事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1563303/