Frage

Ich entwickle Software der Google App Engine.

Ich habe einige Überlegungen über die optimale Gestaltung in Bezug auf die folgende Frage: Ich brauche Schnappschüsse von einigen Einheiten in regelmäßigen Abständen erstellen und speichern

.

in der herkömmlichen relationalen db Welt, würde ich db Arbeitsplätze schaffen, die neue Zusammenfassung Datensätze einfügen würde.

würde beispielsweise ein Job einen Datensatz für jeden aktiven Benutzer einfügen, der seine aktuelle Punktzahl in der „userrank“ Tabelle enthalten würde, sagen wir, jede Stunde.

Ich würde gerne wissen, was die beste Methode ist das in Google App Engine zu erzielen. Ich weiß, dass es der Cron-Dienst ist, aber ist es uns erlauben, Aufträge auszuführen, die Tausende von Datensätzen wird insert / update?

War es hilfreich?

Lösung

Haben Sie darüber nachgedacht, mit dem remote api statt? Auf diese Weise könnten Sie eine Shell zu Ihrem Datenspeicher erhalten und die Timeouts zu vermeiden. Die Mapper Klasse, die sie in dieser Verbindung zeigen, ist sehr nützlich und ich habe es erfolgreich verwendet, um Batch-Operationen auf ~ 1500 Objekte zu tun.

Das heißt, cron sollte auch gut funktionieren. Sie tun auf dem Zeitpunkt jeder einzelnen Anforderung eine Grenze haben, so dass Sie nicht nur durch sie alle auf einmal zu kauen, aber Sie können Umleitung Schleife über so viele Nutzer verwenden, wie Sie wollen, Verarbeitung ein Benutzer zu einem Zeitpunkt. Es sollte irgendwo in der Dokumentation ein Beispiel dafür sein, wenn Sie mit diesem Ansatz der Hilfe benötigen.

Andere Tipps

Ich glaube, Sie werden feststellen, dass jeder Staat des Benutzers Snapshot- jede Stunde ist nicht etwas, das gut, egal skaliert, was Ihr Rahmen. Eine gewöhnliche Umgebung wird dies verschleiern, indem wir dir längere Lauf Aufgaben hast, aber Sie werden immer noch den Punkt erreichen, an dem es nicht praktisch ist eine Momentaufnahme eines jeden Benutzers Daten zu nehmen, jede Stunde.

sei Mein Vorschlag dazu: Add ‚letzten Snapshot‘ Feld und Unterklasse die Put () Funktion des Modells (vorausgesetzt, Sie Python verwenden, das gleiche in Java möglich ist, aber ich weiß nicht, die Syntax ), so dass, wenn Sie einen Datensatz aktualisieren, überprüft er, ob es seit dem letzten Snapshot mehr als eine Stunde gewesen ist, und wenn ja, erzeugt und schreibt einen Snapshot Datensatz.

Um gleichzeitige Aktualisierungen Erstellen von zwei identische Schnappschüsse zu verhindern, möchten Sie die Schnappschüsse einen Schlüsselnamen aus der Zeit abgeleitet geben, an dem der Snapshot erstellt wurde. Auf diese Weise, wenn zwei gleichzeitige Updates versuchen, einen Snapshot zu schreiben, wird man überbrückt die andere überschreibt.

Um den Schnappschuss für eine bestimmte Stunde zu bekommen, einfach abfragen, für die älteste Snapshot neuer als die entsprechenden Zeitraum. Als zusätzlichen Bonus, da inaktive Datensätze nicht Snapshot von ihr erstellt werden, sind Sie viel Platz sparend, auch.

würde ich eine Kombination von Cronjobs verwenden und eine Looping-URL holen Methode detailliert hier: http: // stage.vambenepe.com/archives/549 . Auf diese Weise können Sie Ihre Timeouts und beginnen eine weitere Anforderung fangen.

den Artikel Zusammenfassend der cron-Job ruft Ihren ersten Prozess, fangen Sie die Timeout-Fehler und rufen Sie erneut den Prozess, als eine zweite URL maskieren. Sie müssen zwischen zwei URLs anpingen App Engine zu verhindern, denken Sie in einer zufälligen Schleife sind. Sie müssen auch vorsichtig sein, dass man unendlich nicht Schleife tun. Stellen Sie sicher, dass es einen Endzustand für Ihre Update-Schleife, da diese Sie über Ihre Quoten setzen würde ziemlich schnell, wenn es nie zu Ende.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top