我有一台服务器,其中包含一个 couchdb 数据库,其中包含我的应用程序所需的信息。它包含几兆字节的内容,一些每天都会变化的文档(添加最新新闻,删除旧文档,更新一些文档)。
应用程序会尽可能与服务器数据库同步(以便离线使用此信息)。
然而,这些信息对于我的应用程序的每个用户来说都是全局的——因此必然需要限制为严格的只读访问。但是,我读到 couchdb 需要write访问源以便有效复制(以便检查点)。
对性能有何影响?有什么办法可以解决这个问题吗?
您可以通过写入来限制写访问validate_doc_update()
_design 文档中的函数。您可以在以下位置找到详细信息CouchDB 官方文档 http://docs.couchdb.org/en/latest/couchapp/ddocs.html#vdufun.
例如,此函数将仅限管理员进行写入操作:
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.'});
}
把这个放入一个_design/readonly
文档(或您想要的设计文档的任何名称),并命名该函数validate_doc_update
.
每个设计文档只能有一个 validate_doc_update 函数,但您当然可以定义多个设计文档。每当任何人尝试写入操作时,文档都会按顺序发送到所有这些验证功能。如果任何函数抛出错误,则更新将被拒绝。
因此,请小心不要将此设计文档复制到普通用户应该能够写入的数据库中!
据我所知,常规复制仍然有效,因为验证函数不会针对复制检查点文档执行(它们具有特殊的 /_local/ 前缀)。但你一定要尝试一下才能确定。
性能影响:
每次发生文档写入时都会执行验证函数,即使是管理员写入,也适用于复制。根据您的应用程序,您可能会考虑一些特殊的复制策略以提高性能。
不过,您描述的设置不应造成问题:用户不允许写入,因此如果他们遇到复制速度慢也没关系to您的公共数据库。如果您的公共数据库很少更新,那么也不应该有任何性能问题。
希望我能帮忙!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)