Google app engine 应用程序引擎:如何;重置";数据存储?

Google app engine 应用程序引擎:如何;重置";数据存储?,google-app-engine,google-cloud-datastore,Google App Engine,Google Cloud Datastore,我正在开发应用程序引擎(Java),经过多次尝试和部署后,我需要重置数据存储。为了测试性能,我添加了很多随机数据,而且实体也发生了很多变化,所以我需要删除所有数据、表和索引 我如何才能做到这一点?在SQL中没有与DROP TABLE或TRUNCATE TABLE等效的内置命令。您只需在应用程序中创建一个“删除所有内容”页面,然后通过脚本反复调用该页面。在该页面中,您希望在请求超时之前删除尽可能多的实体。确切的代码取决于您使用的是JDO/JPA还是低级API。(由于可以使用批处理操作,因此低级AP

我正在开发应用程序引擎(Java),经过多次尝试和部署后,我需要重置数据存储。为了测试性能,我添加了很多随机数据,而且实体也发生了很多变化,所以我需要删除所有数据、表和索引


我如何才能做到这一点?

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


这个问题几乎是一样的,只是对Python来说很抱歉这么晚才回答,但我只是想自己也这么做

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

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

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

builtins:
- datastore_admin: on

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

根据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);
PersistenceManager pm=PMF.get().getPersistenceManager();
Query Query=pm.newQuery(“从“+Your.class”中选择);
List objs=(List)query.execute();
pm.deletePersistentAll(objs);

很抱歉唤醒了这个帖子,但为了以防万一,我想为像我这样的noobs添加一个提示(最终在谷歌文档中找到了答案):

如果要一次性重置本地数据存储(例如,在使用eclipse开发时),请关闭服务器,在项目中找到文件“Local_db.bin”(应位于WEB-INF/appengine generated/目录中),然后将其删除

可以很好地使用java,但还没有尝试使用python


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

开发web服务器使用本地版本的数据存储来测试应用程序,使用临时文件。只要临时文件存在,数据就会一直存在,并且web服务器不会重置这些文件,除非您要求它这样做

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

dev_appserver.py--清除数据存储 地狱世界/

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


它对我有用。。。当然,在本地工作…

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

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());      
    }   
}

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

我在Google Coursebuilder上使用app engine,必须使用此命令清除数据存储:

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

脱离java开发的上下文,但由于文档很少,下面介绍如何在go中实现:

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

如果在项目中使用maven,只需执行“mvn干净安装”。当然,这将在本地重置数据存储。

删除本地数据可以通过打开添加另一点有用信息来完成:如果使用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.

我用的是JPA。这也会删除索引吗?每次删除某些内容时,索引都需要更新,否则使用索引的查询将返回错误数据。因此,当您删除实体X时,所有指向X的索引项也应该被删除。最终,当您删除所有实体时,您将拥有空索引。首先使用appcfg删除索引是一个好主意-它将使删除过程更快,并使其消耗更少的CPU更新索引,而您无论如何都要删除这些索引。如果您在URL中调整限制=20,则可以提高该限制。在我的例子中,增加到100,让我在几个请求中删除一块数据(并节省我编写一个工具/页面来执行此操作)。当在本地嵌入数据存储时,这非常有用,而不需要真正启动serverPut数据存储。delete(result.getKey());在try/catch(IllegalArgumentException e){}中,为了避免以uuuu开头和结尾的键名被保留并且不能被删除,我知道这是非常旧的线程,但是无论如何,在GoogleAppEngineLauncher的“应用程序设置”菜单中还有一个复选框“启动时清除数据存储”。至少在Mac OS XI的1.8.8版中,如果您在Mac上,可能需要使用
--clear\u datastore=1
.Intellij path:PROJECT\u ROOT\out\artifacts\PROJECT\u NAME\u war\u explodesd\WEB-INF\appengine generated\local\u db.bin这是本地开发的正确答案。目前在GCE中,您应该使用Datastore Admin,它允许您删除一个或多个表。