受挫的例子:
{
productName: 'Lost Series 67 DVD',
availableFrom: '19/May/2011',
availableTo: '19/Sep/2011'
}
查看storeFront / currentAvailableProducts基本上检查当前日期时间是否在availableFrom - availableTo内并发出文档。
我想强制视图每晚凌晨1点重新生成,即处理/映射所有文档。
起初我有一个简单的python脚本通过crontab调度触及每个文档因此导致新的修订和视图更新,但是因为couchdb只是附加,所以这不是非常有效 - 即加载了不必要的IO和磁盘空间使用通过压实,在各方面都非常浪费资源。
第二个解决方案是通过couchapp push再次推送视图定义,但这意味着视图在几分钟内不可用(或部分不可用),这也是不可接受的。
还有其他解决方案吗?
答案 0 :(得分:6)
威尔的答案很棒;但只是为了得到这里所代表的共识观点:
确定您的时间片大小,例如一天。
接下来,对于每个文档,您为每个可用的时间片(日)发出一次。因此,如果文档从5月19日到5月21日(包括在内)可用,您的发射键将是:
"2011-05-19"
"2011-05-20"
"2011-05-21"
为每个文档计算一次后,要查找某一天可用的文档,只需查询该视图(例如今天)?key="2011-05-18"
。
您永远不必更新或重新运行您的观点。
如果由于某种原因绝不能更改查询URL,您可以使用_show函数将302(临时)重定向到今天的正确查询。
答案 1 :(得分:2)
所以你的视图没有自动更新我接受了吗?
新增和更改的文档没有动态添加?
哦,我明白了,你在作弊。您在视图创建期间使用“缺少文档”信息(即当前日期)。
没有视图重命名,但如果你绝望,你可以使用网址重写。
只需“每天”创建一个设计文档:/ db / _design / today05172011
然后使用一些网址重写来改变:GET / db / _design / today / _view / yourview
to:GET / db / _design / today051711 / _view / yourview
在服务器时间晚上11点创建视图(调整它以使“now”为“明天”或其他)。
然后添加一些清理代码以便以后删除旧视图。
这样您的视图就可以随心所欲地构建。
显然,您需要将Couch与其他一些Web服务器/代理连接起来,以便将其关闭。
它既优雅又不雅,同时也是。