Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sqlite的速度是否足够快,可以取代预加载到内存中的内容?_Python_Database_Memory_Sqlite - Fatal编程技术网

Python sqlite的速度是否足够快,可以取代预加载到内存中的内容?

Python sqlite的速度是否足够快,可以取代预加载到内存中的内容?,python,database,memory,sqlite,Python,Database,Memory,Sqlite,假设我有一个包含50个玩家的游戏服务器,每个玩家都有一个角色列表(从5到500个角色,一个玩家一次只能玩一个角色) 是否最好将所有字符存储到数据库中,然后当播放器连接到服务器时,立即从数据库中加载所有字符并将其存储到列表中: def on_connect(**event_args): player = Player() player.characters = load_characters(event_args['playerid']) # Load everything at

假设我有一个包含50个玩家的游戏服务器,每个玩家都有一个角色列表(从5到500个角色,一个玩家一次只能玩一个角色)

是否最好将所有字符存储到数据库中,然后当播放器连接到服务器时,立即从数据库中加载所有字符并将其存储到列表中:

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大小=2Mb的语句(在您的情况下应该足够了)。您可以使用以下方法增加此值:

conn.execute("""PRAGMA cache_size = 4000""")  # 4 Mb

有关更多详细信息,请参阅。

当预测的比例为50*500时,一切都很快。跟着你的第一本能去做,如果它看起来很慢,写几个基准测试看看哪些部分让你慢下来。也就是说,只要在给定的时间只有一个应用程序尝试访问sqlite数据库,sqlite数据库就会非常快。“sqlite是否足够快,可以替换预加载到内存中的内容?”因为您无法定义什么是“足够快”,所以应该避免过早优化,使用最方便的方法,并查看在实际使用中是否太慢。与@elyase相呼应的是,我的感觉是sqlite不会成为瓶颈(但我不同意更改缓存大小)。如果您将整个DB加载到core,您如何知道需要写回哪些位,还是只写回整个DB?这将是低效的。如果您只加载了一行(实行或虚拟行),您将确切地知道需要写入的内容。我明白您的观点,但现在请尝试从另一个角度来看,如果您的参数严格有效,那么我们将不得不减小
缓存大小。我认为这甚至可能是页面大小需要针对每个应用程序/环境进行调整。默认值是一个折衷方案,选择在所有平台上都能正常工作,但从我所看到的大多数情况来看,它从更大的平台中获益。