tom*_*tom 15 python sqlite google-app-engine google-app-engine-python
我有一个看起来像这样的查询:
query = (models.Foo.all()
.filter('x =', x)
.filter('y =', y)
.filter('z =', z)
.filter('zz =', zz)
.order('-a'))
Run Code Online (Sandbox Code Playgroud)
它在~100ms内在本地SDK上运行,并以可接受的速度在云中运行.当我添加第二个订单(所以看起来像这样:)
query = (models.Foo.all()
.filter('x =', x)
.filter('y =', y)
.filter('z =', z)
.filter('zz =', zz)
.order('-a')
.order('-b'))
Run Code Online (Sandbox Code Playgroud)
..在本地SDK上需要大约10秒(长100倍),并且在云中以与之前相同的速度运行.我需要有二阶属性.
有关设置的一些细节:
db模型,而不是ndbsqlite3 datastore.db "PRAGMA integrity_check了本地数据库,没有报告任何错误问题:如何在本地更快地运行查询?(在整个时间里,10s滞后的开发真的很困难.)
这可能不是您想要的答案,但开发服务器上的数据存储性能缓慢是一个长期存在的已知问题,正在公共问题跟踪器上进行跟踪。
出现这种情况的原因之一是仿真的处理方式。如果您查看google/appengine/datastore/datastore_sqlite_stub.pySDK,您会发现对db方法的调用有些天真地转换为基本的 SQL 查询,这些查询被馈送到本地运行的 SQLite 数据库中。
在这些情况下,您在应用程序级别无能为力来提高性能。解决方案是让 SDK 在开发服务器上执行更智能的查询转换,这由 SDK 工程团队来实施。
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |