google-app-engine-python

___ tag123googleappengine ___ Google App Engine ist eine Cloud-Computing-Technologie zum Hosten von Webanwendungen in von Google verwalteten Rechenzentren. Google App Engine ist ein Platform-as-a-Service-Angebot (PaaS) für Java, Python, Go und PHP in seiner Standardumgebung. Laufzeiten für einige andere Sprachen sowie dockerbasierte benutzerdefinierte Laufzeiten werden in der flexiblen Umgebung unterstützt. ___ tag123appenginendb ___ NDB ist eine bessere Datenspeicher-API für die Python-Laufzeit von Google App Engine. Es bietet eine verbesserte Schnittstelle zu ext.db und unterstützt die parallele Verarbeitung mit Coroutinen. ___ qstnhdr ___ Macht die automatische Verwendung des Caching in NDB, der Google App Engine-Datastore-Bibliothek für Python, das Transaktionsmodell ungültig? ___ tag123googleenginepython ___ Python-Sprachversion von Google App Engine ___ tag123googleclouddatastore ___ Google Cloud Datastore ist eine skalierbare, vollständig verwaltete NoSQL-Dokumentendatenbank für Web- und mobile Anwendungen. ___ qstntxt ___

Ein wichtiges Verkaufsargument von Google Cloud Datastore ist, dass es innerhalb eines Entitätsgruppe.

  

Cloud Datastore stellt sicher, dass Entitätssuchen nach Schlüssel- und Vorfahrenabfragen immer stark konsistente Daten erhalten.

     

[Datenspeicher ist gut für] Transaktionen, die auf ACID-Eigenschaften basieren, z. B. Geld von einem Bankkonto auf ein anderes übertragen.

Die NDB-Bibliothek ist der dokumentierte Weg, auf den Datastore von Google App Engine zuzugreifen Python.

Die NDB-Bibliothek verwendet jedoch standardmäßig das Caching , um die Ergebnisse zu beschleunigen. Die verwendeten Caches sind ein "In-Context-Cache" und Memcache . Aber keiner dieser Caches kann transaktional mit dem Datenspeicher aktualisiert werden. Es scheint also, dass wichtige Konsistenzeigenschaften aufgegeben werden müssen (Hervorhebung von mir):

  

Wenn die Transaktion festgeschrieben wird, versucht ihr Kontext , alle derartigen Entitäten aus Memcache zu löschen. Beachten Sie jedoch, dass einige Fehler diese Löschvorgänge möglicherweise verhindern.

Ist mein Verständnis davon korrekt? Das heißt, wenn die NDB-Bibliothek in der Standardkonfiguration verwendet wird, gibt es keine Konsistenzgarantie für den Zugriff selbst innerhalb einer Entitätsgruppe?

Wenn ich recht habe, ist das ein großes Problem.

Es opfert ziemlich viel die größte Eigenschaft des Datenspeichers. All diese Dokumentation über Konsistenz- und ACID-Transaktionen. In Google IO wird darüber gesprochen, wie Entitätsgruppen verwendet werden, um Konsistenz zu erzielen. Sogar Forschungsberichte. Und leise, in einer kleinen Ecke der Dokumentation, in den beiläufigsten Sätzen, lerne ich, dass ich diese Eigenschaften nicht in der Standardkonfiguration bekomme.

Das ist unglaublich irreführend. Ich bin sicher, die meisten Leute haben das nicht gesehen. Die meisten Implementierungen erwarten wahrscheinlich ACID-Transaktionen innerhalb von Entitätsgruppen, erhalten diese jedoch nicht. Dies sind schwerwiegende Fehler im Produktionscode.

Dies ist ein großer Fehler bei der Implementierung und Dokumentation. Der Standardwert sollte niemals die Konsistenz für die Geschwindigkeit beeinträchtigt haben. Konsistenz war der Kernpunkt von Unternehmensgruppen. Und wenn die Implementierung diese unerwartete Sache getan hat, die die Semantik so dramatisch verändert, dann hätte die Dokumentation es ohrenbetäubend klar machen müssen.

    
___ answer45192484 ___

Soweit ich weiß, wenn Sie Entitäten mit Transaktionen bekommen, wird der Cache nicht benutzt, so dass Sie bei Datenänderungen OK sind.

Direkte Datastore-Lesevorgänge nach Schlüssel sind konsistent. Wenn Sie also stark konsistente Ergebnisse für Lesevorgänge erhalten möchten, müssen Sie den DBB-Cache bei Bedarf deaktivieren. Andernfalls erhalten Sie eine mögliche Konsistenz, z. wenn die Cache-Invalidierung erfolgreich ist oder der Cache abläuft / gelöscht wird.

Sie können auch manuell Elemente aus dem Cache entfernen, nachdem die Transaktion mit %code% und %code% abgeschlossen wurde, um sicherzustellen, dass der Cache sauber ist.

    
___
2
Antworten

Was ist der Unterschied zwischen google.appengine.ext.ndb und gcloud.datastore?

ndb: (aus google.appengine.ext Import-NDB) Datenspeicher: (aus gcloud Datenspeicher importieren) Was ist der Unterschied? Ich habe gesehen, beide verwendet, und Hinweise, dass sie beide Daten in Google Datastore speichern. Warum gibt es zw...
11.09.2016, 23:53
1
Antwort

Macht die automatische Verwendung des Caching in NDB, der Google App Engine-Datastore-Bibliothek für Python, das Transaktionsmodell ungültig?

Ein wichtiges Verkaufsargument von Google Cloud Datastore ist, dass es innerhalb eines Entitätsgruppe.    Cloud Datastore stellt sicher, dass Entitätssuchen nach Schlüssel- und Vorfahrenabfragen immer stark konsistente Daten erhalten.     ...
11.07.2017, 20:08