0

我有以下简单的查询:

 client = datastore.Client('fmy_project')
 query = client.query(kind='kind1')
 query.add_filter('x', '=','y')
 for row in query.fetch():
   #process the row and save to file

在本地机器上工作时,我需要 100 行 5 秒才能获取结果。这非常慢。

当我在 python 进程上进行 strace 时,我得到了很多行:

recvmsg(9, 0x7ffffc9ee9f0, 0) = -1 EAGAIN(资源暂时不可用)

poll([{fd=8, events=POLLIN}, {fd=9, events=POLLIN}], 2, 200) = 0 (超时)

有没有办法说数据存储可以一次性获取所有内容或进行某些其他优化?

我用谷歌搜索并没有找到任何相关选项

4

1 回答 1

1

你是说只需要 5 秒就可以获取吗?最后不处理 for 循环中的数据?

一般来说,如果你:

  1. 获取数据(获取返回数据列表
  2. 处理返回列表本身的数据(不要在循环中保存到数据存储区!
  3. 使用“ put_multi ”一次保存多行

ndb.put_multi(数据列表)

在此处查看文档:https ://cloud.google.com/datastore/docs/concepts/entities#batch_operations

于 2017-11-13T18:04:42.430 回答