App Engine:如何“重置”数据存储区?

时间:2009-07-20 17:24:11

标签: google-app-engine google-cloud-datastore

好吧,我正在开发App Engine(Java),经过大量的尝试和部署后,我需要重置数据存储区。我为测试性能添加了大量随机数据,除此之外,实体也发生了很大的变化,因此我需要删除所有数据:数据,表格,索引。

我该怎么做?

15 个答案:

答案 0 :(得分:29)

很抱歉唤醒这个帖子,但万一我想为像我这样的新手添加提示(最后在google文档中找到答案):

如果要同时重置本地数据存储(例如在使用eclipse进行开发时),请关闭服务器,找到文件“ local_db.bin ”在你的项目中(应该在WEB-INF / appengine-generated /目录中),并删除它。

使用java工作正常,但还没有尝试使用python。

++

答案 1 :(得分:16)

在SQL中没有与DROP TABLE或TRUNCATE TABLE等效的内置命令。您只需在应用中创建“删除所有内容”页面,然后通过脚本重复调用该页面。在该页面中,您希望删除尽可能多的实体,但仍然可以合理地期望在请求超时之前完成。确切的代码取决于您使用的是JDO / JPA还是低级API。 (低级API会更快,因为您可以使用批处理操作。)

这个previous SO问题几乎相同,仅适用于Python

答案 2 :(得分:15)

清除开发服务器数据存储区

开发Web服务器使用本地版本的数据存储区来使用临时文件测试您的应用程序。只要存在临时文件,数据就会一直存在,除非您要求它们执行此操作,否则Web服务器不会重置这些文件。

如果您希望开发服务器在启动之前清除其数据存储区,请在启动服务器时使用--clear_datastore选项:

  

dev_appserver.py --clear_datastore   的HelloWorld /

Using the Datastore

答案 3 :(得分:9)

只需执行不带过滤器的查询来获取所有实体,然后逐个删除它们。

import javax.servlet.http.*;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;

public class MyServlet extends HttpServlet {
        public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {

        DatastoreService datastore = 
                    DatastoreServiceFactory.getDatastoreService();

    Query mydeleteq = new Query();
    PreparedQuery pq = datastore.prepare(mydeleteq);
    for (Entity result : pq.asIterable()) {
        datastore.delete(result.getKey());      
    }   
}

答案 4 :(得分:4)

很抱歉这么晚,但我只是想自己做同样的事情......

我登录了我的帐户(appengine.google.com)并找到了通过管理实用程序(datastore / dataviewer)浏览数据存储的选项...允许创建/更新/删除。

答案 5 :(得分:2)

删除应用程序数据的全部(或部分)现在是管理控制台的一部分

要启用此功能,只需在app.yaml文件中启用以下内置功能:

builtins:
- datastore_admin: on

将这些行添加到app.yaml可启用应用管理控制台中的“数据存储管理”页面

答案 6 :(得分:2)

根据GAE文档,您可以删除JDO中的多个对象,使用对象集合调用PersistenceManager的deletePersistentAll(...)方法。

PersistenceManager pm = PMF.get().getPersistenceManager();

Query query = pm.newQuery("select from " + Your.class);

List<Your> objs = (List<Your>) query.execute();

pm.deletePersistentAll(objs);

答案 7 :(得分:1)

java dev的上下文,但由于这里的文档很少,所以如何在go中执行:

keys, _ := datastore.NewQuery("").KeysOnly().GetAll(c, nil)
datastore.DeleteMulti(c, keys)

答案 8 :(得分:1)

如果您在项目中使用maven,则可以执行“mvn clean install”。那当然会在本地重置数据存储区。

答案 9 :(得分:1)

可以通过打开http://localhost:8000/datastore

来删除本地数据

答案 10 :(得分:0)

在我的情况下(使用eclipse插件和播放框架)我不得不停止应用程序,删除文件/ apps / crud-gae / tmp / datastore,然后重新启动应用程序

它对我有用......当地工作,当然......

答案 11 :(得分:0)

在本地工作时,在Windows 7上,该文件为user \ UserName \ AppData \ Local \ Temp \ dev_appserver.datastore

答案 12 :(得分:0)

我在Google Coursebuilder中使用了应用引擎,并且必须使用此命令来清除数据存储区:

python dev_appserver.py --clear_datastore /path/to/app

答案 13 :(得分:0)

添加另一些有用信息:如果使用Eclipse并且想要清除本地数据存储区,请查找此控制台信息:

INFO: Local Datastore initialized: 
Storage: C:\Users\eric\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\appname\WEB-INF\appengine-generated\local_db.bin

只有在您执行某些操作以强制进行数据存储区初始化后才显示,例如这可能是刷新管理页面上的实体列表。然后停止服务器并删除该文件,重新启动时应该看到:

INFO: The backing store, C:\Users\eric\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\appname\WEB-INF\appengine-generated\local_db.bin, does not exist. It will be created.

答案 14 :(得分:-1)

这对我不起作用。

我有一个GAE应用程序,我必须在开始时登录。

我删除了我的local_db.bin文件(我在该文件夹中有更多文件:datastore-indexes-auto.xml和local_search.bn)。我重新打开了我的项目并将其运行为。当我启动我的主.jsp时,它正在从我的数据存储区加载请求但是我的数据存储区中没有数据并且要求我提供我的PMF(持久性管理器工厂)。

我应该删除更多内容吗?

确切地说,我正在尝试打开:localhost:8888 / _ah / admin /但找不到它。

迭。