50 명의 플레이어가 포함 된 게임 서버가 있다고 가정 해보십시오. 각 플레이어는 5 ~ 500 자의 문자 목록을 가지고 있으며 플레이어는 한 번에 하나의 캐릭터 만 플레이 할 수 있습니다. 플레이어가 서버에 연결할 때sqlite는 메모리에 미리로드 된 내용을 대체 할 수있을만큼 빠르습니까?
가 데이터베이스에 모든 문자를 저장하기 위해 더 좋을 거라, 다음, 한 번에 데이터베이스에서 모든 문자를로드 목록에 저장할 :
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 * 500이면 모든 것이 빠릅니다. 첫 번째 본능이 무엇이든간에 무엇이든지 진행하십시오. 느린 경우 두 가지 벤치 마크를 작성하여 어떤 부분이 속도를 늦추고 있는지 확인하십시오. 즉, sqlite 데이터베이스는 주어진 시간에 하나의 응용 프로그램이 액세스하려고 시도하는 한 매우 빠릅니다. – krait
"sqlite는 메모리에 미리로드 된 내용을 대체 할만큼 빠르습니까?" "충분히 빠르다"는 것을 정의 할 수 없기 때문에 조기 최적화를 피하고, 가장 편리한 것을 사용하고, 실제 사용에서 너무 느린 지 확인해야합니다. @elyase 내 느낌을 반영하는 것은 sqlite가 병목 현상이되지 않는다는 것입니다 (그러나 캐시 크기를 변경하는 것에 동의하지 않습니다). 전체 DB를 코어에로드 한 경우 다시 쓸 필요가있는 비트를 알 수 있습니까? 아니면 전체 DB를 다시 작성 하시겠습니까? 그것은 비효율적 일 것입니다. 단일 (실제 또는 가상) 행을로드 한 경우 정확히 필요한 내용을 알 수 있습니다. – msw
당신이 가리키는 것을 보았으나 이제는 다른 방식으로 보려고합니다. 당신의 주장이 엄격히 유효하다면'cache_size'를 줄여야 할 것입니다. 나는 이것이 각각의 앱/환경을 위해 조정될 필요가있는'page_size '일지도 모른다라고 생각한다. 기본값은 모든 플랫폼에서 합리적으로 잘 작동하도록 선택한 절충안이지만 대부분의 경우에서 본 것보다 크다는 이점이 있습니다. – elyase