2012-01-17 1 views
1

J'utilise actuellement App Engine avec Python.App Engine: conception Memcache pour assurer une lecture rapide et un débit d'écriture élevé

Mon application ressemble à un jeu multijoueur . Je voudrais améliorer le temps nécessaire pour aller chercher les dernières actions publiées dans une "salle".

J'utilise déjà l'API Memcache pour stocker et récupérer des actions qui ont un faible débit d'écriture (1 toutes les minutes). D'ailleurs, je considère aussi pour récupérer des actions qui ont un débit élevé d'écriture (plusieurs par seconde s'il y a beaucoup de gens dans la « chambre »: par exemple messages publiés par les joueurs)

Comment me conseilleriez-vous de concevoir le stockage memcache pour ce débit d'écriture élevé? Une seule paire clé/valeur où value = une liste des dernières actions publiées ne semble pas être la bonne solution.

Merci,

+1

Montrez-nous le code! Nous ne pouvons pas vous dire quoi que ce soit d'utile sans un code et une description plus utile de ce que vous essayez de faire. –

Répondre

2

Il est difficile de répondre à la question sans plus de détails sur votre demande. Une idée simple est d'utiliser plus de paire clé/valeur.

Par exemple:

# 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) 

De plus, vous pouvez utiliser comparer et mettre à gérer la demande simultanée. GAE memcahce a sa propre limite et ne garantit pas la persistance des données. Augmenter l'utilisation de memcache peut produire plus de données perdues. Ainsi, vous devez toujours utiliser le magasin de données pour enregistrer les données de persistance.

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

+1

Merci pour votre suggestion. C'est ce que je pensais mais je ne savais pas si c'était une approche correcte. En fait, comme j'utilise PUBNUB pour la communication en temps réel entre le serveur et les clients, j'ai réalisé il y a quelques jours qu'ils avaient une fonction "HISTORY" dans leur API. Je l'utilise déjà et je le trouve très vite. Merci encore. – Damien

Questions connexes