Question

Je veux envoyer des références uniques au client afin qu'ils client peuvent se référer à des objets spécifiques. Les clés codées sont parfois AppEngine fournit 50 octets, et je probablement besoin de deux ou trois octets (je pouvais espérer le besoin de quatre ou cinq, mais ce ne sera pas pendant un certain temps!).

Envoi des touches plus grandes est en fait un coût prohibitif, puisque je pourrais transmettrai 400 références à la fois.

, je veux donc mapper ces longues clés aux touches beaucoup plus courtes. Une solution évidente consiste à stocker une correspondance dans le magasin de données, mais quand j'envoie 400 objets que je fais 400 requêtes supplémentaires, non? Peut-être que j'Atténuer la charge en gardant des copies des correspondances dans memcache ainsi. Est-il possible de mieux?

Puis-je tirer sur le nombre de clés non codée AppEngine crée et l'utiliser? Je ne ai besoin tout id-je utiliser pour être unique par type d'entité, pas à travers l'application entière.

Merci,

Riley

Était-ce utile?

La solution

clés comprennent des informations supplémentaires Datastore vous n'avez pas besoin - comme l'ID d'application. Donc, vous avez certainement pas besoin d'envoyer le ensemble des touches .

Si ces références sont à un particulier Kind dans votre magasin de données, vous pouvez le faire encore mieux et juste envoyer le key_name ou ID numérique (selon utilisez les touches). Si ce dernier est le cas, alors vous pourriez transmettre chaque touche avec seulement quelques octets (vous pouvez opter soit pour une longueur variable ou entier codant selon le longueur fixe serait plus compact pour votre cas spécifique [probablement l'ancien jusqu'à la plupart des ID que vous envoyez get assez grand]).

Lorsque vous recevez ces clés partielles retour de l'utilisateur, il devrait être facile de reconstituer la pleine clé que vous devez récupérer les entités du datastore. Si vous utilisez le moteur d'exécution Python, vous pouvez utiliser db.Key.from_path(kind_name, numeric_id_or_key_name) .

Un système comme celui-ci devrait être à la fois plus simple et (beaucoup) plus rapide que d'essayer d'utiliser le datastore / Memcache pour stocker un mappage personnalisé.

Autres conseils

Vous n'avez pas besoin d'un mécanisme de mappage personnalisé. Il suffit d'utiliser les noms de clé d'entité pour stocker votre identifiant court:

entity = MyKind(key_name=your_short_id)
entity.put()

Ensuite, vous pouvez chercher ces courts identitiers dans une requête:

keys = MyKind.all(keys_only=True).filter(...).fetch(400)
short_ids = [key.name() for key in keys]

Enfin, l'utilisation MyKind.get_by_key_name(short_id) afin de récupérer des entités d'identifiants renvoyés par vos utilisateurs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top