¿Alguien sabe cómo eliminar todo el almacén de datos en Google App Engine ?
google-app-engine
google-cloud-datastore
Dan McGrath
fuente
fuente
/path/to/google_appengine/dev_appserver.py --clear_datastore yes myappname/
donde myappname es su directorio que contiene su archivo app.yaml para la aplicación ... necesita cd a esta ruta de directorio ... crédito: Steven Almeroth y Melllvar para la respuesta a continuaciónRespuestas:
Si está hablando del almacén de datos en vivo , abra el panel de su aplicación (inicie sesión en appengine), luego almacene el almacén de datos -> dataviewer, seleccione todas las filas de la tabla que desea eliminar y presione el botón Eliminar (deberá haz esto para todas tus mesas). Puede hacer lo mismo mediante programación a través de remote_api (pero nunca lo usé).
Si habla del almacén de datos de desarrollo , solo tendrá que eliminar el siguiente archivo: "./WEB-INF/appengine-generated/local_db.bin" . El archivo se generará nuevamente la próxima vez que ejecute el servidor de desarrollo y tendrá una base de datos clara.
Asegúrese de limpiar su proyecto después.
Esta es una de las pequeñas trampas que resultan útiles cuando comienzas a jugar con Google Application Engine. Te encontrarás persistiendo objetos en el almacén de datos y luego cambiando el modelo de objetos JDO para tus entidades persistentes que terminan con datos obsoletos que harán que tu aplicación se bloquee por todas partes.
fuente
El mejor enfoque es el método de API remota como lo sugiere Nick, es un ingeniero de App Engine de Google , así que confía en él.
No es tan difícil de hacer, y el último 1.2.5 SDK proporciona el remote_shell_api.py fuera de la plataforma. Así que vaya a descargar el nuevo SDK. Luego sigue los pasos:
conecte el servidor remoto en su línea de comandos:
remote_shell_api.py yourapp /remote_api
el shell le pedirá su información de inicio de sesión y, si está autorizado, creará un shell Python para usted. Necesita configurar el controlador de URL para / remote_api en su aplicación.busque las entidades que desea eliminar, el código se ve así:
Actualización 2013-10-28 :
remote_shell_api.py
ha sido reemplazado porremote_api_shell.py
, y debe conectarse conremote_api_shell.py -s your_app_id.appspot.com
, de acuerdo con la documentación .Hay una nueva función experimental de administrador de almacén de datos, después de habilitarla en la configuración de la aplicación, puede eliminar en masa y hacer una copia de seguridad de su almacén de datos a través de la interfaz de usuario web.
fuente
La forma más rápida y eficiente de manejar la eliminación masiva en Datastore es mediante el uso de la nueva API de mapeador anunciada en la última E / S de Google .
Si su idioma de elección es Python , solo tiene que registrar su mapeador en un archivo mapreduce.yaml y definir una función como esta:
En Java , debería echar un vistazo a este artículo que sugiere una función como esta:
EDITAR:
desde SDK 1.3.8, hay una función de administración del almacén de datos para este propósito
fuente
Puede borrar el almacén de datos del servidor de desarrollo cuando ejecuta el servidor:
/path/to/dev_appserver.py --clear_datastore=yes myapp
También puedes abreviar
--clear_datastore
con-c
.fuente
/path/to/google_appengine/dev_appserver.py --clear_datastore yes myappname/
(tenga en cuenta el 'sí')Si tiene una cantidad significativa de datos, debe usar un script para eliminarlos. Sin embargo, puede usar remote_api para borrar el almacén de datos del lado del cliente de una manera directa.
fuente
Aquí tiene: vaya al administrador del almacén de datos y luego seleccione el tipo de entidad que desea eliminar y haga clic en Eliminar. ¡Mapreduce se encargará de eliminar!
fuente
Existen varias formas de eliminar entradas del almacén de datos de App Engine:
Primero, piense si realmente necesita eliminar entradas. Esto es costoso y puede ser más barato no eliminarlos.
Puede eliminar todas las entradas a mano con el administrador del almacén de datos.
Puede usar la API remota y eliminar entradas de forma interactiva.
Puede eliminar las entradas mediante programación mediante un par de líneas de código.
Puede eliminarlos de forma masiva utilizando las Colas de tareas y los cursores.
O puede usar Mapreduce para obtener algo más robusto y elegante.
Cada uno de estos métodos se explica en la siguiente publicación de blog: http://www.shiftedup.com/2015/03/28/how-to-bulk-delete-entries-in-app-engine-datastore
¡Espero eso ayude!
fuente
La forma de configuración cero para hacer esto es enviar una solicitud HTTP de código arbitrario de ejecución al servicio de administración que su aplicación en ejecución ya tiene, de forma automática:
fuente
Fuente
Obtuve esto de http://code.google.com/appengine/articles/remote_api.html .
Crear la consola interactiva
Primero, debe definir una consola de anexos interactiva. Entonces, cree un archivo llamado appengine_console.py e ingrese esto:
Crear la clase base de Mapper
Una vez que esté en su lugar, cree esta clase Mapper. Acabo de crear un nuevo archivo llamado utils.py y lancé esto:
Se supone que Mapper es solo una clase abstracta que le permite iterar sobre cada entidad de un tipo dado, ya sea para extraer sus datos o para modificarlos y almacenar las entidades actualizadas nuevamente en el almacén de datos.
¡Corre con eso!
Ahora, inicie su consola interactiva appengine:
Eso debería iniciar la consola interactiva. En él crea una subclase de Modelo:
Y, finalmente, ejecútelo (desde su consola interactiva): mapper = MyModelDeleter () mapper.run ()
¡Eso es!
fuente
Puedes hacerlo usando la interfaz web. Inicie sesión en su cuenta, navegue con enlaces en el lado izquierdo. En la gestión del Almacén de datos, tiene opciones para modificar y eliminar datos. Use las opciones respectivas.
fuente
Creé un panel de complementos que se puede usar con sus aplicaciones de App Engine implementadas. Enumera los tipos que están presentes en el almacén de datos en un menú desplegable, y puede hacer clic en un botón para programar "tareas" que eliminen todas las entidades de un tipo específico o simplemente todo. Puede descargarlo aquí:
http://code.google.com/p/jobfeed/wiki/Nuke
fuente
Para Python, 1.3.8 incluye un administrador experimental incorporado para esto. Ellos dicen : "habilitar las siguientes incorporado en su archivo app.yaml:"
fuente
Abra "Datastore Admin" para su aplicación y habilite Admin. Luego, todas sus entidades se enumerarán con casillas de verificación. Simplemente puede seleccionar las entidades no deseadas y eliminarlas.
fuente
Esto es lo que estás buscando ...
Ejecutar una consulta de solo claves es mucho más rápido que una búsqueda completa, y su cuota tendrá un impacto menor porque las consultas de solo claves se consideran operaciones pequeñas.
Aquí hay un enlace a una respuesta de Nick Johnson que lo describe más a fondo.
A continuación se muestra una solución API REST de extremo a extremo para truncar una tabla ...
Configuré una API REST para manejar transacciones de bases de datos donde las rutas se asignan directamente al modelo / acción adecuado. Se puede llamar ingresando la URL correcta (example.com/inventory/truncate) e iniciando sesión.
Aquí está la ruta:
Aquí está el controlador:
Comienza cargando el modelo dinámicamente (es decir, Inventario encontrado en api.models), luego llama al método correcto (Inventory.truncate ()) como se especifica en el parámetro de acción.
@Basic_auth es un decorador / contenedor que proporciona autenticación para operaciones confidenciales (es decir, POST / DELETE). También hay un decorador oAuth disponible si le preocupa la seguridad.
Finalmente, la acción se llama:
Parece magia, pero en realidad es muy sencillo. La mejor parte es que delete () se puede reutilizar para manejar la eliminación de uno o muchos resultados agregando otra acción al modelo.
fuente
Puede eliminar todo el almacén de datos eliminando todos los tipos uno por uno. con el tablero de instrumentos google appengine. Por favor, siga estos pasos.
Para obtener más información, consulte esta imagen http://storage.googleapis.com/bnifsc/Screenshot%20from%202015-01-31%2023%3A58%3A41.png
fuente
Si tiene muchos datos, el uso de la interfaz web puede llevar mucho tiempo. La utilidad App Engine Launcher le permite eliminar todo de una vez con la casilla de verificación 'Borrar almacén de datos al iniciar'. Esta utilidad ahora está disponible para Windows y Mac (marco de Python).
fuente
Para el servidor de desarrollo, en lugar de ejecutar el servidor a través del iniciador del motor de aplicaciones de Google, puede ejecutarlo desde la terminal como:
dev_appserver.py --port = [número de puerto] --clear_datastore = yes [nameofapplication]
Ej: mi aplicación "reader" se ejecuta en el puerto 15080. Después de modificar el código y reiniciar el servidor, simplemente ejecuto "dev_appserver.py --port = 15080 --clear_datastore = yes reader".
Es bueno para mí.
fuente
Agregar respuesta sobre desarrollos recientes.
Google agregó recientemente la función de administración del almacén de datos. Puede hacer una copia de seguridad, eliminar o copiar sus entidades a otra aplicación usando esta consola.
https://developers.google.com/appengine/docs/adminconsole/datastoreadmin#Deleting_Entities_in_Bulk
fuente
A menudo no quiero eliminar todo el almacén de datos, así que saco una copia limpia de /war/WEB-INF/local_db.bin fuera del control de código fuente. Puede que solo sea yo, pero parece que incluso con el modo Dev detenido tengo que eliminar físicamente el archivo antes de extraerlo. Esto está en Windows usando el complemento de subversión para Eclipse.
fuente
Variación de PHP:
Sí, llevará tiempo y 30 segundos. Es un límite. Estoy pensando en poner una muestra de la aplicación ajax para automatizar más allá de 30 segundos.
fuente
import
? ¿Definir una constante como una instancia de objeto?fuente
Si está utilizando ndb, el método que funcionó para mí para borrar el almacén de datos:
fuente
Sorry, unexpected error: The kind "__Stat_Kind__" is reserved.
Esto parece que appengine tiene alguna entidad de estadística interna que puede ser expuesta por este método (¿posible error de su parte?)Para cualquier almacén de datos que esté en el motor de la aplicación, en lugar de local, puede usar la nueva API del almacén de datos . Aquí hay una introducción a cómo comenzar .
Escribí un script que elimina todas las entidades no integradas. La API está cambiando bastante rápido, así que para referencia, la cloné en commit 990ab5c7f2063e8147bcc56ee222836fd3d6e15b
fuente
Continuando con la idea de svpino, es aconsejable reutilizar los registros marcados como eliminar. (su idea no era eliminar, sino marcar como registros "eliminados" no utilizados). un poco de caché / memoria caché para manejar la copia de trabajo y escribir solo la diferencia de estados (antes y después de la tarea deseada) en el almacén de datos lo mejorará. Para tareas grandes es posible escribir fragmentos de diferencia inmediata en el almacén de datos para evitar la pérdida de datos si Memcache desapareció. Para que sea a prueba de pérdidas, es posible verificar la integridad / existencia de los resultados de Memcached y reiniciar la tarea (o parte requerida) para repetir los cálculos faltantes. cuando la diferencia de datos se escribe en el almacén de datos, los cálculos necesarios se descartan en la cola.
Otra idea similar al mapa reducido es dividir el tipo de entidad en varios tipos de entidad diferentes, por lo que se recopilará y será visible como un tipo de entidad única para el usuario final. las entradas solo se marcan como "eliminadas". cuando la cantidad de entradas "eliminadas" por fragmento supera algún límite, las entradas "vivas" se distribuyen entre otros fragmentos, y este fragmento se cierra para siempre y luego se elimina manualmente de la consola de desarrollo (supongo que a menor costo)upd: parece que no hay una tabla desplegable en la consola, solo elimine registro por registro a precio regular.es posible eliminar por consulta un gran conjunto de registros sin que gae falle (al menos funciona localmente) con la posibilidad de continuar en el próximo intento cuando se acabe el tiempo:
fuente
Para todas las personas que necesitan una solución rápida para el servidor de desarrollo (al momento de escribir en febrero de 2016):
Esto borrará todos los datos del almacén de datos.
fuente
Estaba muy frustrado por las soluciones existentes para eliminar todos los datos en el almacén de datos en vivo que creé una pequeña aplicación GAE que puede eliminar una gran cantidad de datos en sus 30 segundos.
Cómo instalar, etc.: https://github.com/xamde/xydra
fuente
Para java
Funciona bien en el servidor de desarrollo
fuente
Tienes 2 formas simples,
# 1: para ahorrar costos, elimine todo el proyecto
# 2: usando ts-datastore-orm:
https://www.npmjs.com/package/ts-datastore-orm await Entity.truncate (); El truncado puede eliminar alrededor de 1K filas por segundo
fuente