Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 带JDO的Google数据存储:访问时间?_Performance_Google App Engine_Google Cloud Datastore_Jdo - Fatal编程技术网

Performance 带JDO的Google数据存储:访问时间?

Performance 带JDO的Google数据存储:访问时间?,performance,google-app-engine,google-cloud-datastore,jdo,Performance,Google App Engine,Google Cloud Datastore,Jdo,当我通过JDO从google数据存储中提取数据时,我遇到了(在我看来)奇怪的行为。特别是,查询执行速度很快(比如100毫秒),但查找结果列表的大小大约需要一秒钟!事实上,我试图对结果列表执行的任何操作都需要大约一秒钟的时间。有人见过这种行为吗?这是预期的吗?不寻常?有办法吗 PersistenceManager pm = PMF.getPersistenceManager(); Query q = pm.newQuery("select from " + Person.class.getName

当我通过JDO从google数据存储中提取数据时,我遇到了(在我看来)奇怪的行为。特别是,查询执行速度很快(比如100毫秒),但查找结果列表的大小大约需要一秒钟!事实上,我试图对结果列表执行的任何操作都需要大约一秒钟的时间。有人见过这种行为吗?这是预期的吗?不寻常?有办法吗

PersistenceManager pm = PMF.getPersistenceManager();
Query q = pm.newQuery("select from " + Person.class.getName());
System.out.println("getting all at " + System.currentTimeMillis());
mcs = (List<Person>) q.execute();
System.out.println("got all at " + System.currentTimeMillis());
int size = mcs.size();
System.out.println("size was " + size + " at " + System.currentTimeMillis());
PersistenceManager pm=PMF.getPersistenceManager();
Query q=pm.newQuery(“从“+Person.class.getName()中选择”);
System.out.println(“获取全部”+System.currentTimeMillis());
mcs=(List)q.execute();
System.out.println(“在”+System.currentTimeMillis()上获得全部数据);
int size=mcs.size();
System.out.println(“大小为”+System.currentTimeMillis()处的“+size+”);
拨打1271549139441获取所有信息
在1271549139578获得所有信息
大小为850,为1271549141071

-B

调用execute()执行查询,但不返回所有结果-在访问列表时根据需要获取结果。调用.size()需要数据存储获取并计算所有结果,这是一个非常低效的操作

谢谢你,尼克。你能给我指一个能更详细地解释这种行为的资源吗?特别是,我很好奇是什么触发了到数据库服务器的往返通信,以及在本地执行了什么。另外,这是否意味着在一个非常小的表中提取850行需要整整1.6秒?不幸的是,我不知道当前有任何文档详细介绍JDO或JPA如何进行数据库调用。就运行时而言,这在很大程度上取决于您的模型—它有多大以及有多少字段—因为反序列化时间很容易超过数据库往返时间。此外,执行查询所需的时间并不取决于表的大小,而只取决于结果集的大小。你通常应该构造你的应用程序,这样它只获取用户将看到的结果。我的模型非常简单,只有一个长键、三个枚举字段、一个双精度键和两个字符串。遗憾的是,我正在显示一个所有实体的列表,供用户查看:-(为什么不对列表进行分页?很少有用户能够处理一个包含近1000个结果的页面!