TL;DR再往下。
我正在写一个PHP脚本,它使用cURL从游戏站点(如果有人关心的话,胫骨)获取玩家信息,并将其存储在数据库中。
我存储的球员信息包括球员姓名、服务器、级别、职业、登录时间和注销时间。这些信息将被用来制作玩家级别增益,在线时间等的高分列表。
我已经制作了这个脚本的两个原型。第一个检查服务器的在线列表,并在脚本的每个循环中为每个在线播放器创建一个新行。这会创建很多行,数据库大小很快就会变得无法控制,但对这些数据运行mysql查询非常容易。
脚本的另一个版本检查服务器的在线列表,但仅在播放器不在数据库中或自上次脚本循环以来升级后才插入新行。新行是用一个空的"sessionEnd“时间戳列创建的。当脚本的循环通知玩家已经注销时,"sessionEnd“列将填充适当的时间戳。
问题是,为了做到这一点,我必须将数据库中所有未结束的会话行与当前的在线播放器列表(来自网站)进行比较,这会使脚本运行缓慢,并使我的CPU崩溃。这样做的另一个问题是,与其他版本相比,运行与在线时间相关的查询变得复杂,在其他版本中,我可以对X player执行简单的COUNT()操作来获取在线时间。然而,这使数据库的大小变得非常小。
存储用户在线时间的最好方法是什么?
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
发布于 2019-03-06 14:50:29
根据回复,似乎这两种做法都是可行的。
我想我会使用大量存储,cpu友好的路线。这样可以更容易地对数据运行查询,而且我的小笔记本电脑可以在运行脚本的同时进行多任务处理。希望这能帮助到某人
https://stackoverflow.com/questions/55015095
复制相似问题