1

現在、Python で App Engine を使用しています。

私のアプリケーションは大規模なマルチプレイヤー ゲームのように見えます。「ルーム」で公開された最新のアクションを取得するのに必要な時間を改善したいと考えています。

私はすでに Memcache API を使用して、書き込みスループットが低いアクション (毎分 1 回) を保存および取得しています。さらに、書き込みスループットが高いアクションを取得することも検討しています( 「部屋」に多くの人がいる場合は、1 秒あたり数回:プレイヤーによって公開されたメッセージなど) 。

この高い書き込みスループットのために memcache ストレージを設計する方法を教えてください。値が最新の公開されたアクションのリストである単一のキーと値のペアは、適切なソリューションとは思えません。

ありがとう、

4

1 に答える 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)

さらに、compare and 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

于 2012-01-17T21:57:10.280 に答える