2010-11-24 4 views
1

Ich baue eine Software für eine Schule, die bei GAE gehostet wird, und ich muss die Kennung für einen neuen Schüler erstellen und sequenzieren, wenn er erstellt wird, er muss nicht wirklich der "Schlüssel" sein , aber diese Zahl muss um eins erhöht werden, jedes Mal, wenn ein neuer Schüler hinzugefügt wird, wird es die auf der Schulkarte aufgedruckte Schülerzahl sein.Google App Engine Incremental Identifier (ID)

die low level API benutzen, ich tue dies:

student = new Entity("student") 
student << params.subMap(["name", "birthdate"]) 
student.save() 

Es ist die ID zu schaffen, aber es nicht um eins erhöhen worden, es ist eine Art zufällig ist ...

Ich habe versucht, auch zu verstehen, die KeyRange, aber hat nichts daraus gemacht.

Einige Hilfe?

new Entity("student", "" + id); 

solange die id für alle Schüler einzigartig ist:

Antwort

1

Sie können einen Entity mit dem Entity(String kind, String keyName) Konstruktor erstellen.

Um einen steigenden Zähler beizubehalten, verwenden Sie einfach eine normale Datenspeicherentität, um die Anzahl zu speichern. Die Gleichzeitigkeitsschutzfunktionen des Datenspeichers (Transaktionen) gewährleisten eine sequentielle Entitätsnummerierung. Shaded Counter werden dir nicht unbedingt aufeinanderfolgende IDs geben (Danke @Nick Johnson).

Ein Weg durch Schlüsselnamen zu holen ist (von here):

DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); 
Key key = KeyFactory.createKey("student", "" + id) 
Entity entity = ds.get(key); 
+3

Ausgelagerte Leistungsindikatoren bieten keine monotonen Zunahmen - die Anzahl der Leistungsindikatoren entspricht mehr oder weniger der von App Engine intern zugewiesenen ID. Wenn es unbedingt sequentiell sein muss, ist ein standardmäßiger, nicht-sharded Zähler mit den zugehörigen Aktualisierungsratenbeschränkungen erforderlich. –

+0

@ Nick Johnson - danke. Ich werde aktualisieren. – sje397