2012-01-17 2 views
1

나는 현재 파이썬 앱 엔진을 사용하고 있습니다.앱 엔진 : Memcache의 디자인은 빠른 읽기 보장하고 높은 쓰기 처리량

내 응용 프로그램은 대규모 멀티 플레이어 게임 것 같습니다. "방"에 게시 된 최신 작업을 가져 오는 데 필요한 시간을 개선하고 싶습니다.

은 이미 저장하고 낮은 쓰기 처리량 (1 분마다)가 작업을 검색 할 Memcache의 API를 사용합니다.

: 게다가, 나 또한 (플레이어 출판 예를 들어 메시지은 "방"에서 많은 사람들이있는 경우 초여러) 높은 쓰기 처리량을 가지고 작업을 검색 위해 그것을 고려 중이 야 이 높은 쓰기 처리량을 위해 memcache 저장소를 설계하라는 조언을 어떻게하면 좋을까요? 값 = 최근 게시 된 작업 목록이 올바른 해결책은 아닌 것 같아 하나의 키/값 쌍입니다.

덕분에,

+1

우리의 코드보기! 우리는 당신에게 몇 가지 코드와 당신이해야 할 노력하고 특히 무엇보다 유용한 설명없이 유용한 아무것도 말할 수 없다. –

답변

2

이 응용 프로그램의 자세한 내용은없이 질문에 대답하기 어렵다. 간단한 아이디어는 더 키/값 쌍을 사용하는 것입니다. 예를 들어

:

# when write action log 
# 1. decide the prefix based on the data 
prefix = decide_prefix(action) 

# 2. random pick up a bulk for this data 
index = random.choice(range(100)) 

# 3. write action into a queue 
action_list = memceche.get("%s_%s"%(prefix, index)) 
action_list.append(action) 
memcache.set("%s_%s"%(prefix,index), action_list) 

# when read action log 
action_lists = memcache.get_multi(["%s_%s"%(prefix, k) for k in range(100)]) 

# merge all action list together. 
all_action_list = merge_action_list(action_lists) 

또한, 당신은 비교하고 동시 요청을 처리하도록 설정할 수 있습니다. http://code.google.com/appengine/docs/python/memcache/overview.html#Using_Compare_and_Set_in_Python

GAE memcahce는 자체 제한을 가지고 있으며 데이터 지속성을 보장하지 않습니다. memcache 사용량을 늘리면 더 많은 데이터가 손실 될 수 있습니다. 따라서 데이터 저장소를 사용하여 지속성 데이터를 저장해야합니다.

http://code.google.com/appengine/docs/python/memcache/overview.html#Quotas_and_Limits

+1

제안 해 주셔서 감사합니다. 그게 내가 생각한 것이지만 그것이 올바른 접근법인지는 몰랐다. 사실, 서버와 클라이언트 간의 실시간 통신을 위해 PUBNUB를 사용할 때 며칠 전에 API에 "HISTORY"기능이 있다는 것을 깨달았습니다. 나는 이미 그것을 사용하고 그것을 정말로 빨리 발견합니다. 다시 한번 감사드립니다. – Damien