2010-04-01 7 views
21

Wie viele Zeichen können maximal zum Definieren des Schlüsselnamens einer Datenspeicherentität verwendet werden?Wie lange (max. Zeichen) kann eine Datenspeicherentität Schlüsselname sein? Ist es schlimm, sehr lange key_names zu haben?

Ist es schlecht, sehr lange key_names zu haben?

Zum Beispiel: Nehmen wir an, wir verwenden key_names eines 170 Zeichen, das ist die Länge einer Twitter-Nachricht 140 plus 10 numerische Zeichen für den Breitengrad und 10 für Longtitude und 10 für einen Zeitstempel.

(Reasoning eines solchen key_name: Also durch eine solche key_name verwenden, können wir einfach und schnell von keine doppelten Buchungen sicher sein, da die gleiche Nachricht nicht aus dem gleichen Ort und Zeit mehr als einmal kommen sollte.)

+0

ich einen anderen Grund für die Verwendung langer Tasten Namen hinzufügen können. Einer meiner Datentypen stellt eine Beziehung zwischen zwei anderen Entitäten (beliebigen Typs) dar, und der Schlüsselname meiner Entitäten sind die zwei codierten Schlüssel mit einem Unterstrich in der Mitte. Wenn die Entitäten Eltern (und Großeltern usw.) haben, können die Schlüssel ziemlich lang werden. – yngling

Antwort

11

Es gibt kein festes Maximum - die maximale Länge eines Schlüsselnamens ist die maximale Länge eines Schlüssels, weniger Aufwand, und Schlüssel können ziemlich lang werden.

Es ist jedoch schlecht, sehr lange Schlüsselnamen zu haben: Abgesehen vom Speichern und Abrufen enthält jeder Indexeintrag den Schlüsselnamen, auf den er sich bezieht, sodass längere Schlüsselnamen einen höheren Indexierungsaufwand bedeuten. Wenn Sie die Eindeutigkeit für einen großen Text sicherstellen möchten, besteht die beste Option darin, den Schlüsselnamen als MD5- oder SHA1-Summe der Eingabe zu definieren, wodurch sowohl die Eindeutigkeit als auch ein kurzer (-ish) Schlüsselname gewährleistet wird.

+2

Nun, im Allgemeinen keine Hashing - noch MD5, noch SHA1 kann Einzigartigkeit gewährleisten. Praktisch gesprochen - Sun wird früher explodieren, als Sie eine Kollision dieser Hashes bekommen. –

41

Tatsächlich sind Schlüsselnamen wie Zeichenfolgeneigenschaftswerte auf 500 Zeichen beschränkt. siehe z.B. Key.to_path(), die ValidateString() ruft:

http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/api/datastore_types.py#413

die standardmäßig max_len-_MAX_STRING_LENGTH, die 500:

http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/api/datastore_types.py#87

+0

Ist das für ndb wahr? Was ist mit Java und gehen? Ich vermute, dass Nicks Antwort im Backend korrekt ist - es ist nur die Software, die dieses Limit auferlegt. – mjibson

+0

Iirc das Backend erzwingt das gleiche Limit. (Ich schrieb viel davon, aber das war vor einer Weile, und ich habe keinen Zugriff auf den Code mehr.: P) auf jeden Fall ist es einfach zu überprüfen, indb, gehen usw. – ryan

+1

Nur um zu bestätigen in der Gegenwart, was @ryan gesagt hat, gilt immer noch für die Validierung im Backend. –