【问题标题】:How to count number of record filtered by selector如何计算选择器过滤的记录数
【发布时间】:2019-11-07 13:28:07
【问题描述】:

我正在与 Go 签订智能合约,我想使用 Rich Query 从 CouchDB 中获取由某些选择器过滤的记录总数,例如:

{\"selector\":{\"doc_type\": \"person\"}}

类似于:

select count(*) from tb where ...

作为 SQL 查询,但如何使用 CouchDB 执行此操作?

【问题讨论】:

  • 你有什么问题?该查询不起作用吗?
  • 在 CouchDB 中,它不支持聚合查询。所以我必须通过链码来实现它,方法是逐条循环和计算每条记录。我的问题是有什么方法可以提高性能?
  • “在 CouchDB 中,它不支持聚合查询”当然支持。这就是reduce functions 的全部意义所在。
  • 所以如果我想计数,我必须手动循环和计数,对吗?如果我有超过 10K 条记录,它会减慢我的查询速度吗?我使用的方法是GetQueryResultWithPagination

标签: couchdb hyperledger-fabric hyperledger-chaincode


【解决方案1】:

如果您要在链码中执行丰富的查询,那么您所能做的就是遍历结果并计算每个结果。另请注意,超级账本结构限制了您可以查询的记录总数(这是一个配置参数),因此这也是另一个考虑因素。 我建议阅读本节https://hyperledger-fabric.readthedocs.io/en/release-1.4/couchdb_as_state_database.html#good-practices-for-queries 因为听起来您尝试执行的操作可能不是很高效

【讨论】:

  • 是的,我现在正在使用这种方法来获取总记录数。我使用GetQueryResultWithPagination 将所有记录查询为页数和计数。我正在寻找性能更好的替代方法。
  • 目前链码没有其他方法。我提供的链接以客户端的建议为例。
猜你喜欢
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 2011-02-11
  • 2021-04-02
  • 1970-01-01
相关资源
最近更新 更多