Ist GQL für jemanden, der SQL kennt, leicht zu erlernen? Wie ist Django / Python? Macht App Engine das Skalieren wirklich einfach? Gibt es einen eingebauten Schutz gegen "GQL-Injektionen"? Und so weiter ...
Ich würde gerne die nicht so offensichtlichen Höhen und Tiefen der App-Engine hören.
Prost!
Das eklatanteste und frustrierendste Problem ist der Datenspeicher-API, der gut aussieht und leicht zu bedienen ist, wenn Sie mit SQL vertraut sind, aber eine Zeilenbegrenzung von 1000 für alle Abfrageergebnissätze hat. t Zugriff zählt oder Offsets darüber hinaus. Ich bin in verrücktere Probleme geraten, die Daten für ein Modell nicht wirklich hinzufügen oder darauf zugreifen können, wenn es über 1000 Zeilen hinausgeht.
Weitere Informationen finden Sie in der Stack Overflow-Diskussion über das Limit von 1000 Zeilen
Aral Balkan schrieb eine wirklich gute Zusammenfassung dieser und anderer Probleme
Nachdem das gesagt wurde, ist die App-Engine ein wirklich großartiges Werkzeug, das ich zur Verfügung habe, und es macht mir wirklich Spaß, damit zu arbeiten. Es ist perfekt für die Bereitstellung von Micro-Web-Services (zB: json api), die in anderen Apps verwendet werden können.
Meine Erfahrung mit der Google App Engine war großartig, und das 1000 Ergebnislimit wurde entfernt , hier ist ein Link zu den Versionshinweisen:
Keine 1000 Ergebnisgrenze mehr - Das ist rechts: mit Zusatz von Cursors und der Höhepunkt von vielen kleineren Datenspeicherstabilität und -leistung Verbesserungen in den letzten Monaten, Wir sind jetzt selbstsicher genug, um sie zu entfernen die maximale Ergebnisgrenze insgesamt. Egal, ob du fetchst, Iterieren oder einen Cursor verwenden, gibt es keine Begrenzung der Anzahl der Ergebnisse.
GQL ist extrem einfach - es ist eine Teilmenge der SQL 'SELECT' Anweisung, nichts mehr. Es handelt sich jedoch nur um eine Convenience-Schicht über den unteren APIs, und das gesamte Parsen wird in Python durchgeführt.
Stattdessen empfehle ich die Verwendung der Abfrage-API, die prozedural ist, keine Laufzeitanalyse erfordert und "GQL-Injection" -Verstöße unmöglich macht (obwohl sie in richtig geschriebener GQL sowieso unmöglich sind). Die Abfrage-API ist sehr einfach: Rufen Sie .all () für eine Model-Klasse auf oder rufen Sie db.Query (Modellname) auf. Das Query-Objekt hat die Methoden .filter (field_and_operator, value), .order (field_and_direction) und .ancestor (entity), zusätzlich zu allen Einrichtungen, die GQL-Objekte haben (.get (), .fetch (), .count ()) usw.) Jede der Query-Methoden gibt zur Vereinfachung das Query-Objekt selbst zurück, sodass Sie sie verketten können:
results = MyModel.all (). filter ("foo=", 5) .order ("- bar"). fetch (10)
Entspricht:
results = MyModel.gql ("WHERE foo = 5 ORDER BY bar DESC LIMIT 10") .fetch ()
Ein großer Nachteil bei der Arbeit mit AppEngine war das 1k-Abfrage-Limit, das bereits in den Kommentaren erwähnt wurde. Was ich jedoch nicht erwähnt habe, ist die Tatsache, dass es eine eingebaute sortierbare Reihenfolge gibt, mit der Sie dieses Problem umgehen können. Aus dem Appengine Kochbuch:
%Vor%Mit dem obigen Code zusammen mit der Remote-API (siehe dieser Artikel ) können Sie so viele Entitäten abrufen wie du brauchst.
Sie können den obigen Code wie folgt verwenden:
%Vor%Am Anfang hatte ich die gleiche Erfahrung wie andere, die von SQL zu GQL übergegangen sind - irgendwie komisch, um nicht in der Lage zu sein, JOINs zu machen, mehr als 1000 Zeilen zu zählen, usw. Jetzt, wo ich für ein paar damit gearbeitet habe Monate liebe ich absolut die App-Engine. Ich portiere alle meine alten Projekte darauf.
Ich benutze es, um mehrere Webanwendungen mit hohem Datenaufkommen zu hosten (zu Spitzenzeiten erhält einer von ihnen 50k Zugriffe pro Minute.)
Google App Engine verwendet keine tatsächliche Datenbank und verwendet offenbar eine Art verteilte Hash-Map. Dies wird sich für verschiedene Verhaltensweisen eignen, die Leute, die mit SQL vertraut sind, einfach nicht sehen werden. So wird zum Beispiel erwartet, dass ein COUNT von Elementen in regulärem SQL eine schnelle Operation ist, aber mit GQL wird es einfach nicht funktionieren.
Hier sind einige weitere Probleme:
In meiner persönlichen Erfahrung ist es eine Anpassung, aber die Lernkurve ist in Ordnung.
Tags und Links google-app-engine gql