假设我有一个游戏服务器,其中包含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)有多好? 如果您需要更多信息,请告诉我,不知道如何提出这样的问题......
答案 0 :(得分:2)
对于50名玩家,我不担心提高使用普通Sqlite3的速度,几乎所有内容都将基于内存。 Sqlite3缓存最后100个语句(如果需要可以增加此值)以及2000页1k大小= 2Mb(在您的情况下应该足够)。您可以使用以下方法增加此值:
conn.execute("""PRAGMA cache_size = 4000""") # 4 Mb
有关详细信息,请参阅Optimization FAQ。