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

gre*_*ark 4 python java google-app-engine google-cloud-datastore

我一直在调查appengine以确定我是否可以将它用于项目,并且在尝试在Python和Java之间进行选择时,我在数据存储区查询性能方面遇到了惊人的差异:中型到大型数据存储区查询的速度慢了3倍以上Python比Java.

我的问题是:数据存储区查询的性能差异(Python比Java慢3倍)是正常的,还是我在Python代码中做错了什么?

我的实体看起来像这样:

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

我用2000 Person记录填充数据存储区,每个字段完全按照此处记录的长度,所有字段都填充了随机数据,没有索引的字段(只是因此插入更快).

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

q = datastore.Query("Person")
objects = list(q.Get(1000))
Run Code Online (Sandbox Code Playgroud)

来自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)));
Run Code Online (Sandbox Code Playgroud)

使用此代码,Java代码返回~200ms的结果; Python代码需要更长的时间,平均> 700ms.这两个应用程序都位于相同的应用程序ID(具有不同的版本)上,因此它们使用相同的数据存储区,并且应该处于公平的竞争环境中.

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

http://github.com/greensnark/appenginedatastoretest

Jos*_*hua 5

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

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

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

  • Python和Java都编译为在虚拟机上解释的字节代码.在这方面,Python和Ruby并不相同. (2认同)