我目前正在使用带有 Python 的 App Engine。
我的应用程序看起来像一个大型多人游戏。我想缩短获取“房间”中发布的最新操作所需的时间。
我已经使用 Memcache API 来存储和检索具有低写入吞吐量(每分钟 1 个)的操作。此外,我还考虑将它用于检索具有高写入吞吐量的操作(如果“房间”中有很多人,则每秒几个:例如玩家发布的消息)
您如何建议我为这种高写入吞吐量设计 memcache 存储?单个键/值对,其中 value = 最新发布的操作列表似乎不是正确的解决方案。
谢谢,
我目前正在使用带有 Python 的 App Engine。
我的应用程序看起来像一个大型多人游戏。我想缩短获取“房间”中发布的最新操作所需的时间。
我已经使用 Memcache API 来存储和检索具有低写入吞吐量(每分钟 1 个)的操作。此外,我还考虑将它用于检索具有高写入吞吐量的操作(如果“房间”中有很多人,则每秒几个:例如玩家发布的消息)
您如何建议我为这种高写入吞吐量设计 memcache 存储?单个键/值对,其中 value = 最新发布的操作列表似乎不是正确的解决方案。
谢谢,
如果没有您的应用程序的更多详细信息,很难回答这个问题。一个简单的想法是使用更多的键/值对。
例如:
# 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)
此外,您可以使用 compare 和 set 来处理并发请求。 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