我一直在调查这个引擎,看看我是否可以使用它 我试图在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(具有不同的版本),因此它们使用相同的数据存储区 在公平竞争的环境中。
我的所有代码都可以在这里找到,以防我错过任何细节:
答案 0 :(得分:5)
这将是Python和Java之间的预期差异。很可能您没有看到进行查询的时间差异,而是分析结果和填充接收数据结构所花费的时间。
您可以通过比较查询单个记录所需的时间来对此进行测试。请记住,您需要多次测试并平均总数才能获得真正的基准,以便考虑到后端延迟的可能波动。
通常,您可以期望编译 静态类型语言(如Java或Scala)总是比解释语言 更快动态类型语言,如Ruby或Python。