【问题标题】:Django Fixture Load on Google App Engine Very SlowGoogle App Engine 上的 Django Fixture 加载速度非常慢
【发布时间】:2012-08-03 01:03:20
【问题描述】:

我已经使用 Google App Engine 部署了一个 Django 网站,并且正在使用该命令

python manage.py remote loaddata my_data.yaml

使用来自 yaml 格式的夹具文件的初始数据填充数据存储。这是我的 yaml 文件的示例:

- fields: {team: 10, first_name: Jeff, last_name: Adrien, age: 25, pos: SF, gp: 8, mp: 63, 
fg: 7, fga: 16, ft: 7, fta: 12, three_pointers: 0, threes_attempted: 0, orb: 5, drb: 17, 
ast: 1, stl: 0, blk: 2, tov: 2, pf: 13, pts: 21
}
  model: players.player
  pk: 1
- fields: {team: 7, first_name: Arron, last_name: Afflalo, age: 26, pos: SG, gp: 62, mp: 2086, 
fg: 329, fga: 699, ft: 197, fta: 247, three_pointers: 88, threes_attempted: 221, orb: 40, 
drb: 157, ast: 149, stl: 36, blk: 13, tov: 85, pf: 134, pts: 943
}
  model: players.player
  pk: 2

总的 yaml 文件大约是这个大小的 20 倍(到 pk:478)。我不认为这有那么大,但是即使我有一个非常快的网络连接(1 Mbps),加载到数据存储区也需要非常长的时间(几分钟)。

最重要的是,在加载它之后,我检查了 Google App Engine 上的仪表板,它说我已经对数据存储执行了 04 万次写入操作。根据我的计算,鉴于上面有 21 个字段,加上 1 个用于 pk,乘以 478 个模型实例,我应该只执行大约 10K 写入,而不是 40K。

是否因为我使用 django-dbindexer 为 first_name 和 last_name 字段添加索引而发生了额外的写入?如果是这样,这就是加载我的数据需要这么长时间的原因吗?

【问题讨论】:

    标签: django google-app-engine google-cloud-datastore django-nonrel


    【解决方案1】:

    远程 API 真的很慢。如果您阅读旧的 google-appengine-python 邮件列表(您可以在 Google 群组中找到它),就会发现它对于大量数据传输没有用处。 API 最终为每个读取或写入请求发出 HTTP 请求。所以这是众所周知的。 bulkloader 似乎是加载海量数据的方式(我没有亲自尝试过)。

    您的写入取决于您拥有的索引属性的数量,而这又取决于您拥有的索引数量。 dbindexer 可能正在添加其他索引字段。您应该能够使用 Datastore Admin 查看数据存储中的实际实体,以查看它们是否具有 dbindexer 生成的字段。如果是 dbindexer 的问题,您会看到像“idxf_first_name_iexact”这样的额外字段。

    更有可能是您正在执行一些复杂的查询,需要为每个实体编写额外的索引。您应该能够查看管理员中的 Datastore Indexes 页面,以查看您为每个实体编写的额外索引的数量。

    另一种索引增长速度比您预期的要快的方式是,如果您有一个索引列表属性,但看起来您并没有。

    我建议您对 dbindexer 持怀疑态度。我没有广泛使用它,但是它可以为你做的 JOIN 操作不会很好地扩展,所以在我看来,它只是一个玩具而不是一个可用的功能。您可能仍然可以使用它来做一些事情。例如,如果您想进行不区分大小写的搜索,它会自动为您添加一个“iexact”字段,而不必手动执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-04
      • 1970-01-01
      • 2020-07-07
      相关资源
      最近更新 更多