nosql - 重新生成 CouchDB View

标签 nosql couchdb

人为的例子:

{
  productName: 'Lost Series 67 DVD',
  availableFrom: '19/May/2011',
  availableTo: '19/Sep/2011'
}

查看 storeFront/currentlyAvailableProducts 基本上检查当前日期时间是否在 availableFrom - availableTo 内并发出文档。

我想强制在每晚凌晨 1 点重新生成 View ,即处理/映射所有文档。

起初我通过 crontab 安排了一个简单的 python 脚本,该脚本触及每个文档,因此导致新的修订和更新 View ,但是由于 couchdb 仅附加,这不是很有效 - 即随之而来的是大量不必要的 IO 和磁盘空间使用通过压实,在所有方面都非常浪费资源。

第二种解决方案是通过 couchapp push 再次推送 View 定义,但这意味着 View 在几分钟内不可用(或部分不可用),这也是 Not Acceptable 。

还有其他解决方案吗?

最佳答案

Will 的回答很棒;但只是为了获得这里代表的共识观点:

保持一个 View ,每天都以不同的方式查询它

确定您的时间片大小,例如一天。

接下来,对于每个文档,您为每个可用的时间片(天)发出一次。因此,如果文档在 5 月 19 日至 5 月 21 日(含)期间可用,您的发出键将是:

"2011-05-19"
"2011-05-20"
"2011-05-21"

为每个文档计算后,要查找某一天可用的文档,只需使用(例如今天)?key="2011-05-18" 查询 View 。

您永远不必更新或重新运行您的 View 。

如果您出于某种原因永远不能更改查询 URL,您可以使用 _show 函数来 302(临时)重定向到今天的正确查询。

关于nosql - 重新生成 CouchDB View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6036913/

相关文章:

java - 从 Oracle NOSQL 检索批量数据时,获取类型无法创建 Double : class oracle. kv.impl.api.table.IntegerDefImpl

database - 对具有良好文档的 Cassandra IDE 的建议,以便在 Windows 操作系统中工作

mysql - 有没有像 pouch-couch 一样离线支持同步的关系数据库

node.js - 在 JavaScript 中用于 PouchDB 的 ODM/ORM

delphi - 在 Delphi 中获取 PDF MD5 哈希值

nosql - Amazon.com如何与键值数据存储区一起运行?

javascript - 在 Firebase 中延迟加载时防止加载重复项

content-management-system - couchdb,如何重命名附件

couchdb - couchdb 文档的大小

Firebase用于复杂查询。不行吗?