Frage

Ich möchte so eindeutige Hinweise auf den Client senden, dass sie Client wieder auf bestimmte Objekte beziehen. Die codierten Schlüssel appengine bietet, sind manchmal 50 Bytes lang, und ich wahrscheinlich nur noch zwei oder drei Bytes (I Bedarf vier oder fünf hoffen konnte, aber das wird nicht für eine Weile!).

die größeren Tasten Senden ist eigentlich zu teuer, da ich zu einem Zeitpunkt 400 Referenzen Senden werden könnte.

Also, ich möchte zu viel kürzere Schlüssel diese langen Schlüssel kartieren. Eine naheliegende Lösung ist eine Zuordnung in dem Datenspeicher zu speichern, aber dann, wenn ich schicke 400 Objekte mir 400 zusätzliche Abfragen zu tun, nicht wahr? Vielleicht mildern ich die Kosten durch Kopien der Zuordnungen in memcache als auch zu halten. Gibt es einen besseren Weg?

Kann ich riss nur die Nummer aus den nicht codierten Schlüsseln, dass appengine erzeugt und Verwendung das? Ich nur Notwendigkeit, was id ich pro Einheit Art einzigartig sein verwenden, nicht über die gesamte App.

Danke,

Riley

War es hilfreich?

Lösung

Datastore-Tasten sind unter anderem zusätzliche Informationen, die Sie nicht brauchen - wie die App-ID. So dass Sie auf jeden Fall brauchen nicht die gesamte senden Tasten.

Wenn diese Verweise auf eine bestimmte Art in Ihrem Datenspeicher sind, dann können Sie besser selbst und senden Sie einfach die key_name oder numerische ID (je nachdem, was Ihre Schlüssel verwenden). Wenn letzteres der Fall ist, dann könnte man jede Taste mit nur wenigen Bytes übertragen (Sie entweder für ein variabler Länge oder fester Länge ganze Zahl kodiert, je nachdem, welche für Ihren speziellen Fall kompakter wäre entscheiden könnte [vermutlich der ehemalige bis die meisten der IDs, die Sie bekommen ziemlich groß] sind zu senden).

Wenn Sie diese Teilschlüssel wieder vom Benutzer erhalten, sollte es leicht sein, den vollständigen Schlüssel zu rekonstruieren, die Sie die Einheiten aus dem Datenspeicher abgerufen werden müssen. Wenn Sie die Python-Laufzeit verwenden, könnten Sie db.Key.from_path(kind_name, numeric_id_or_key_name) .

Ein Schema wie dies sollte einfacher und (viel) schneller als den Versuch, den Datenspeicher zu verwenden / memcache eine benutzerdefinierte Zuordnung zu speichern.

Andere Tipps

Sie keine benutzerdefinierte Mapping-Mechanismus benötigen. Verwenden Sie einfach Entitätsschlüssel Namen speichern Sie Ihre Kurzbezeichnung:

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

Dann können Sie diese kurzen identitiers in einer Abfrage holen:

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

Schließlich Verwendung MyKind.get_by_key_name(short_id) um Einheiten von Identifikatoren abzurufen gesendet, die Ihre Nutzer zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top