数据存储获取VS获取(键

我使用下面的查询从数据存储中获取多个实体100+

返回entity.query(ancestor = ancestorKey).filter(entity.year = myStartYear).order(entity.num).fetch()

加载需要很长时间(几秒钟)。

试图找到一个最佳的方法,我创建了100个实体,发现它需要750毫秒〜1000毫秒之间的任何地方来获取本地服务器上的100个实体,这当然是很重要的。 我不知道如何绕过单行获取来提高效率!

在拼命试图优化,我试过了

  • 删除订单部分,仍然有相同的结果
  • 移除过滤器部件仍然得到相同的结果
  • 删除订单过滤器部分,仍然得到相同的结果
  • 显然这是另一回事。 在绝望的尝试中,我试图获取密钥,然后将密钥传递给ndb.get_multi()函数:

    qKeys = entity.query(ancestor = ancestorKey).filter(entity.year = myStartYear).order(entity.num).fetch(keys_only = True)

    return ndb.get_multi(qKeys)

    令我惊讶的是,我获得了更好的吞吐量! 查询结果现在加载到450〜550ms,平均性能提高约40%

    我不知道为什么发生这种情况,我会认为提取函数已经在最佳时间查询实体。

    问:任何想法如何优化单个查询行来加载更快?

    问题:任何人都知道提取函数的底层机制,以及为什么只提取密钥,然后使用ndb.get_multi()更快?


    FWIW,您不应该期望从使用开发服务器或数据存储模拟器在本地执行的数据存储性能测试获得有意义的结果 - 它们只是模拟器,它们不具有与使用本地模拟器相同的性能(或甚至100%等效功能)真正的数据存储。

    值得信赖的是@snakecharmerb,他正确识别了罪犯,经OP确认:

    请注意,云中的性能特征可能与本地计算机上的性能特征不同。 你真的想在云中运行这些测试。 - 昨天的squidcharmerb

    @snakecharmerb你对你的建议是正确的! 只是在云端进行测试,实际上是在性能方面的其他方式。 抓取()〜550ms,抓取(按键),然后get_multi为〜700ms似乎fetch()在云上效果更好! - 昨天哈立德

    链接地址: http://www.djcxy.com/p/23225.html

    上一篇: Datastore fetch VS fetch(keys

    下一篇: Google App Engine (Python) slow ancestor queries