Google App Engine:与查询相比,基于密钥的查找速度有多快?

时间:2010-07-19 15:05:57

标签: java google-app-engine

假设我想要检索4个对象。什么会更快:

1. for (int i = 0; i < 4; i++) {

persistenceManager.getObjectById(object1)

}

2. Query = (select * from objects where id == 'id1' || id == 'id2' || id == 'id3' || id == 'id4')

由于

2 个答案:

答案 0 :(得分:2)

通过给出一个包含多个实体和一个OR语句的示例,您会使问题变得复杂一些。 (主要问题是基于密钥的查找与基于查询的查找。)数据存储本身不支持并集操作(“OR”)。所以在幕后你的第二个例子将做4个查询,每个id一个。

查询通常比键查找慢,因此4个查询通常比4个ID慢。究竟有多慢或多快将取决于您的实体,但它几乎总是非常显着的差异。

但是,在这种情况下,您的查询仅使用id字段。应用程序引擎中的Datanucleus JDO层足够智能,可识别仅使用ID的查询,并将尝试仅执行密钥批处理操作。 (见here)这应该是最快的选择。

更新:显然,在最新版本的sdk中,查询和密钥之间的差异已经减少,正如所讨论的那样here.

答案 1 :(得分:0)

我猜第一种形式会更快,但这只是猜测。