Ich habe hierarchisch im Datenspeicher gespeicherten Daten mit Hilfe eines Modells, das wie folgt aussieht:Hierarchy Optimierung auf Google App Engine-Datenspeicher
class ToolCategories(db.Model):
name = db.StringProperty()
parentKey = db.SelfReferenceProperty(collection_name="parent_category")
...
...
Ich möchte alle Kategorienamen drucken, die Hierarchie zu bewahren, sagen wir in irgendeiner Form wie diese :
--Information Gathering
----OS Fingerprinting
----DNS
------dnstool
----Port Scanning
------windows
--------nmap
----DNS3
----wireless sniffers
------Windows
--------Kismet
die oben genannten tun ich einfach Rekursion unter Verwendung der Rücken Referenzierung Fähigkeit verwendet haben:
class GetAllCategories (webapp.RequestHandler) :
def RecurseList(self, object, breaks) :
output = breaks + object.name + "</br>"
for cat in object.parent_category:
output = output + self.RecurseList(cat, breaks + "--")
return output
def get (self) :
output = ""
allCategories = ToolCategories.all().filter(' parentKey = ', None)
for category in allCategories :
output = output + self.RecurseList(category, "--")
self.response.out.write(output)
Da ich sehr neu in der App-Engine-Programmierung bin (kaum 3 Tage, seit ich Code zu schreiben begann), bin ich mir nicht sicher, ob dies der optimalste Weg vom Datastore-Zugriffspunkt zum gewünschten Job ist.
Ist das der beste Weg? wenn nicht was ist?
@Jake, vielen Dank für die schnelle Annahme! Lustig, um ein Akzeptieren ohne eine Verbesserung zu bekommen, obwohl ich denke, es ist das erste Mal, dass es mir in 2 Monaten auf SO passiert ist ;-). –
Ah, ich wusste, dass upvote-less akzeptieren konnte nicht dauern ...! -) –
Danke für den Vorschlag Alex! Ich werde Änderungen vornehmen und die Join() auf der endgültigen Liste verwenden. Nur eine kurze Erläuterung benötigt: Aus Sicht eines Datenspeichers mit der Reference-Eigenschaft auf verwandte Daten zugreifen ist der schnellste Weg, um es zu tun - habe ich Recht? – MathOldTimer