2012-01-17 38 views
1

我目前正在使用App Engine和Python。App引擎:確保快速讀取和高寫入吞吐量的Memcache設計

我的應用程序看起來像一個大型多人遊戲。我想提高獲取在「房間」發佈的最新行動所需的時間。

我已經使用Memcache API來存儲和檢索寫入吞吐量較低的操作(每分鐘1次)。此外,我還認爲它爲(如果在「房」,很多人每秒幾種:由玩家發表如消息)獲取具有高寫入吞吐量行動

你如何建議我爲這種高寫吞吐量設計memcache存儲? 其中value =最近發佈的操作列表似乎不是正確的解決方案。

感謝,

+1

向我們展示代碼!沒有一些代碼和更有用的描述你想要做什麼,我們不能告訴你任何有用的東西。 – 2012-01-18 00:19:16

回答

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 2012-01-23 11:12:18