Couchdb PockDB-文档结构,如果某些字段更新次数比其他字段多

Couchdb PockDB-文档结构,如果某些字段更新次数比其他字段多,couchdb,pouchdb,Couchdb,Pouchdb,我正在为手机编写一个混合应用程序,允许用户将评论和评级添加到社区资源的众包数据库中。有两类字段的更新频率不同: 1) 每个资源都有一些通用字段,如姓名、公民地址、邮政编码、描述。这些将偶尔更新,有时从未更新。也可以添加新的资源 2) 每个资源还具有一些更新频率更高的字段:可以将新的评论和评级添加到资源中。用户无需登录即可添加新评论。他们可以在没有身份验证的情况下完成这项工作 我如何构造我的数据库/文档,以便我可以安全地允许人们在没有身份验证的情况下向每个资源添加评论?我正在考虑将相对静态的字段(

我正在为手机编写一个混合应用程序,允许用户将评论和评级添加到社区资源的众包数据库中。有两类字段的更新频率不同:

1) 每个资源都有一些通用字段,如姓名、公民地址、邮政编码、描述。这些将偶尔更新,有时从未更新。也可以添加新的资源

2) 每个资源还具有一些更新频率更高的字段:可以将新的评论和评级添加到资源中。用户无需登录即可添加新评论。他们可以在没有身份验证的情况下完成这项工作

我如何构造我的数据库/文档,以便我可以安全地允许人们在没有身份验证的情况下向每个资源添加评论?我正在考虑将相对静态的字段(资源名称描述)存储为一个文档,将评审/评级存储为单独的文档——这是一种可行的方法吗?这似乎会更安全,因为用户不可能每次添加新评论时都修改整个资源,而只是添加新文档。但是,我不确定它会如何影响性能

(我看了Joan Touzet关于10个常见误解的演讲,非常有帮助。如果有人能给我提供更多内容/示例,说明如何在PockDB中构建文档和数据库,以最大限度地简化/安全性,我将不胜感激!)

提前谢谢

我正在考虑将相对静态的字段(资源名称描述)存储为一个文档,将评审/评级存储为单独的文档——这是一种可行的方法吗

是的,绝对是

这似乎会更安全,因为用户不可能每次添加新评论时都修改整个资源,而只是添加新文档

这就是为什么

通过这种设计,您还可以避免冲突,无论是在多个用户使用时立即响应
409
,还是在移动到多个复制数据库时最终发生冲突。文档也变得简单多了

请记住,您应该将社区资源的一些基本信息复制到每个审阅文档中。一个用户(管理员)完全有可能删除“资源”文档,但用户不希望他们的评分在时间轴视图中消失。例如,将资源的_id和url复制到每个评论中

但是,我不确定它会如何影响性能

CouchDB视图将需要更长的时间生成,复制将需要更长的时间,增加的磁盘空间可能是一个问题(但服务器上可能不会)

总而言之,我只能建议对每次审查/评级使用单独的文档。我们在一个非常相似的领域(葡萄酒评级)采用了同样的方法,效果非常好。我们还尝试了其他几种设计,但将每个评论放在一个单独的文档中大大简化了一切

我正在考虑将相对静态的字段(资源名称描述)存储为一个文档,将评审/评级存储为单独的文档——这是一种可行的方法吗

是的,绝对是

这似乎会更安全,因为用户不可能每次添加新评论时都修改整个资源,而只是添加新文档

这就是为什么

通过这种设计,您还可以避免冲突,无论是在多个用户使用时立即响应
409
,还是在移动到多个复制数据库时最终发生冲突。文档也变得简单多了

请记住,您应该将社区资源的一些基本信息复制到每个审阅文档中。一个用户(管理员)完全有可能删除“资源”文档,但用户不希望他们的评分在时间轴视图中消失。例如,将资源的_id和url复制到每个评论中

但是,我不确定它会如何影响性能

CouchDB视图将需要更长的时间生成,复制将需要更长的时间,增加的磁盘空间可能是一个问题(但服务器上可能不会)

总而言之,我只能建议对每次审查/评级使用单独的文档。我们在一个非常相似的领域(葡萄酒评级)采用了同样的方法,效果非常好。我们还尝试了其他几种设计,但将每个评论放在一个单独的文档中大大简化了一切