db模型是否有count_async()等价物?

时间:2012-10-02 23:02:39

标签: google-app-engine asynchronous

注意:我在这里使用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)

1 个答案:

答案 0 :(得分:2)

不,数据库中没有相应的内容。 ndb的重点是它添加了db中缺少的这些功能。