在MySQL中存储在线时间日志的最佳实践

时间:2019-03-06 03:32:39

标签: mysql

TL; DR进一步下降。

我正在编写一个PHP脚本,该脚本使用cURL从游戏网站(如果有人关心,Tibia)中获取玩家信息,并将其存储在数据库中。

我要存储的玩家信息是玩家名称,服务器,级别,职业,登录时间和注销时间。此信息将用于在玩家水平提升,在线时间等方面列出高分列表。

我已经制作了该脚本的两个原型。第一个检查服务器的联机列表,并在脚本的每个循环中为每个联机播放器创建一个新行。这样会创建很多行,并且数据库的大小很快就会失去控制,但是数据确实很容易在其上运行mysql查询。

该脚本的另一个版本检查服务器的联机列表,但仅在播放器尚未进入数据库或自上次脚本循环以来没有升级时,才插入新行。使用空的“ sessionEnd”时间戳列创建新行。当脚本循环通知玩家已注销时,“ sessionEnd”列将填充适当的时间戳。

问题在于,要执行此操作,我必须将数据库中所有未结束的会话行与当前在线播放器列表(来自网站)进行比较,这会使脚本运行缓慢并使CPU哭泣。与此相关的另一个问题是,与其他版本相比,运行与在线时间相关的查询变得复杂,因为我可以在X播放器上执行简单的COUNT()以获取在线时间。但是,这使数据库的大小确实很小。

TL; DR 存储用户在线时间的最佳方法是什么?

id   username   loginTime   logoutTime     level
1    myuser      10:38         11:54       48
2    myuser      10:54         11:31       49

或者喜欢...

id   username   timestamp   level
1    myuser      10:38       48
2    myuser      10:39       48
3    myuser      10:40       48
4    myuser      10:41       49

1 个答案:

答案 0 :(得分:0)

根据答复,这两种做法似乎都是可行的。

我想我会使用存储量大,CPU友好的路由。以这种方式对数据运行查询更加容易,而我的精巧笔记本电脑可以在运行脚本时执行多任务。希望这对某人有帮助