gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 16:13:46 24 4
gpt4 key购买 nike

TL;DR 再往下。

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

我存储的玩家信息是玩家姓名、服务器、等级、职业、登录时间和注销时间。此信息将用于制作关于玩家等级增益、在线时间等的高分列表。

我已经制作了这个脚本的两个原型(prototype)。第一个检查服务器的在线列表,并在脚本的每个循环中为每个在线玩家创建一个新行。这会创建大量行,数据库大小很快就会失控,但数据很容易运行 mysql 查询。

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

问题是,要做到这一点,我必须将数据库中所有未结束的 session 行与当前在线玩家列表(来自网站)进行比较,这使得脚本运行缓慢并使我的 CPU 崩溃。另一个问题是,与其他版本相比,运行与在线时间相关的查询变得复杂,在其他版本中我可以在 X 播放器上执行简单的 COUNT() 来获取在线时间。然而,这使得数据库的大小非常小。

TL;博士存储用户在线时间的最佳方式是什么?

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

最佳答案

根据回复看来这两种做法都是可行的。

我想我会使用存储量大、CPU 友好的路线。通过这种方式对数据运行查询要容易得多,而且我的小型笔记本电脑可以在运行脚本时执行多任务。希望这对某人有帮助

关于mysql - 在 MySQL 中存储在线时间日志的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55015095/

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