sqlite 是否足够快,可以将预加载内容替换到内存中?
Is sqlite fast enough for it to replace pre-loading stuff into memory?
假设我有一个包含 50 个玩家的游戏服务器,每个玩家都有一个角色列表(从五到五百个字符不等,并且玩家一次只能玩一个角色)。
是不是把所有的角色存入一个数据库,然后当播放器连接到服务器的时候,一次性从数据库中加载所有的角色,存入一个列表:
def on_connect(**event_args):
player = Player()
player.characters = load_characters(event_args['playerid']) # Load everything at once
players[event_args['playerid']] = player
def on_character_change(**event_args):
player = players[event_args['playerid']]
for char in player.characters:
if char.characterid == event_args['characterid']:
player.current_character = char
break
然后当玩家与服务器断开连接时,将他所有的角色保存到数据库中。
或者一次只从数据库中加载一个角色,然后当玩家改变角色时,将当前角色保存到数据库中,从内存中丢弃它,并从中加载新角色会更好吗?数据库?
所以基本上是 RAM 与数据库加载速度,数据库 (sqlite3) 实际上有多好?
如果您需要更多信息,请告诉我,但不确定如何提出这样的问题...
对于 50 位玩家,我不担心提高使用普通 Sqlite3 的速度,几乎所有内容都是基于内存的。 Sqlite3 缓存最后 100 条语句(如果需要,您可以增加此值)以及 2000 个 1k size=2Mb 的页面(在您的情况下应该足够了)。您可以通过以下方式增加此值:
conn.execute("""PRAGMA cache_size = 4000""") # 4 Mb
有关详细信息,请参阅 Optimization FAQ。
假设我有一个包含 50 个玩家的游戏服务器,每个玩家都有一个角色列表(从五到五百个字符不等,并且玩家一次只能玩一个角色)。
是不是把所有的角色存入一个数据库,然后当播放器连接到服务器的时候,一次性从数据库中加载所有的角色,存入一个列表:
def on_connect(**event_args):
player = Player()
player.characters = load_characters(event_args['playerid']) # Load everything at once
players[event_args['playerid']] = player
def on_character_change(**event_args):
player = players[event_args['playerid']]
for char in player.characters:
if char.characterid == event_args['characterid']:
player.current_character = char
break
然后当玩家与服务器断开连接时,将他所有的角色保存到数据库中。
或者一次只从数据库中加载一个角色,然后当玩家改变角色时,将当前角色保存到数据库中,从内存中丢弃它,并从中加载新角色会更好吗?数据库?
所以基本上是 RAM 与数据库加载速度,数据库 (sqlite3) 实际上有多好? 如果您需要更多信息,请告诉我,但不确定如何提出这样的问题...
对于 50 位玩家,我不担心提高使用普通 Sqlite3 的速度,几乎所有内容都是基于内存的。 Sqlite3 缓存最后 100 条语句(如果需要,您可以增加此值)以及 2000 个 1k size=2Mb 的页面(在您的情况下应该足够了)。您可以通过以下方式增加此值:
conn.execute("""PRAGMA cache_size = 4000""") # 4 Mb
有关详细信息,请参阅 Optimization FAQ。