【发布时间】:2016-05-05 04:55:30
【问题描述】:
假设我有两个集合,每个集合的值彼此独立,但每个集合彼此相关。它们是photos 和users。用户和照片之间是一对多的关系。
非规范化数据示例:
users:
{
"id": "AABC",
"name": "Donna Smith"
}
photos:
{
"id": "FAD4",
"description": "cute dog",
"user_id": "AABC", // This is the relationship
"user_name": "Donna Smith" // This is the denormalized value from the "users" collection
}
当用户“AABC”将名称从“Donna Smith”更改为“Donna Chang”时,如何确保与 photos 集合中的文档保持一致?
作为非事务性,我了解一致性将是最终。
一个简单(简单)的实现可能会在更改用户“AABC”后触发后台作业,以更新 user_id = “AABC”的所有照片。在单个更新的情况下,这会很好。但这是一个多用户环境,并且会同时向各个方向进行更新。比如照片后台更新到一半把“Donna Smith”改成“Donna Chang”,用户“AABC”的名字又改回了“Donna Smith”怎么办?
在网上搜索,我看到很多关于如何建模非规范化数据的讨论。但任何关于如何维护的讨论似乎都被视为“您还需要更新所有相关记录”。在这种情况下,是否有任何 NoSQL 系统可以为您完成繁重的工作?任何框架或实用程序?
我已经阅读了Thomas Wanschik's excellent blog articles 关于“物化视图”的主题以及针对此场景的背景更新。但我很担心:
- 后台作业必须延迟预先确定的数量 大于允许更新的最长时间(我该如何 确定延迟?如果手术需要更长的时间怎么办?),以及;
- 这是我唯一讨论的一个实用解决方案。 NoSQL 确实很重要,为什么我没有看到更多关于此的讨论?我错过了什么?
【问题讨论】:
-
有什么想法吗?我原以为随着 NoSQL 的流行,这将是一个“已解决”的问题。
标签: eventual-consistency denormalized nosql