Ich erstelle eine Google App Engine-Anwendung (Python) und ich lerne über das allgemeine Framework. Ich habe mir das Tutorial und die Dokumentation für den NDB-Datenspeicher angeschaut, und ich habe Schwierigkeiten, mich mit den Konzepten zu beschäftigen. Ich habe einen großen Hintergrund mit SQL-Datenbanken und ich habe noch nie mit einem anderen Datenspeichersystem gearbeitet, daher denke ich, dass ich in Schwierigkeiten gerate.Einfache Erklärung von Google App Engine NDB Datenspeicher
Mein derzeitiges Verständnis ist: Der NDB-Datenspeicher ist eine Sammlung von Entitäten (analog zu DB-Datensätzen), die Eigenschaften haben (analog zu DB-Feldern/Spalten). Entitäten werden mithilfe eines Modells (analog zu einem DB-Schema) erstellt. Jede Entität hat einen Schlüssel, der beim Speichern generiert wird. Dies ist der Punkt, an dem ich Probleme bekomme, weil diese Schlüssel anscheinend keine Analogie zu SQL-Konzepten haben. Sie scheinen Primärschlüsseln für Tabellen ähnlich zu sein, aber diese sind enger an Datensätze gebunden und tatsächlich sind sie selbst Felder. Diese NDB-Schlüssel sind keine Eigenschaften von Entitäten, sondern werden als separate Objekte von Entitäten betrachtet. Wenn eine Entität im Datenspeicher gespeichert ist, können Sie diese Entität mithilfe ihres Schlüssels abrufen.
Eine meiner großen Fragen ist, wo bekommen Sie die Schlüssel dafür? Einige der Dokumente, die ich gesehen habe, zeigten Beispiele, in denen Schlüssel einfach erstellt wurden. Ich verstehe das nicht. Es scheint, dass beim Speichern von Entitäten die Methode put()
einen Schlüssel zurückgibt, der später verwendet werden kann. Wie können Sie einfach Schlüssel erstellen und Ids definieren, wenn die Originalschlüssel vom Datenspeicher generiert werden?
Eine andere Sache, mit der ich zu kämpfen habe, ist das Konzept der Abstammung mit Schlüsseln. Sie können übergeordnete Schlüssel beliebiger Art definieren. Gibt es dafür ein vordefiniertes Schema? Wenn ich beispielsweise eine Modellunterklasse namens 'Person' hatte und ich einen Schlüssel der Art 'Person' erstellt habe, kann ich diesen Schlüssel als Eltern eines anderen Typs verwenden? Wenn ich zum Beispiel einen 'Schuh'-Schlüssel als Kind eines' Personen'-Schlüssels haben möchte, könnte ich dann auch einen 'Auto'-Schlüssel erklären, um ein Kind desselben' Personen'-Schlüssels zu sein? Oder kann ich nach dem Hinzufügen der "Schuh" -Taste nicht mehr?
Ich möchte wirklich nur eine einfache Erklärung des NDB-Datenspeichers und seiner API für jemanden aus einem hauptsächlich SQL-Hintergrund.
Sie haben alles vergessen, was Sie über SQL wissen, wenn Sie über den Datenspeicher nachdenken. Der Datenspeicher speichert ganze Entitäten nach Schlüssel, einschließlich Eigenschaftsnamen. Separat erstellt es Indizes, die bestimmte Kriterien erfüllen - einige automatisch und einige manuell definiert. Lese etwas - https://developers.google.com/appengine/docs/python/datastore/entities –
Ich persönlich denke, dass es ein großer Fehler war, GQL einzubauen, weil Leute aus einem SQL-Hintergrund "select * from MyEntity" und sofort sehen fange an, in SQL zu denken. Welches ist wirklich ein Rezept für schlecht peforming Anwendungen. Das ist nur meine Meinung. –