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