appengine Python数据存储区查询比Java慢得多(> 3x)吗?

时间:2010-10-07 22:27:39

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

我一直在调查这个引擎,看看我是否可以使用它 我试图在Python和Java之间做出选择 数据存储区查询性能的惊人差异:中等到 大型数据存储区查询在Python中的速度比在3倍慢 Java的。

我的问题是:数据存储区查询的这种性能差异 (Python比Java慢3倍)正常,或者我做错了什么 我的Python代码弄乱了数字?

我的实体看起来像这样:

名字(长度8) 姓氏(长度8) 地址(20) 城市(10) 州(2) zip(5)

我使用每个字段填充2000个人记录的数据存储区 正是这里所说的长度,都填充了随机数据,没有 索引的字段(只是插入更快)。

然后我从Python查询1k Person记录(没有过滤器,没有排序):

q = datastore.Query("Person")
objects = list(q.Get(1000))

来自Java的1k Person记录(同样没有过滤器,没有排序):

DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Query q = new Query("Person");
PreparedQuery pq = ds.prepare(q);
// Force the query to run and return objects so we can be sure
// we've timed a full query.
List<Entity> entityList = new ArrayList<Entity>(pq.asList(withLimit(1000)));

使用此代码,Java代码返回~200ms的结果; Python 代码需要更长的时间,平均值> 700毫秒。两个应用程序都是相同的 应用程序ID(具有不同的版本),因此它们使用相同的数据存储区 在公平竞争的环境中。

我的所有代码都可以在这里找到,以防我错过任何细节:

http://github.com/greensnark/appenginedatastoretest

1 个答案:

答案 0 :(得分:5)

这将是Python和Java之间的预期差异。很可能您没有看到进行查询的时间差异,而是分析结果和填充接收数据结构所花费的时间。

您可以通过比较查询单个记录所需的时间来对此进行测试。请记住,您需要多次测试并平均总数才能获得真正的基准,以便考虑到后端延迟的可能波动。

通常,您可以期望编译 静态类型语言(如Java或Scala)总是比解释语言 更快动态类型语言,如Ruby或Python。