App Engine Python 数据存储查询比 Java 慢得多(>3倍)吗?

4 投票
1 回答
800 浏览
提问于 2025-04-16 05:10

我一直在研究appengine,想看看能否用它来做一个项目。在选择Python和Java的时候,我发现了一个令人惊讶的差异:在数据存储查询的性能上,Python的中到大型查询速度比Java慢了超过3倍。

我想问的是:这种数据存储查询的性能差异(Python比Java慢3倍)是正常的吗?还是说我在Python代码中做错了什么,导致结果不对?

我的数据结构是这样的:

名字(长度8)
姓氏(长度8)
地址(长度20)
城市(长度10)
州(长度2)
邮政编码(长度5)

我在数据存储中填入了2000条“人”的记录,每个字段的长度都正好是上面提到的,内容都是随机生成的,并且没有任何字段被索引(这样插入速度会更快)。

然后我用Python查询了1000条“人”的记录(没有过滤条件,也没有排序):

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

接着我用Java查询了1000条“人”的记录(同样没有过滤条件,也没有排序):

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的查询结果大约在200毫秒左右返回,而Python的代码则要花费更长时间,平均超过700毫秒。两个应用程序都在同一个应用ID下(版本不同),所以它们使用的是同一个数据存储,应该是公平的比较。

我的所有代码都可以在这里找到,以防我遗漏了什么细节:

http://github.com/greensnark/appenginedatastoretest

1 个回答

5

这其实是Python和Java之间一个很正常的区别。你可能并没有看到查询所花费的时间有多大差别,而是结果解析和填充接收数据结构所需要的时间更长。

你可以通过比较查询单条记录所需的时间来测试这一点。记得要多测试几次,然后把总时间平均一下,这样才能得到一个真实的基准,以应对后端可能出现的延迟波动。

一般来说,你可以期待像Java或Scala这样的编译型静态类型语言会比像Ruby或Python这样的解释型动态类型语言要快。

撰写回答