CocoaChina 11-08
appengine Python数据存储区查询比Java慢很多(>.
index_new4.html
../../../zaker_core/zaker_tpl_static/wap/tpl_keji1.html

 

我一直在调查发动机 , 看看我是否可以用它来做一个

我试图在Python和 Java 之间做出选择

数据存储区查询性能的惊人差异:中等到

大型数据存储区查询在 Python 中的速度比在 3 倍慢

Java 的 .

我的问题是:数据存储区查询的这种性能差异

( Python 比 Java 慢 3 倍 ) 正常 , 或者我做错了什么

我的 Python 代码弄乱了数字?

我的实体看起来像这样:

名字 ( 长度 8 )

姓氏 ( 长度 8 )

地址 ( 20 )

城市 ( 10 )

州 ( 2 )

拉链 ( 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

最佳答案

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

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

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

相关标签

python java
相关文章
评论
没有更多评论了
取消

登录后才可以发布评论哦

12 我来说两句…
打开 ZAKER 参与讨论