Hep*_*tic 5 replication couchdb
我有一个服务器,有一个couchdb数据库,其中包含我的应用程序所需的信息.它包含几兆字节的东西,一些日常变化的文档(添加最新消息,删除旧文档,更新一些).
应用程序尽可能与服务器数据库同步(使此信息可脱机使用).
但是,此信息对我的应用程序的每个用户都是全局的 - 因此必须限制为严格只读访问.但是,我读到couchdb需要对源进行写访问才能有效复制(为了检查点).
性能影响是什么?这有什么办法吗?
您可以通过validate_doc_update()在_design文档中编写函数来限制写访问权限.您可以在官方CouchDB文档中找到详细信息.
例如,此函数会将写入操作限制为仅限管理员:
function(newDoc, oldDoc, userCtx, secObj) {
// allow modifications by admins only.
if ((userCtx.roles.indexOf('_admin') !== -1)) {
return;
}
throw({forbidden: 'You are not allowed to edit public documents.'});
}
Run Code Online (Sandbox Code Playgroud)
将其放入_design/readonly文档(或您希望设计文档的任何名称),并命名该函数validate_doc_update.
每个设计文档只能有一个validate_doc_update函数,但您当然可以定义多个设计文档.每当任何人尝试写入操作时,文档将按顺序发送到所有这些验证功能.如果任何函数抛出错误,则拒绝更新.
因此,请注意不要将此设计文档复制到普通用户应该能够写入的数据库中!
据我所知,常规复制仍然有效,因为验证函数不会针对复制检查点文档执行(它们具有特殊的/ _local /前缀).但你应该明确地尝试这一点以确定.
每次发生文档写入时都会执行验证功能,即使对于管理员写入也是为了复制.根据您的应用程序,您可能会考虑一些特殊的复制策略来提高性能.
但是,您描述的设置不应该出现问题:不允许用户编写,因此如果他们对公共数据库的复制速度很慢,则可以.如果您的公共数据库很少更新,那么也不会出现任何性能问题.
希望我能帮忙!