Alguém sabe como excluir todos os dados no Google App Engine ?
google-app-engine
google-cloud-datastore
Dan McGrath
fonte
fonte
/path/to/google_appengine/dev_appserver.py --clear_datastore yes myappname/
onde myappname é o diretório que contém o arquivo app.yaml do aplicativo. Você precisa fazer o cd nesse caminho do diretório. Crédito: Steven Almeroth e Melllvar para obter a resposta abaixoRespostas:
Se você estiver falando sobre o armazenamento de dados ao vivo , abra o painel do seu aplicativo (faça login no appengine) e, em seguida, armazenamento de dados -> visualizador de dados, selecione todas as linhas da tabela que deseja excluir e pressione o botão Excluir (você precisará faça isso para todas as suas tabelas). Você pode fazer o mesmo programaticamente através do remote_api (mas nunca o usei).
Se você está falando sobre o armazenamento de dados de desenvolvimento , basta excluir o seguinte arquivo: "./WEB-INF/appengine-generated/local_db.bin" . O arquivo será gerado novamente para você na próxima vez em que executar o servidor de desenvolvimento e você terá um banco de dados limpo.
Certifique-se de limpar seu projeto posteriormente.
Essa é uma das pequenas dicas úteis quando você começa a jogar com o Google Application Engine. Você se encontrará com objetos persistentes no armazenamento de dados e, em seguida, altera o modelo de objeto JDO para suas entidades persistentes, terminando com dados obsoletos que farão com que seu aplicativo falhe por todo o lugar.
fonte
A melhor abordagem é o método de API remota, conforme sugerido por Nick, ele é um engenheiro do Google App Engine , então confie nele.
Não é tão difícil de fazer, e o SDK 1.2.5 mais recente fornece o remote_shell_api.py pronto para uso. Então, faça o download do novo SDK. Em seguida, siga as etapas:
conecte o servidor remoto em sua linha de comando:
remote_shell_api.py yourapp /remote_api
O shell solicitará suas informações de login e, se autorizado, fará um shell Python para você. Você precisa configurar o manipulador de URL para / remote_api no seu app.yamlPara buscar as entidades que você deseja excluir, o código se parece com:
Atualização 2013-10-28 :
remote_shell_api.py
foi substituído porremote_api_shell.py
e você deve se conectar comremote_api_shell.py -s your_app_id.appspot.com
, de acordo com a documentação .Há um novo recurso experimental Datastore Admin , após ativá-lo nas configurações do aplicativo, você pode excluir em massa e fazer backup do armazenamento de dados pela interface da web.
fonte
A maneira mais rápida e eficiente de lidar com a exclusão em massa no Datastore é usando a nova API do mapeador anunciada na mais recente E / S do Google .
Se sua linguagem de escolha for Python , você apenas precisará registrar seu mapeador em um arquivo mapreduce.yaml e definir uma função como esta:
Em Java, você deve dar uma olhada neste artigo que sugere uma função como esta:
EDIT:
Desde o SDK 1.3.8, há um recurso de administrador do Datastore para essa finalidade
fonte
Você pode limpar o armazenamento de dados do servidor de desenvolvimento ao executar o servidor:
/path/to/dev_appserver.py --clear_datastore=yes myapp
Você também pode abreviar
--clear_datastore
com-c
.fonte
/path/to/google_appengine/dev_appserver.py --clear_datastore yes myappname/
(note o 'sim')Se você tiver uma quantidade significativa de dados, precisará usar um script para excluí-lo. Você pode usar remote_api para limpar o armazenamento de dados do lado do cliente de maneira direta.
fonte
Aqui você vai: Vá para Admin do armazenamento de dados e selecione o tipo de entidade que deseja excluir e clique em Excluir. Mapreduce cuidará da exclusão!
fonte
Existem várias maneiras de remover as entradas do armazenamento de dados do App Engine:
Primeiro, pense se você realmente precisa remover as entradas. Isso é caro e pode ser mais barato não removê-los.
Você pode excluir todas as entradas manualmente usando o administrador do armazenamento de dados.
Você pode usar a API remota e remover entradas interativamente.
Você pode remover as entradas programaticamente usando algumas linhas de código.
Você pode removê-los em massa usando as Filas de tarefas e os Cursores.
Ou você pode usar o Mapreduce para obter algo mais robusto e sofisticado.
Cada um desses métodos é explicado na seguinte postagem no blog: http://www.shiftedup.com/2015/03/28/how-to-bulk-delete-entries-in-app-engine-datastore
Espero que ajude!
fonte
A maneira de configuração zero para fazer isso é enviar uma solicitação HTTP de código arbitrário de execução para o serviço de administração que seu aplicativo em execução já possui automaticamente:
fonte
Fonte
Eu peguei isso de http://code.google.com/appengine/articles/remote_api.html .
Crie o console interativo
Primeiro, você precisa definir um console de aplicativo interativo. Portanto, crie um arquivo chamado appengine_console.py e digite o seguinte:
Crie a classe base do Mapper
Uma vez instalado, crie essa classe Mapper. Acabei de criar um novo arquivo chamado utils.py e joguei isso:
Supõe-se que o Mapper seja apenas uma classe abstrata que permite iterar todas as entidades de um determinado tipo, seja para extrair seus dados ou modificá-los e modificá-los e armazenar as entidades atualizadas no armazenamento de dados.
Corra com ele!
Agora, inicie o console interativo do mecanismo de aplicativos:
Isso deve iniciar o console interativo. Nele, crie uma subclasse de Model:
E, finalmente, execute-o (no seu console interativo): mapper = MyModelDeleter () mapper.run ()
É isso aí!
fonte
Você pode fazer isso usando a interface da web. Entre na sua conta, navegue com links no lado esquerdo. No gerenciamento de armazenamento de dados, você tem opções para modificar e excluir dados. Use as opções respectivas.
fonte
Criei um painel de suplemento que pode ser usado com seus aplicativos implantados do App Engine. Ele lista os tipos presentes no armazenamento de dados em uma lista suspensa e você pode clicar em um botão para agendar "tarefas" que excluem todas as entidades de um tipo específico ou simplesmente tudo. Você pode fazer o download aqui:
http://code.google.com/p/jobfeed/wiki/Nuke
fonte
Para Python, 1.3.8 inclui um administrador experimental embutido para isso. Eles dizem : "habilite o seguinte componente no arquivo app.yaml:"
fonte
Abra "Admin do armazenamento de dados" para seu aplicativo e ative Admin. Todas as suas entidades serão listadas com caixas de seleção. Você pode simplesmente selecionar as entidades indesejadas e excluí-las.
fonte
Isto é o que você está procurando ...
A execução de uma consulta apenas de chaves é muito mais rápida que uma busca completa, e sua cota sofrerá um impacto menor porque as consultas apenas de chaves são consideradas pequenas operações.
Aqui está um link para uma resposta de Nick Johnson descrevendo-a ainda mais.
Abaixo está uma solução de API REST de ponta a ponta para truncar uma tabela ...
Eu configurei uma API REST para lidar com transações de banco de dados nas quais as rotas são mapeadas diretamente no modelo / ação apropriado. Isso pode ser chamado digitando o URL correto (exemplo.com/inventory/truncate) e fazendo login.
Aqui está a rota:
Aqui está o manipulador:
Começa carregando o modelo dinamicamente (ou seja, Inventário encontrado em api.models) e depois chama o método correto (Inventory.truncate ()) conforme especificado no parâmetro de ação.
O @basic_auth é um decorador / wrapper que fornece autenticação para operações confidenciais (ou seja, POST / DELETE). Há também um decorador oAuth disponível se você estiver preocupado com a segurança.
Finalmente, a ação é chamada:
Parece mágica, mas na verdade é muito direta. A melhor parte é que delete () pode ser reutilizado para lidar com a exclusão de um ou muitos resultados, adicionando outra ação ao modelo.
fonte
Você pode excluir todo o armazenamento de dados excluindo todos os tipos, um por um. com o painel de instrumentos do google appengine. Por favor, siga estes passos.
para obter mais informações, consulte esta imagem http://storage.googleapis.com/bnifsc/Screenshot%20from%202015-01-31%2023%3A58%3A41.png
fonte
Se você possui muitos dados, o uso da interface da web pode levar muito tempo. O utilitário Iniciador do App Engine permite excluir tudo de uma só vez com a caixa de seleção 'Limpar armazenamento de dados ao iniciar'. Este utilitário agora está disponível para Windows e Mac (estrutura Python).
fonte
Para o servidor de desenvolvimento, em vez de executar o servidor por meio do iniciador do mecanismo de aplicativos do Google, você pode executá-lo a partir do terminal, como:
dev_appserver.py --port = [número da porta] --clear_datastore = yes [nameofapplication]
ex: meu aplicativo "reader" roda na porta 15080. Após modificar o código e reiniciar o servidor, executei "dev_appserver.py --port = 15080 --clear_datastore = yes reader".
É bom para mim.
fonte
Adicionando resposta sobre desenvolvimentos recentes.
O Google adicionou recentemente o recurso de administrador do armazenamento de dados. Você pode fazer backup, excluir ou copiar suas entidades para outro aplicativo usando este console.
https://developers.google.com/appengine/docs/adminconsole/datastoreadmin#Deleting_Entities_in_Bulk
fonte
Geralmente, não quero excluir todo o armazenamento de dados, por isso retiro uma cópia limpa do /war/WEB-INF/local_db.bin para fora do controle de origem. Pode ser apenas eu, mas parece que mesmo com o Modo Dev parado eu tenho que remover fisicamente o arquivo antes de puxá-lo. Isso está no Windows usando o plug-in subversion para Eclipse.
fonte
Variação do PHP:
Sim, isso levará tempo e 30 segundos. é um limite. Estou pensando em colocar um exemplo de aplicativo ajax para automatizar além de 30 segundos.
fonte
import
? Definindo uma constante como uma instância de objeto?fonte
Se você estiver usando o ndb, o método que funcionou para mim para limpar o armazenamento de dados:
fonte
Sorry, unexpected error: The kind "__Stat_Kind__" is reserved.
Esta parece ser appengine tem alguma entidade estatísticas interna que pode ser exposta por este método (possível bug em sua extremidade?)Para qualquer armazenamento de dados que esteja no mecanismo de aplicativos, e não local, você pode usar a nova API do armazenamento de dados . Aqui está uma cartilha de como começar .
Eu escrevi um script que exclui todas as entidades não criadas. A API está mudando rapidamente, portanto, para referência, eu a clonei em commit 990ab5c7f2063e8147bcc56ee222836fd3d6e15b
fonte
continuando a idéia do svpino, é prudente reutilizar os registros marcados como delete. (a ideia dele era não remover, mas marcar como "excluídos" registros não utilizados). um pouco de cache / memcache para lidar com a cópia de trabalho e gravar apenas a diferença de estados (antes e depois da tarefa desejada) no armazenamento de dados o tornará melhor. para grandes tarefas, é possível gravar blocos de diferença iterados no armazenamento de dados para evitar a perda de dados se o memcache desaparecer. para torná-lo à prova de perda, é possível verificar a integridade / existência de resultados armazenados em cache e reiniciar a tarefa (ou parte necessária) para repetir os cálculos ausentes. quando a diferença de dados é gravada no armazenamento de dados, os cálculos necessários são descartados na fila.
outra idéia semelhante ao mapa reduzido é dividir o tipo de entidade para vários tipos de entidades diferentes, para que seja coletado em conjunto e visível como tipo de entidade única para o usuário final. as entradas são marcadas apenas como "excluídas". quando "excluído" entradas valor por caco supera algum limite, as entradas "vivos" são distribuídos entre os outros fragmentos, e este fragmento está fechado para sempre e, em seguida, excluído manualmente do dev console (adivinhar a um custo menor)UPD: parece nenhuma tabela queda no console, exclua apenas registro por registro a preço normal.é possível excluir por consulta por blocos grandes conjuntos de registros sem gae falhar (pelo menos funciona localmente) com possibilidade de continuar na próxima tentativa quando o tempo acabar:
fonte
Para todas as pessoas que precisam de uma solução rápida para o servidor de desenvolvimento (como o tempo de escrita em fevereiro de 2016):
Isso limpará todos os dados do armazenamento de dados.
fonte
Fiquei tão frustrado com as soluções existentes para excluir todos os dados no armazenamento de dados ao vivo que criei um pequeno aplicativo GAE que pode excluir uma quantidade considerável de dados em seus 30 segundos.
Como instalar etc: https://github.com/xamde/xydra
fonte
Para java
Funciona bem no Development Server
fonte
Você tem 2 maneiras simples,
# 1: para economizar custos, exclua todo o projeto
# 2: usando ts-datastore-orm:
https://www.npmjs.com/package/ts-datastore-orm aguardam Entity.truncate (); O truncado pode excluir cerca de 1 mil linhas por segundo
fonte