Col*_*fax 9 replication couchdb
我有一个数据库(300MB和42,924个文档),包含来自约200个用户的大约20种不同类型的文档.这些文档的大小范围从几个字节到很多千字节(150KB左右).
卸载服务器时,以下复制筛选器功能大约需要2.5分钟才能完成.加载服务器时,大约需要10分钟.
任何人都可以评论这些时间是否是预期的,如果没有,建议我如何优化事物以获得更好的性能?
function(doc, req) {
acceptedDate = true;
if(doc.date) {
var docDate = new Date();
var dateKey = doc.date;
docDate.setFullYear(dateKey[0], dateKey[1], dateKey[2]);
var reqYear = req.query.year;
var reqMonth = req.query.month;
var reqDay = req.query.day;
var reqDate = new Date();
reqDate.setFullYear(reqYear, reqMonth, reqDay);
acceptedDate = docDate.getTime() >= reqDate.getTime();
}
return doc.user_id && doc.user_id == req.query.userid && doc._id.indexOf("_design") != 0 && acceptedDate;
}
Run Code Online (Sandbox Code Playgroud)
Kxe*_*pal 11
过滤的复制工作很慢,因为每个获取的文档都运行复杂的逻辑来决定是否复制它:
true或false赋值给CouchDB;true文件被复制;对于非过滤复制,请使用此列表,丢弃p.2-5并始终生成p.6 true.这种开销减慢了整个复制过程.
要显着提高过滤复制速度,您可以通过Erlang本机服务器使用Erlang过滤器.它们在CouchDB中运行,不通过任何stdio接口,并且没有应用JSON解码/编码开销.
注意,Erlang查询服务器不像JavaScript那样在沙箱内运行,因此您需要真正信任您使用它运行的代码.
另一个选择是优化你的过滤器功能,例如减少对象创建,方法调用,但实际上你不会赢得这么多.
| 归档时间: |
|
| 查看次数: |
1502 次 |
| 最近记录: |