PouchDB - 如果某些字段比其他字段更新更多,则文档结构
PouchDB - document structure if some fields will be updated more than others
我正在为移动设备编写一个混合应用程序,允许用户将评论和评级添加到社区资源的众包数据库中。有两类字段的更新频率不同:
1) 每个资源都有一些通用字段,如名称、城市地址、邮政编码、描述。这些会偶尔更新,有时永远不会更新。也可以添加新资源。
2) 每个资源还有一些更频繁更新的字段:新的评论和评级可以添加到资源中。用户无需登录即可添加新评论。他们可以在没有身份验证的情况下做到这一点。
如何构建我的数据库/文档,以便我可以安全地允许人们在不进行身份验证的情况下向每个资源添加评论?我正在考虑将相对静态的字段(资源名称描述)存储为一个文档,并将 reviews/ratings 存储为单独的文档——这是一种可行的方法吗?它似乎更安全,因为用户无法在每次添加新评论时修改整个资源,而只是添加新文档。但是,我不确定它会如何影响性能。
(我看了 Joan Touzet 关于 10 个常见误解的演讲,这很有帮助。如果有人能指出更多 content/examples 如何在 PouchDB 中构建我的文档和数据库以最大化 simplicity/security ,我将不胜感激!)
提前致谢
I am considering storing the relatively static fields (resource name description) as one document, and the reviews/ratings as separate documents- is this a viable way?
是的,绝对!
It seems like it would be more secure, since users wouldn't be able to modify the entire resource everytime they added new reviews and instead they would just be adding new documents.
这就是原因。 ;-)
通过这种设计,您还可以避免冲突,无论是在多个用户时立即 409
响应,还是在移动到多个复制数据库后最终发生冲突。文档也变得更加简单。
请记住,您应该将有关社区资源的一些基本信息复制到每个审查文档中。一个用户(管理员)完全有可能删除 "resource" 文档,但用户不希望他们的评分在他们的时间轴视图中消失。例如。将资源的 _id 和 url 复制到每个评论中。
However, I'm not sure how it would impact performance.
CouchDB 视图生成时间更长,复制时间更长,增加的磁盘 space 可能是个问题(但可能不在服务器上)。
总而言之,我只能建议为每个 review/rating 使用单独的文档。我们在一个非常相似的领域(对葡萄酒进行评级)采用了相同的方法,并且效果很好。我们也尝试了其他几种设计,但将每条评论放入单独的文档中大大简化了一切。
我正在为移动设备编写一个混合应用程序,允许用户将评论和评级添加到社区资源的众包数据库中。有两类字段的更新频率不同:
1) 每个资源都有一些通用字段,如名称、城市地址、邮政编码、描述。这些会偶尔更新,有时永远不会更新。也可以添加新资源。
2) 每个资源还有一些更频繁更新的字段:新的评论和评级可以添加到资源中。用户无需登录即可添加新评论。他们可以在没有身份验证的情况下做到这一点。
如何构建我的数据库/文档,以便我可以安全地允许人们在不进行身份验证的情况下向每个资源添加评论?我正在考虑将相对静态的字段(资源名称描述)存储为一个文档,并将 reviews/ratings 存储为单独的文档——这是一种可行的方法吗?它似乎更安全,因为用户无法在每次添加新评论时修改整个资源,而只是添加新文档。但是,我不确定它会如何影响性能。
(我看了 Joan Touzet 关于 10 个常见误解的演讲,这很有帮助。如果有人能指出更多 content/examples 如何在 PouchDB 中构建我的文档和数据库以最大化 simplicity/security ,我将不胜感激!)
提前致谢
I am considering storing the relatively static fields (resource name description) as one document, and the reviews/ratings as separate documents- is this a viable way?
是的,绝对!
It seems like it would be more secure, since users wouldn't be able to modify the entire resource everytime they added new reviews and instead they would just be adding new documents.
这就是原因。 ;-)
通过这种设计,您还可以避免冲突,无论是在多个用户时立即 409
响应,还是在移动到多个复制数据库后最终发生冲突。文档也变得更加简单。
请记住,您应该将有关社区资源的一些基本信息复制到每个审查文档中。一个用户(管理员)完全有可能删除 "resource" 文档,但用户不希望他们的评分在他们的时间轴视图中消失。例如。将资源的 _id 和 url 复制到每个评论中。
However, I'm not sure how it would impact performance.
CouchDB 视图生成时间更长,复制时间更长,增加的磁盘 space 可能是个问题(但可能不在服务器上)。
总而言之,我只能建议为每个 review/rating 使用单独的文档。我们在一个非常相似的领域(对葡萄酒进行评级)采用了相同的方法,并且效果很好。我们也尝试了其他几种设计,但将每条评论放入单独的文档中大大简化了一切。