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