mysql - 如何检测网站视图中的点击农场
问题描述
我正在建立一个类似博客的网站,用户可以在其中访问其他用户的消息,并记录该消息的查看次数。我问这个是因为我不知道如何处理点击农场,即用户一遍又一遍地点击某人的消息并不公平地增加视图。这些是我考虑的选项:
第一个选项
在 MySQL 数据库中,消息将存储在此表中。
Message(massageId, writerId, body, views)
每次用户单击消息时,我都会运行此查询:
UPDATE Message
SET views = views + 1
WHERE messageId = ?
当然,messageId 将来自单击消息时的 GET 请求。此选项有效,但我会遇到恶意用户在消息上无限次单击增加视图而无法控制的情况。
第二个选项
这次在数据库中我可以有两个表:
Message(massageId, writerId, body)
Views(viewId, messageId, visitorId)
每次用户点击消息时,我都会检查用户是否已经查看过此消息:
SELECT viewId
FROM Views
WHERE visitorId = ? AND messageId = ?
如果此查询返回一行,那么我不会增加视图。否则,我会通过插入视图来增加视图:
INSERT INTO Views
VALUES (?, ?, ?);
此选项可防止点击农场,因此用户只能增加一次消息的查看次数。但这也创建了一个记录每次观看的视图表,因此它将非常迅速地增长。
是否值得拥有另一个表来防止点击农场,因为新表会很长,所以可能会冒着效率和存储的风险?如果您有任何其他想法,我很乐意听到它们。
解决方案
推荐阅读
- hive - 在配置单元中创建一个带有时间戳作为注释的表
- angular - AWS 放大缩小捆绑包大小
- c - 在三元运算符中隐式转换为 void*?
- android - Android Studio 中不同的 gradle 依赖
- c# - 如何像 Prettier 一样在 VSC 中格式化 C#?
- javascript - 样式组件的“css”道具和 Storybook 的 TypeScript 问题
- mongodb - mongod 不遵守 tlsAllowConnectionsWithoutCertificates 设置
- r - 按值过滤行,除非没有行满足条件
- algorithm - 为什么 Quicksort 的函数调用堆栈很深,输入中有很多重复项?
- asp.net - ApplicationPool 随机崩溃处理 HTTPS 请求