【问题标题】:Is there a count_async() equivalent for db models?数据库模型是否有等效的 count_async() ?
【发布时间】:2012-10-02 23:02:39
【问题描述】:

注意:我在这里使用 db(不是 ndb)。我知道 ndb 有一个 count_async() 但我希望有一个不涉及迁移到 ndb 的解决方案。

有时我需要准确计算与查询匹配的实体数量。使用 db 这很简单:

q = some Query with filters
num_entities = q.count(limit=None)

每个实体需要花费少量的数据库操作,但它可以让我获得所需的信息。问题是我经常需要在同一个请求中执行其中的一些操作,异步执行它们会很好,但我在 db 库中看不到对它的支持。

我在想我可以使用 run(keys_only=True, batch_size=1000) 因为它异步运行查询并返回一个迭代器。我可以先在每个查询上调用 run(),然后再计算每个迭代器的结果。它的成本与 count() 相同,但 run() 已被证明在测试中速度较慢(可能是因为它实际上返回结果),事实上,无论我将它设置多高,batch_size 似乎都被限制在 300,这需要更多的 RPC比 count() 方法计算数千个实体。

我的 run() 测试代码如下所示:

queries = list of Queries with filters
iters = []
for q in queries:
  iters.append( q.run(keys_only=True, batch_size=1000) )
for iter in iters:
  count_entities_from(iter)

【问题讨论】:

    标签: google-app-engine asynchronous


    【解决方案1】:

    不,db 中没有等价物。 ndb 的重点在于它添加了 db 中缺少的这些功能。

    【讨论】:

    • 感谢尼克的回复。我想我需要提高将这个项目迁移到 ndb 的优先级。
    猜你喜欢
    • 2020-02-01
    • 2010-11-17
    • 1970-01-01
    • 2010-11-18
    • 2011-07-31
    • 2022-07-02
    • 1970-01-01
    • 2019-06-01
    相关资源
    最近更新 更多