PouchDB - 如果某些字段的更新速度超过其他字段,则为文档结构

时间:2017-01-03 18:29:29

标签: couchdb pouchdb

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

1)每个资源都有一些通用字段,如名称,城市地址,邮政编码,描述。这些将偶尔更新,有时永远不会更新。也可以添加新资源。

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

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

(我看过Joan Touzet关于10个常见误解的讨论,这很有帮助。如果有人能指出我在PouchDB中构建我的文档和数据库的更多内容/示例,以最大限度地提高简单性/安全性,我真的很感激它!)

提前致谢

1 个答案:

答案 0 :(得分:0)

  

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

是的,绝对!

  

它似乎更安全,因为用户无法在每次添加新评论时修改整个资源,而只是添加新文档。

这就是原因。 ; - )

使用此设计,您还可以避免冲突,无论是多个用户立即409响应,还是在移动到多个复制数据库后发生最终冲突。文件也变得更加简单。

请注意,您应将有关社区资源的一些基本信息复制到每个审核文档中。一个用户(管理员)完全有可能删除"资源" doc,但是用户不希望他们的评级在他们的时间线视图中消失。例如。将资源的_id和url复制到每个评论中。

  

但是,我不确定它会如何影响效果。

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

总而言之,我只建议为每个评论/评级使用单独的文档。我们在一个非常相似的领域采用相同的方法(评级葡萄酒),并且效果很好。我们也尝试了其他几种设计,但是将每篇评论放到一个单独的文档中都会大大简化一切。