Czy ktoś wie, jak usunąć cały magazyn danych w Google App Engine ?
google-app-engine
google-cloud-datastore
Dan McGrath
źródło
źródło
/path/to/google_appengine/dev_appserver.py --clear_datastore yes myappname/
gdzie myappname to katalog zawierający plik app.yaml dla aplikacji .. musisz przejść do tej ścieżki katalogu .. kredyt: Steven Almeroth i Melllvar, aby uzyskać odpowiedź poniżejOdpowiedzi:
Jeśli mówisz o żywym magazynie danych , otwórz pulpit nawigacyjny swojej aplikacji (zaloguj się do appengine), a następnie datastore -> dataviewer, wybierz wszystkie wiersze tabeli, którą chcesz usunąć i naciśnij przycisk usuwania (będziesz musiał zrób to dla wszystkich swoich tabel). Możesz zrobić to samo programowo przez remote_api (ale nigdy go nie używałem).
Jeśli mówisz o deweloperskim magazynie danych , musisz po prostu usunąć następujący plik: „./WEB-INF/appengine-generated/local_db.bin” . Plik zostanie wygenerowany ponownie, gdy następnym razem uruchomisz serwer programistyczny i będziesz mieć czystą bazę danych.
Pamiętaj, aby później wyczyścić projekt.
To jedna z małych pułapek, które przydają się, gdy zaczynasz grać z silnikiem aplikacji Google. Przekonasz się, że utrwalasz obiekty w magazynie danych, a następnie zmieniasz model obiektów JDO dla twoich trwałych encji, kończąc na przestarzałych danych, które powodują awarię aplikacji w każdym miejscu.
źródło
Najlepszym podejściem jest zdalna metoda API, zgodnie z sugestią Nicka, inżyniera App Engine z Google , więc zaufaj mu.
Nie jest to takie trudne, a najnowszy SDK 1.2.5 zapewnia plik remote_shell_api.py z półki. Więc przejdź do pobrania nowego SDK. Następnie postępuj zgodnie z instrukcjami:
podłącz zdalny serwer w linii poleceń:
remote_shell_api.py yourapp /remote_api
Powłoka zapyta o dane logowania, a jeśli zostanie autoryzowana, utworzy dla Ciebie powłokę Pythona. Musisz skonfigurować obsługę adresu URL dla / remote_api w pliku app.yamlpobierz encje, które chcesz usunąć, kod wygląda mniej więcej tak:
Aktualizacja 2013-10-28 :
remote_shell_api.py
został zastąpiony przezremote_api_shell.py
, z którym należy się połączyćremote_api_shell.py -s your_app_id.appspot.com
, zgodnie z dokumentacją .Dostępna jest nowa eksperymentalna funkcja Datastore Admin , po włączeniu jej w ustawieniach aplikacji można zbiorczo usuwać, a także tworzyć kopie zapasowe magazynu danych za pośrednictwem interfejsu internetowego.
źródło
Najszybszy i skuteczny sposób obsłużyć luzem usunąć na magazyn danych jest użycie nowego odwzorowujący API ogłoszony na najnowszej Google I / O .
Jeśli wybranym językiem jest Python , wystarczy zarejestrować program mapujący w pliku mapreduce.yaml i zdefiniować taką funkcję:
W Javie powinieneś zajrzeć do tego artykułu, który sugeruje taką funkcję:
EDYCJA:
Od SDK 1.3.8 do tego celu służy funkcja administratora Datastore
źródło
Możesz wyczyścić magazyn danych serwera deweloperskiego po uruchomieniu serwera:
/path/to/dev_appserver.py --clear_datastore=yes myapp
Można też skrócić
--clear_datastore
z-c
.źródło
/path/to/google_appengine/dev_appserver.py --clear_datastore yes myappname/
(zwróć uwagę na „tak”)Jeśli masz znaczną ilość danych, musisz użyć skryptu, aby je usunąć. Możesz jednak użyć remote_api, aby wyczyścić magazyn danych po stronie klienta w prosty sposób.
źródło
Proszę bardzo: przejdź do Datastore Admin, a następnie wybierz typ jednostki, którą chcesz usunąć, i kliknij Usuń. Mapreduce zajmie się usunięciem!
źródło
Istnieje kilka sposobów usuwania wpisów z Datastore App Engine:
Najpierw zastanów się, czy naprawdę musisz usuwać wpisy. Jest to kosztowne i może być tańsze, aby ich nie usunąć.
Możesz usunąć wszystkie wpisy ręcznie, korzystając z administratora Datastore.
Możesz użyć Remote API i interaktywnie usuwać wpisy.
Możesz usunąć wpisy programowo, używając kilku wierszy kodu.
Możesz usuwać je zbiorczo za pomocą kolejek zadań i kursorów.
Lub możesz użyć Mapreduce, aby uzyskać coś solidniejszego i bardziej wyszukanego.
Każda z tych metod została opisana w następującym wpisie na blogu: http://www.shiftedup.com/2015/03/28/how-to-bulk-delete-entries-in-app-engine-datastore
Mam nadzieję, że to pomoże!
źródło
Sposób konfiguracji zerowej polega na wysłaniu żądania HTTP z wykonaniem dowolnego kodu do usługi administratora, którą Twoja uruchomiona aplikacja ma już automatycznie:
źródło
Źródło
Mam to od http://code.google.com/appengine/articles/remote_api.html .
Utwórz konsolę interaktywną
Najpierw musisz zdefiniować interaktywną konsolę appenginge. Stwórz więc plik o nazwie appengine_console.py i wprowadź to:
Utwórz klasę bazową Mapper
Gdy to zrobisz, utwórz tę klasę Mapper. Właśnie utworzyłem nowy plik o nazwie utils.py i wrzuciłem to:
Mapper ma być po prostu klasą abstrakcyjną, która pozwala na iterację po każdej encji danego rodzaju, czy to w celu wyodrębnienia ich danych, czy też zmodyfikowania ich i przechowywania zaktualizowanych jednostek z powrotem do magazynu danych.
Biegnij z tym!
Teraz uruchom swoją interaktywną konsolę appengine:
To powinno uruchomić konsolę interaktywną. W nim utwórz podklasę Model:
I na koniec uruchom go (z interaktywnej konsoli): mapper = MyModelDeleter () mapper.run ()
Otóż to!
źródło
Możesz to zrobić za pomocą interfejsu internetowego. Zaloguj się na swoje konto, nawiguj za pomocą linków po lewej stronie. W zarządzaniu magazynem danych masz opcje modyfikacji i usuwania danych. Użyj odpowiednich opcji.
źródło
Utworzyłem panel dodatków, którego można używać z wdrożonymi aplikacjami App Engine. Zawiera listę rodzajów, które są obecne w magazynie danych na liście rozwijanej. Możesz kliknąć przycisk, aby zaplanować „zadania”, które usuwają wszystkie elementy określonego rodzaju lub po prostu wszystko. Możesz go pobrać tutaj:
http://code.google.com/p/jobfeed/wiki/Nuke
źródło
W przypadku Pythona 1.3.8 zawiera wbudowanego eksperymentalnego administratora. Oni mówią : „umożliwiają następujące polecenie wbudowane w pliku app.yaml”
źródło
Otwórz „Datastore Admin” dla swojej aplikacji i włącz Administratora. Następnie wszystkie twoje podmioty zostaną wymienione z polami wyboru. Możesz po prostu wybrać niechciane wpisy i je usunąć.
źródło
To jest to, czego szukasz ...
Wykonywanie zapytań zawierających tylko klucze jest znacznie szybsze niż pełne pobieranie, a Twój przydział będzie wymagał mniejszego działania, ponieważ zapytania zawierające tylko klucze są uważane za małe operacje.
Oto link do odpowiedzi Nicka Johnsona, opisującej to dalej.
Poniżej znajduje się kompleksowe rozwiązanie interfejsu API REST do obcinania tabeli ...
Skonfigurowałem REST API do obsługi transakcji bazy danych, w których trasy są bezpośrednio mapowane do odpowiedniego modelu / akcji. Można to wywołać, wprowadzając właściwy adres URL (example.com/inventory/truncate) i logując się.
Oto trasa:
Oto program obsługi:
Rozpoczyna się od dynamicznego załadowania modelu (tj. Inventory znalezionego w api.models), a następnie wywołuje poprawną metodę (Inventory.truncate ()) określoną w parametrze akcji.
@Basic_auth jest dekoratorem / opakowaniem, które zapewnia uwierzytelnianie wrażliwych operacji (np. POST / DELETE). Istnieje również dekorator OAuth jeśli się o bezpieczeństwo.
Wreszcie akcja nazywa się:
Wygląda to jak magia, ale w rzeczywistości jest bardzo proste. Najlepsze jest to, że metoda delete () może zostać ponownie użyta do usunięcia jednego lub wielu wyników poprzez dodanie innej akcji do modelu.
źródło
Możesz usunąć wszystkie Datastore, usuwając wszystkie rodzaje jeden po drugim. z deską rozdzielczą Google Appengine. Postępuj zgodnie z tymi krokami.
Aby uzyskać więcej informacji, zobacz ten obraz http://storage.googleapis.com/bnifsc/Screenshot%20from%202015-01-31%2023%3A58%3A41.png
źródło
Jeśli masz dużo danych, korzystanie z interfejsu internetowego może być czasochłonne. Narzędzie App Engine Launcher umożliwia usunięcie wszystkiego za jednym razem za pomocą pola wyboru „Wyczyść magazyn danych przy uruchomieniu”. To narzędzie jest teraz dostępne zarówno dla systemu Windows, jak i Mac (platforma Python).
źródło
W przypadku serwera deweloperskiego zamiast uruchamiać serwer za pośrednictwem programu uruchamiającego silnik aplikacji Google, możesz uruchomić go z terminala, na przykład:
dev_appserver.py --port = [numer portu] --clear_datastore = tak [nazwa_aplikacji]
np. „czytnik” mojej aplikacji działa na porcie 15080. Po zmodyfikowaniu kodu i ponownym uruchomieniu serwera po prostu uruchamiam „dev_appserver.py --port = 15080 --clear_datastore = yes reader”.
To jest dobre dla mnie.
źródło
Dodanie odpowiedzi o ostatnich wydarzeniach.
Firma Google niedawno dodała funkcję administratora magazynu danych. Za pomocą tej konsoli możesz tworzyć kopie zapasowe, usuwać lub kopiować swoje encje do innej aplikacji.
https://developers.google.com/appengine/docs/adminconsole/datastoreadmin#Deleting_Entities_in_Bulk
źródło
Często nie chcę usuwać całego magazynu danych, więc wyciągam czystą kopię /war/WEB-INF/local_db.bin z kontroli źródła. Może to tylko ja, ale wydaje się, że nawet po zatrzymaniu trybu deweloperskiego muszę fizycznie usunąć plik przed jego ściągnięciem. To jest w systemie Windows przy użyciu wtyczki subversion dla Eclipse.
źródło
Odmiana PHP:
Tak, zajmie to trochę czasu i 30 sekund. jest granicą. Myślę o umieszczeniu przykładowej aplikacji Ajax, aby zautomatyzować ponad 30 sekund.
źródło
import
? Definiowanie stałej jako instancji obiektu?źródło
Jeśli używasz ndb, metoda, która zadziałała w moim przypadku do czyszczenia magazynu danych:
źródło
Sorry, unexpected error: The kind "__Stat_Kind__" is reserved.
to Wygląda na to, że appengine ma jakąś wewnętrzną jednostkę statystyczną, którą można ujawnić za pomocą tej metody (możliwy błąd na ich końcu?)W przypadku dowolnego magazynu danych znajdującego się w silniku aplikacji, a nie lokalnym, możesz użyć nowego interfejsu API Datastore . Oto wprowadzenie, jak zacząć .
Napisałem skrypt, który usuwa wszystkie niewbudowane encje. Interfejs API zmienia się dość szybko, więc dla odniesienia sklonowałem go w zatwierdzeniu 990ab5c7f2063e8147bcc56ee222836fd3d6e15b
źródło
kontynuując ideę svpino, mądrze jest ponowne użycie rekordów oznaczonych jako usuń. (jego pomysłem nie było usuwanie, ale oznaczanie jako „usunięte” nieużywanych rekordów). trochę pamięci podręcznej / memcache do obsługi kopii roboczej i zapisywania tylko różnic stanów (przed i po żądanym zadaniu) do magazynu danych sprawi, że będzie lepiej. w przypadku dużych zadań możliwe jest zapisanie fragmentów zmian itermediate do magazynu danych, aby uniknąć utraty danych w przypadku zniknięcia memcache. aby zabezpieczyć go przed utratą, można sprawdzić integralność / istnienie wyników w pamięci podręcznej i ponownie uruchomić zadanie (lub wymaganą część), aby powtórzyć brakujące obliczenia. gdy różnica danych jest zapisywana w magazynie danych, wymagane obliczenia są odrzucane w kolejce.
Innym pomysłem podobnym do zredukowanej mapy jest podzielenie rodzaju obiektu na kilka różnych rodzajów obiektów, więc zostanie on zebrany razem i widoczny jako pojedynczy rodzaj elementu dla użytkownika końcowego. wpisy są oznaczone tylko jako „usunięte”. kiedy liczba "usuniętych" wpisów na fragment przekracza pewien limit, "żywe" wpisy są rozdzielane między inne fragmenty, a ten fragment jest zamykany na zawsze, a następnie usuwany ręcznie z konsoli deweloperskiej (przypuszczenie po niższym koszcie)upd: wydaje się, że nie ma drop table w konsoli, usuwaj tylko rekord po rekordzie po zwykłej cenie.możliwe jest usuwanie przez zapytanie przez fragmenty dużego zestawu rekordów bez awarii gae (przynajmniej działa lokalnie) z możliwością kontynuowania przy następnej próbie po upływie czasu:
źródło
Dla wszystkich, którzy potrzebują szybkiego rozwiązania dla serwera deweloperskiego (stan na dzień pisania w lutym 2016 r.):
Spowoduje to wyczyszczenie wszystkich danych z magazynu danych.
źródło
Byłem tak sfrustrowany istniejącymi rozwiązaniami do usuwania wszystkich danych w aktywnym magazynie danych , że stworzyłem małą aplikację GAE, która może usunąć całkiem sporo danych w ciągu 30 sekund.
Jak zainstalować itp .: https://github.com/xamde/xydra
źródło
Dla java
Działa dobrze na serwerze deweloperskim
źródło
Masz 2 proste sposoby,
# 1: Aby zaoszczędzić na kosztach, usuń cały projekt
# 2: Korzystanie z ts-datastore-orm:
https://www.npmjs.com/package/ts-datastore-orm await Entity.truncate (); Obcięcie może usunąć około 1 tys. Wierszy na sekundę
źródło