人为的例子:
{
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/