Est-ce que quelqu'un sait comment supprimer tous les datastore dans Google App Engine ?
Réponses
Trop de publicités?Ajout d'une réponse sur les développements récents.
Google a récemment ajouté la fonction d'administration du datastore. Vous pouvez sauvegarder, supprimer ou copier vos entités vers une autre application en utilisant cette console.
https://developers.google.com/appengine/docs/adminconsole/datastoreadmin#Deleting_Entities_in_Bulk
Souvent, je ne veux pas supprimer tout le magasin de données, alors je retire une copie propre de /war/WEB-INF/local_db.bin du contrôle des sources. C'est peut-être juste moi, mais il semble que même avec le mode Dev arrêté, je dois physiquement supprimer le fichier avant de le retirer. Ceci sous Windows en utilisant le plugin subversion pour Eclipse.
J'étais tellement frustré par les solutions existantes pour suppression de toutes les données dans le datastore en direct que j'ai créé une petite application GAE qui peut supprimer un certain nombre de données en 30 secondes.
Comment l'installer, etc : http://code.google.com/p/xydra/wiki/GaeMyAdmin
Variation de PHP :
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
define('DATASTORE_SERVICE', DatastoreServiceFactory::getDatastoreService());
function get_all($kind) {
$query = new Query($kind);
$prepared = DATASTORE_SERVICE->prepare($query);
return $prepared->asIterable();
}
function delete_all($kind, $amount = 0) {
if ($entities = get_all($kind)) {
$r = $t = 0;
$delete = array();
foreach ($entities as $entity) {
if ($r < 500) {
$delete[] = $entity->getKey();
} else {
DATASTORE_SERVICE->delete($delete);
$delete = array();
$r = -1;
}
$r++; $t++;
if ($amount && $amount < $t) break;
}
if ($delete) {
DATASTORE_SERVICE->delete($delete);
}
}
}
Oui, cela prendra du temps et 30 secondes est une limite. Je pense mettre un échantillon d'application ajax pour automatiser au-delà de 30 secondes.