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
答案 0 :(得分:0)
根据答复,这两种做法似乎都是可行的。
我想我会使用存储量大,CPU友好的路由。以这种方式对数据运行查询更加容易,而我的精巧笔记本电脑可以在运行脚本时执行多任务。希望这对某人有帮助