Adakah yang tahu cara menghapus semua datastore di Google App Engine ?
google-app-engine
google-cloud-datastore
Dan McGrath
sumber
sumber
/path/to/google_appengine/dev_appserver.py --clear_datastore yes myappname/
jalankan perintah berikut pada prompt cmd: di mana myappname adalah direktori Anda yang berisi file app.yaml Anda untuk aplikasi .. Anda perlu cd ke jalur direktori ini .. kredit: Steven Almeroth dan Melllvar untuk jawaban di bawahJawaban:
Jika Anda berbicara tentang live datastore , buka dasbor untuk aplikasi Anda (login di appengine) lalu datastore -> dataviewer, pilih semua baris untuk tabel yang ingin Anda hapus dan tekan tombol hapus (Anda harus lakukan ini untuk semua tabel Anda). Anda dapat melakukan hal yang sama secara terprogram melalui remote_api (tapi saya tidak pernah menggunakannya).
Jika Anda berbicara tentang pengembangan datastore , Anda hanya perlu menghapus file berikut: "./WEB-INF/appengine-generated/local_db.bin" . File tersebut akan dibuat untuk Anda lagi saat Anda menjalankan server pengembangan dan Anda akan mendapatkan db yang jelas.
Pastikan untuk membersihkan proyek Anda setelahnya.
Ini adalah salah satu trik kecil yang berguna saat Anda mulai bermain dengan Mesin Aplikasi Google. Anda akan mendapati diri Anda menahan objek ke dalam datastore kemudian mengubah model objek JDO untuk entitas persistable Anda yang berakhir dengan data usang yang akan membuat aplikasi Anda mogok di semua tempat.
sumber
Pendekatan terbaik adalah metode API jarak jauh seperti yang disarankan oleh Nick, dia adalah insinyur App Engine dari Google , jadi percayalah padanya.
Ini tidak terlalu sulit untuk dilakukan, dan 1.2.5 SDK terbaru menyediakan remote_shell_api.py dari rak. Jadi, unduh SDK baru. Kemudian ikuti langkah-langkahnya:
hubungkan server jarak jauh di baris perintah Anda:
remote_shell_api.py yourapp /remote_api
Shell akan meminta info login Anda, dan jika diotorisasi, akan membuat shell Python untuk Anda. Anda perlu menyiapkan penangan url untuk / remote_api di app.yaml Andaambil entitas yang ingin Anda hapus, kodenya terlihat seperti ini:
Perbarui 2013-10-28 :
remote_shell_api.py
telah diganti olehremote_api_shell.py
, dan Anda harus terhubung denganremote_api_shell.py -s your_app_id.appspot.com
, menurut dokumentasi .Ada fitur eksperimental baru Admin Datastore , setelah mengaktifkannya dalam pengaturan aplikasi, Anda dapat menghapus sekaligus mencadangkan datastore Anda melalui antarmuka web.
sumber
Cara tercepat dan efisien untuk menangani penghapusan massal di Datastore adalah dengan menggunakan API mapper baru yang diumumkan di Google I / O terbaru .
Jika bahasa pilihan Anda adalah Python , Anda hanya perlu mendaftarkan mapper Anda di file mapreduce.yaml dan mendefinisikan fungsi seperti ini:
Di Java, Anda harus melihat artikel ini yang menyarankan fungsi seperti ini:
EDIT:
Sejak SDK 1.3.8, ada fitur admin Datastore untuk tujuan ini
sumber
Anda dapat menghapus penyimpanan data server pengembangan saat Anda menjalankan server:
/path/to/dev_appserver.py --clear_datastore=yes myapp
Anda juga bisa menyingkat
--clear_datastore
dengan-c
.sumber
/path/to/google_appengine/dev_appserver.py --clear_datastore yes myappname/
(perhatikan 'ya')Jika Anda memiliki sejumlah besar data, Anda perlu menggunakan skrip untuk menghapusnya. Anda dapat menggunakan remote_api untuk menghapus datastore dari sisi klien dengan cara yang langsung.
sumber
Ini dia: Buka Admin Datastore, lalu pilih jenis Entitas yang ingin Anda hapus dan klik Hapus. Mapreduce akan menangani penghapusan!
sumber
Ada beberapa cara yang dapat Anda gunakan untuk menghapus entri dari App Engine Datastore:
Pertama, pikirkan apakah Anda benar-benar perlu menghapus entri. Ini mahal dan mungkin lebih murah untuk tidak menghapusnya.
Anda dapat menghapus semua entri dengan tangan menggunakan Admin Datastore.
Anda dapat menggunakan API Jarak Jauh dan menghapus entri secara interaktif.
Anda dapat menghapus entri secara terprogram menggunakan beberapa baris kode.
Anda dapat menghapusnya secara massal menggunakan Antrean dan Kursor Tugas.
Atau Anda dapat menggunakan Mapreduce untuk mendapatkan sesuatu yang lebih kuat dan lebih menarik.
Masing-masing metode ini dijelaskan dalam entri blog berikut: http://www.shiftedup.com/2015/03/28/how-to-bulk-delete-entries-in-app-engine-datastore
Semoga membantu!
sumber
Cara zero-setup untuk melakukan ini adalah dengan mengirim permintaan HTTP kode-arbitrer ke layanan admin yang secara otomatis sudah dimiliki oleh aplikasi Anda yang sedang berjalan:
sumber
Sumber
Saya mendapatkan ini dari http://code.google.com/appengine/articles/remote_api.html .
Buat Konsol Interaktif
Pertama, Anda perlu menentukan konsol appenginge interaktif. Jadi, buat file bernama appengine_console.py dan masukkan ini:
Buat kelas dasar Mapper
Setelah berada di tempatnya, buat kelas Mapper ini. Saya baru saja membuat file baru bernama utils.py dan melemparkan ini:
Mapper seharusnya hanya kelas abstrak yang memungkinkan Anda untuk mengulangi setiap entitas dari jenis tertentu, baik itu untuk mengekstrak datanya, atau untuk memodifikasinya dan menyimpan entitas yang diperbarui kembali ke datastore.
Jalankan dengan itu!
Sekarang, mulai konsol interaktif appengine Anda:
Itu harus memulai konsol interaktif. Di dalamnya buat subclass Model:
Dan, akhirnya, jalankan (dari konsol interaktif Anda): mapper = MyModelDeleter () mapper.run ()
Itu dia!
sumber
Anda dapat melakukannya menggunakan antarmuka web. Masuk ke akun Anda, navigasikan dengan tautan di sisi kiri. Dalam manajemen Penyimpanan Data, Anda memiliki opsi untuk mengubah dan menghapus data. Gunakan opsi masing-masing.
sumber
Saya telah membuat panel add-in yang dapat digunakan dengan aplikasi App Engine yang Anda terapkan. Ini mencantumkan jenis yang ada di datastore dalam dropdown, dan Anda dapat mengklik tombol untuk menjadwalkan "tugas" yang menghapus semua entitas dari jenis tertentu atau semuanya. Anda dapat mengunduhnya di sini:
http://code.google.com/p/jobfeed/wiki/Nuke
sumber
Untuk Python, 1.3.8 menyertakan admin eksperimental bawaan untuk ini. Mereka mengatakan : "aktifkan bawaan berikut di file app.yaml Anda:"
sumber
Buka "Admin Datastore" untuk aplikasi Anda dan aktifkan Admin. Kemudian semua entitas Anda akan dicentang dengan kotak centang. Anda cukup memilih entri yang tidak diinginkan dan menghapusnya.
sumber
Inilah yang Anda cari ...
Menjalankan kueri khusus kunci jauh lebih cepat daripada pengambilan penuh, dan kuota Anda akan lebih sedikit terkena karena kueri khusus kunci dianggap operasi kecil.
Berikut tautan ke jawaban dari Nick Johnson yang menjelaskannya lebih lanjut.
Di bawah ini adalah solusi REST API ujung ke ujung untuk memotong tabel ...
Saya menyiapkan REST API untuk menangani transaksi database di mana rute secara langsung dipetakan ke model / tindakan yang tepat. Ini dapat dipanggil dengan memasukkan url yang benar (example.com/inventory/truncate) dan masuk.
Berikut rutenya:
Inilah penangannya:
Ini dimulai dengan memuat model secara dinamis (yaitu Inventaris yang ditemukan di bawah api.models), kemudian memanggil metode yang benar (Inventory.truncate ()) seperti yang ditentukan dalam parameter tindakan.
@Basic_auth adalah dekorator / pembungkus yang menyediakan otentikasi untuk operasi sensitif (mis. POST / DELETE). Ada juga dekorator oAuth yang tersedia jika Anda mengkhawatirkan keamanan.
Akhirnya, tindakan tersebut disebut:
Ini terlihat seperti sihir tetapi sebenarnya sangat mudah. Bagian terbaiknya adalah, delete () dapat digunakan kembali untuk menangani penghapusan satu atau banyak hasil dengan menambahkan tindakan lain ke model.
sumber
Anda dapat Menghapus Semua Datastore dengan menghapus semua Jenis Satu per Satu. dengan papan dasbor google appengine. Harap ikuti Langkah-langkah ini.
untuk informasi lebih lanjut lihat gambar ini http://storage.googleapis.com/bnifsc/Screenshot%20from%202015-01-31%2023%3A58%3A41.png
sumber
Jika Anda memiliki banyak data, menggunakan antarmuka web dapat memakan waktu. The App Engine Launcher utilitas memungkinkan Anda menghapus segala sesuatu dalam satu pergi dengan 'Clear datastore pada peluncuran' kotak centang. Utilitas ini sekarang tersedia untuk Windows dan Mac (kerangka Python).
sumber
Untuk server pengembangan, alih-alih menjalankan server melalui peluncur mesin aplikasi google, Anda dapat menjalankannya dari terminal seperti:
dev_appserver.py --port = [portnumber] --clear_datastore = yes [nameofapplication]
mis .: aplikasi saya "reader" berjalan pada port 15080. Setelah memodifikasi kode dan memulai ulang server, saya hanya menjalankan "dev_appserver.py --port = 15080 --clear_datastore = yes reader".
Itu bagus untukku.
sumber
Menambah jawaban tentang perkembangan terkini.
Google baru-baru ini menambahkan fitur admin datastore. Anda dapat mencadangkan, menghapus, atau menyalin entitas Anda ke aplikasi lain menggunakan konsol ini.
https://developers.google.com/appengine/docs/adminconsole/datastoreadmin#Deleting_Entities_in_Bulk
sumber
Saya sering tidak ingin menghapus semua penyimpanan data jadi saya menarik salinan bersih /war/WEB-INF/local_db.bin dari kontrol sumber. Mungkin hanya saya tetapi tampaknya bahkan dengan Mode Dev berhenti saya harus menghapus file secara fisik sebelum menariknya. Ini ada di Windows menggunakan plugin subversi untuk Eclipse.
sumber
Variasi PHP:
Ya itu akan memakan waktu dan 30 detik. adalah batas. Saya berpikir untuk menempatkan sampel aplikasi ajax untuk mengotomatiskan lebih dari 30 detik.
sumber
import
? Mendefinisikan konstanta sebagai contoh objek?sumber
Jika Anda menggunakan ndb, metode yang berhasil untuk saya untuk membersihkan datastore:
sumber
Sorry, unexpected error: The kind "__Stat_Kind__" is reserved.
Ini sepertinya appengine memiliki beberapa entitas statistik internal yang dapat diekspos dengan metode ini (kemungkinan bug di ujungnya?)Untuk semua datastore yang menggunakan mesin aplikasi, bukan lokal, Anda dapat menggunakan API Datastore baru . Berikut adalah panduan untuk memulai .
Saya menulis skrip yang menghapus semua entitas non-built in. API berubah cukup cepat, jadi untuk referensi, saya mengkloningnya di commit 990ab5c7f2063e8147bcc56ee222836fd3d6e15b
sumber
melanjutkan gagasan svpino adalah bijaksana untuk menggunakan kembali catatan yang ditandai sebagai hapus. (idenya bukan untuk menghapus, tetapi tandai sebagai catatan yang tidak digunakan "dihapus"). sedikit cache / memcache untuk menangani copy pekerjaan dan hanya menulis perbedaan status (sebelum dan sesudah tugas yang diinginkan) ke datastore akan membuatnya lebih baik. untuk tugas-tugas besar dimungkinkan untuk menulis potongan perbedaan langsung ke datastore untuk menghindari kehilangan data jika memcache menghilang. untuk membuatnya loss-proof adalah mungkin untuk memeriksa integritas / keberadaan hasil memcache dan memulai kembali tugas (atau bagian yang diperlukan) untuk mengulangi perhitungan yang hilang. ketika perbedaan data ditulis ke datastore, perhitungan yang diperlukan dibuang dalam antrian.
Ide lain yang mirip dengan map dikurangi adalah untuk membagi jenis entitas menjadi beberapa jenis entitas yang berbeda, sehingga akan dikumpulkan bersama-sama dan terlihat sebagai jenis entitas tunggal untuk pengguna akhir. entri hanya ditandai sebagai "dihapus". ketika jumlah entri "dihapus" per pecahan mengatasi beberapa batas, entri "hidup" didistribusikan di antara pecahan lain, dan pecahan ini ditutup selamanya dan kemudian dihapus secara manual dari konsol dev (tebak dengan biaya lebih murah)upd: tampaknya tidak ada tabel drop di konsol, hanya hapus catatan-demi-catatan dengan harga reguler.adalah mungkin untuk menghapus dengan query dengan chunks set record yang besar tanpa kegagalan gae (setidaknya bekerja secara lokal) dengan kemungkinan untuk melanjutkan di percobaan berikutnya ketika waktu telah habis:
sumber
Untuk semua orang yang membutuhkan solusi cepat untuk server dev (saat penulisan pada Februari 2016):
Ini akan menghapus semua data dari datastore.
sumber
Saya sangat frustrasi dengan solusi yang ada untuk menghapus semua data di datastore langsung sehingga saya membuat aplikasi GAE kecil yang dapat menghapus cukup banyak data dalam waktu 30 detik.
Bagaimana menginstal dll: https://github.com/xamde/xydra
sumber
Untuk java
Bekerja dengan baik di Server Pengembangan
sumber
Anda memiliki 2 cara sederhana,
# 1: Untuk menghemat biaya, hapus seluruh proyek
# 2: Menggunakan ts-datastore-orm:
https://www.npmjs.com/package/ts-datastore-orm menunggu Entity.truncate (); Pemotongan dapat menghapus sekitar 1K baris per detik
sumber