Weiß jemand, wie man alle Datenspeicher in Google App Engine löscht ?
google-app-engine
google-cloud-datastore
Dan McGrath
quelle
quelle
/path/to/google_appengine/dev_appserver.py --clear_datastore yes myappname/
cmd Folgendes ein: wobei myappname Ihr Verzeichnis ist, das Ihre Datei app.yaml für die App enthält. Sie müssen in diesen Verzeichnispfad cd. Gutschrift: Steven Almeroth und Melllvar für die Antwort untenAntworten:
Wenn Sie über den Live-Datenspeicher sprechen , öffnen Sie das Dashboard für Ihre App (melden Sie sich bei Appengine an), dann Datenspeicher -> Dataviewer, wählen Sie alle Zeilen für die Tabelle aus, die Sie löschen möchten, und klicken Sie auf die Schaltfläche Löschen (Sie müssen) tun Sie dies für alle Ihre Tabellen). Sie können dasselbe programmgesteuert über remote_api tun (aber ich habe es nie verwendet).
Wenn Sie über den Entwicklungsdatenspeicher sprechen , müssen Sie nur die folgende Datei löschen: "./WEB-INF/appengine-generated/local_db.bin" . Die Datei wird beim nächsten Ausführen des Entwicklungsservers erneut für Sie generiert und Sie haben eine eindeutige Datenbank.
Stellen Sie sicher, dass Sie Ihr Projekt anschließend reinigen.
Dies ist eine der kleinen Fallstricke, die nützlich sind, wenn Sie mit der Google Application Engine spielen. Sie werden feststellen, dass Objekte im Datenspeicher persistieren und dann das JDO-Objektmodell für Ihre persistenten Entitäten ändern, was zu veralteten Daten führt, die Ihre App überall zum Absturz bringen.
quelle
Der beste Ansatz ist die von Nick vorgeschlagene Remote-API-Methode. Er ist ein App Engine- Ingenieur von Google . Vertrauen Sie ihm also.
Dies ist nicht so schwierig, und das neueste 1.2.5 SDK bietet die Datei remote_shell_api.py ab Lager. Laden Sie das neue SDK herunter. Folgen Sie dann den Schritten:
Remote-Server in Ihrer Befehlszeile verbinden:
remote_shell_api.py yourapp /remote_api
Die Shell fragt nach Ihren Anmeldeinformationen und erstellt, falls autorisiert, eine Python-Shell für Sie. Sie benötigen den Setup-URL-Handler für / remote_api in Ihrer app.yamlWenn Sie die Entitäten abrufen, die Sie löschen möchten, sieht der Code folgendermaßen aus:
Update 28.10.2013 :
remote_shell_api.py
wurde durch ersetztremote_api_shell.py
und Sie sollten sichremote_api_shell.py -s your_app_id.appspot.com
gemäß der Dokumentation mit verbinden .Es gibt eine neue experimentelle Funktion Datastore Admin . Nachdem Sie sie in den App-Einstellungen aktiviert haben, können Sie Ihren Datenspeicher über die Web-Benutzeroberfläche löschen und sichern.
quelle
Der schnellste und effizienteste Weg, um das Löschen von Massen im Datenspeicher zu handhaben, ist die Verwendung der neuen Mapper-API , die in der neuesten Google-E / A angekündigt wurde .
Wenn Ihre bevorzugte Sprache Python ist , müssen Sie Ihren Mapper nur in einer Datei mapreduce.yaml registrieren und eine Funktion wie die folgende definieren:
Unter Java sollten Sie sich diesen Artikel ansehen, der eine Funktion wie diese vorschlägt:
EDIT:
Seit SDK 1.3.8 gibt es eine Datenspeicher - Admin - Funktion für diesen Zweck
quelle
Sie können den Entwicklungsserver-Datenspeicher löschen, wenn Sie den Server ausführen:
/path/to/dev_appserver.py --clear_datastore=yes myapp
Sie können auch abkürzen
--clear_datastore
mit-c
.quelle
/path/to/google_appengine/dev_appserver.py --clear_datastore yes myappname/
Wenn Sie über eine erhebliche Datenmenge verfügen, müssen Sie ein Skript verwenden, um diese zu löschen. Sie können remote_api jedoch verwenden, um den Datenspeicher auf einfache Weise von der Clientseite zu löschen.
quelle
Los geht's: Gehen Sie zu Datastore Admin, wählen Sie den zu löschenden Entitätstyp aus und klicken Sie auf Löschen. Mapreduce kümmert sich um das Löschen!
quelle
Es gibt verschiedene Möglichkeiten, um Einträge aus dem Datenspeicher von App Engine zu entfernen:
Überlegen Sie zunächst, ob Sie wirklich Einträge entfernen müssen. Dies ist teuer und möglicherweise billiger, wenn Sie sie nicht entfernen.
Sie können alle Einträge manuell mit dem Datenspeicheradministrator löschen.
Sie können die Remote-API verwenden und Einträge interaktiv entfernen.
Sie können die Einträge programmgesteuert mit einigen Codezeilen entfernen.
Sie können sie mithilfe von Task-Warteschlangen und Cursorn in großen Mengen entfernen.
Oder Sie können Mapreduce verwenden, um etwas robusteres und schickeres zu erhalten.
Jede dieser Methoden wird im folgenden Blogbeitrag erläutert: http://www.shiftedup.com/2015/03/28/how-to-bulk-delete-entries-in-app-engine-datastore
Ich hoffe es hilft!
quelle
Die Null-Setup-Methode hierfür besteht darin, eine HTTP-Anforderung zum Ausführen eines beliebigen Codes an den Verwaltungsdienst zu senden, über den Ihre laufende App bereits automatisch verfügt:
quelle
Quelle
Ich habe das von http://code.google.com/appengine/articles/remote_api.html .
Erstellen Sie die interaktive Konsole
Zunächst müssen Sie eine interaktive Appenginge-Konsole definieren. Erstellen Sie also eine Datei mit dem Namen appengine_console.py und geben Sie Folgendes ein:
Erstellen Sie die Mapper-Basisklasse
Sobald dies geschehen ist, erstellen Sie diese Mapper-Klasse. Ich habe gerade eine neue Datei namens utils.py erstellt und diese geworfen:
Mapper soll nur eine abstrakte Klasse sein, mit der Sie jede Entität einer bestimmten Art durchlaufen können, sei es, um ihre Daten zu extrahieren oder um sie zu ändern und die aktualisierten Entitäten wieder im Datenspeicher zu speichern.
Lauf damit!
Starten Sie jetzt Ihre interaktive Appengine-Konsole:
Damit sollte die interaktive Konsole gestartet werden. Erstellen Sie darin eine Unterklasse von Modell:
Führen Sie es schließlich aus (von Ihrer interaktiven Konsole aus): mapper = MyModelDeleter () mapper.run ()
Das ist es!
quelle
Sie können dies über die Weboberfläche tun. Melden Sie sich in Ihrem Konto an und navigieren Sie mit Links auf der linken Seite. In der Datenspeicherverwaltung haben Sie Optionen zum Ändern und Löschen von Daten. Verwenden Sie die entsprechenden Optionen.
quelle
Ich habe ein Add-In-Panel erstellt, das mit Ihren bereitgestellten App Engine-Apps verwendet werden kann. Es listet die Arten auf, die im Datenspeicher in einer Dropdown-Liste vorhanden sind, und Sie können auf eine Schaltfläche klicken, um "Aufgaben" zu planen, mit denen alle Entitäten einer bestimmten Art oder einfach alles gelöscht werden. Sie können es hier herunterladen:
http://code.google.com/p/jobfeed/wiki/Nuke
quelle
Für Python enthält 1.3.8 einen experimentellen Administrator, der dafür integriert ist. Sie sagen : "Aktivieren Sie die folgende integrierte Datei in Ihrer app.yaml-Datei:"
quelle
Öffnen Sie "Datastore Admin" für Ihre Anwendung und aktivieren Sie Admin. Dann werden alle Ihre Entitäten mit Kontrollkästchen aufgelistet. Sie können einfach die unerwünschten Entites auswählen und löschen.
quelle
Das ist was Sie suchen ...
Das Ausführen einer Nur-Schlüssel-Abfrage ist viel schneller als ein vollständiger Abruf, und Ihr Kontingent wird weniger stark beeinträchtigt, da Nur-Schlüssel-Abfragen als kleine Operationen betrachtet werden.
Hier ist ein Link zu einer Antwort von Nick Johnson, die es weiter beschreibt.
Unten finden Sie eine End-to-End-REST-API-Lösung zum Abschneiden einer Tabelle ...
Ich habe eine REST-API eingerichtet, um Datenbanktransaktionen zu verarbeiten, bei denen Routen direkt dem richtigen Modell / der richtigen Aktion zugeordnet werden. Dies kann durch Eingabe der richtigen URL (example.com/inventory/truncate) und Anmelden aufgerufen werden.
Hier ist die Route:
Hier ist der Handler:
Es beginnt mit dem dynamischen Laden des Modells (dh Inventar unter api.models) und ruft dann die richtige Methode (Inventory.truncate ()) auf, wie im Aktionsparameter angegeben.
Das @basic_auth ist ein Dekorator / Wrapper, der die Authentifizierung für vertrauliche Vorgänge (dh POST / DELETE) bereitstellt. Es gibt auch einen oAuth-Dekorateur , wenn Sie sich um die Sicherheit sorgen .
Schließlich heißt die Aktion:
Es sieht aus wie Magie, ist aber eigentlich sehr einfach. Das Beste daran ist, dass delete () wiederverwendet werden kann, um das Löschen von einem oder mehreren Ergebnissen durch Hinzufügen einer weiteren Aktion zum Modell zu handhaben.
quelle
Sie können alle Datenspeicher löschen, indem Sie alle Arten einzeln löschen. mit Google Appengine Dashboard. Bitte befolgen Sie diese Schritte.
Weitere Informationen finden Sie unter Dieses Bild unter http://storage.googleapis.com/bnifsc/Screenshot%20from%202015-01-31%2023%3A58%3A41.png
quelle
Wenn Sie viele Daten haben, kann die Verwendung der Weboberfläche zeitaufwändig sein. Mit dem App Engine Launcher- Dienstprogramm können Sie alles auf einmal löschen, indem Sie das Kontrollkästchen "Datenspeicher beim Start löschen" aktivieren. Dieses Dienstprogramm ist jetzt sowohl für Windows als auch für Mac (Python-Framework) verfügbar.
quelle
Für den Entwicklungsserver können Sie den Server nicht über den Google App Engine Launcher ausführen, sondern vom Terminal aus wie folgt ausführen:
dev_appserver.py --port = [Portnummer] --clear_datastore = yes [Name der Anwendung]
Beispiel: Meine Anwendung "reader" wird auf Port 15080 ausgeführt. Nachdem Sie den Code geändert und den Server neu gestartet haben, führe ich einfach "dev_appserver.py --port = 15080 --clear_datastore = yes reader" aus.
Das ist gut für mich.
quelle
Antwort über die jüngsten Entwicklungen hinzufügen.
Google hat kürzlich die Verwaltungsfunktion für Datenspeicher hinzugefügt. Mit dieser Konsole können Sie Ihre Entitäten sichern, löschen oder in eine andere App kopieren.
https://developers.google.com/appengine/docs/adminconsole/datastoreadmin#Deleting_Entities_in_Bulk
quelle
Ich möchte oft nicht den gesamten Datenspeicher löschen, daher ziehe ich eine saubere Kopie von /war/WEB-INF/local_db.bin aus der Quellcodeverwaltung. Es mag nur ich sein, aber es scheint, dass ich die Datei auch bei gestopptem Dev-Modus physisch entfernen muss, bevor ich sie abrufe. Dies ist unter Windows mit dem Subversion-Plugin für Eclipse möglich.
quelle
PHP-Variation:
Ja, es wird einige Zeit und 30 Sekunden dauern. ist eine Grenze. Ich denke darüber nach, ein Ajax-App-Beispiel zu erstellen, um es über 30 Sekunden hinaus zu automatisieren.
quelle
import
? Eine Konstante als Objektinstanz definieren?quelle
Wenn Sie ndb verwenden, die Methode, die für mich zum Löschen des Datenspeichers funktioniert hat:
quelle
Sorry, unexpected error: The kind "__Stat_Kind__" is reserved.
Dies scheint, als ob Appengine eine interne Statistik-Entität hat, die durch diese Methode aufgedeckt werden kann (möglicher Fehler am Ende?)Für jeden Datenspeicher, der sich in der App Engine befindet und nicht lokal, können Sie die neue Datenspeicher-API verwenden . Hier ist eine Einführung für den Einstieg .
Ich habe ein Skript geschrieben, das alle nicht eingebauten Entitäten löscht. Die API ändert sich ziemlich schnell, daher habe ich sie als Referenz bei Commit 990ab5c7f2063e8147bcc56ee222836fd3d6e15b geklont
quelle
Wenn Sie die Idee von svpino fortsetzen, ist es ratsam, als gelöscht gekennzeichnete Datensätze wiederzuverwenden. (Seine Idee war nicht, nicht verwendete Datensätze zu entfernen, sondern als "gelöscht" zu markieren). Ein wenig Cache / Memcache, um die Arbeitskopie zu verarbeiten und nur unterschiedliche Status (vor und nach der gewünschten Aufgabe) in den Datenspeicher zu schreiben, macht es besser. Für große Aufgaben ist es möglich, mittlere Differenzblöcke in den Datenspeicher zu schreiben, um Datenverlust zu vermeiden, wenn der Memcache verschwindet. Um es verlustsicher zu machen, ist es möglich, die Integrität / Existenz von zwischengespeicherten Ergebnissen zu überprüfen und die Aufgabe (oder den erforderlichen Teil) neu zu starten, um fehlende Berechnungen zu wiederholen. Wenn Datenunterschiede in den Datenspeicher geschrieben werden, werden die erforderlichen Berechnungen in der Warteschlange verworfen.
Eine andere Idee, die der reduzierten Karte ähnelt, besteht darin, die Entitätsart auf mehrere verschiedene Entitätsarten aufzuteilen, sodass sie zusammen gesammelt und für den Endbenutzer als einzelne Entitätsart sichtbar wird. Einträge werden nur als "gelöscht" markiert. Wenn die Anzahl der "gelöschten" Einträge pro Shard ein bestimmtes Limit überschreitet, werden "lebendige" Einträge auf andere Shards verteilt, und dieser Shard wird für immer geschlossen und dann manuell von derEntwicklungskonsolegelöscht (zu geringeren Kosten raten).Nur Datensatz für Datensatz zum regulären Preis löschen.Es ist möglich, große Mengen von Datensätzen durch Abfrage von Chunks zu löschen, ohne dass Gae ausfällt (funktioniert zumindest lokal), und es besteht die Möglichkeit, beim nächsten Versuch fortzufahren, wenn die Zeit abgelaufen ist:
quelle
Für alle Personen, die eine schnelle Lösung für den Entwicklungsserver benötigen (zum Zeitpunkt des Schreibens im Februar 2016):
Dadurch werden alle Daten aus dem Datenspeicher gelöscht.
quelle
Ich war so frustriert über vorhandene Lösungen zum Löschen aller Daten im Live-Datenspeicher, dass ich eine kleine GAE-App erstellt habe, mit der innerhalb von 30 Sekunden eine ganze Menge Daten gelöscht werden können.
So installieren Sie usw .: https://github.com/xamde/xydra
quelle
Für Java
Funktioniert gut in Development Server
quelle
Sie haben zwei einfache Möglichkeiten:
# 1: Um Kosten zu sparen, löschen Sie das gesamte Projekt
# 2: Verwenden von ts-datastore-orm:
https://www.npmjs.com/package/ts-datastore-orm warten auf Entity.truncate (); Durch das Abschneiden können ca. 1 KB Zeilen pro Sekunde gelöscht werden
quelle