假设我有两个集合,每个集合的值彼此独立,但每个集合都相互关联。它们是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
}
photos
当用户“AABC”将名称从“Donna Smith”更改为“Donna Chang”时,如何确保与集合中的文档保持一致?
作为非事务性的,我理解一致性将是最终的。
一个简单的(天真的)实现可能会在更改用户“AABC”后触发后台作业,以更新 user_id =“AABC”的所有照片。在单个更新的情况下,这会很好。但这是一个多用户环境,并且会同时向各个方向进行更新。例如,如果照片后台更新中途将“Donna Smith”更改为“Donna Chang”,用户“AABC”的名称又改回了“Donna Smith”怎么办?
在网上搜索,我看到很多关于如何对非规范化数据建模的讨论。但是任何关于如何维护它的讨论似乎都是微不足道的,因为“你还需要更新所有相关记录”。在这种情况下,是否有任何 NoSQL 系统可以为您完成繁重的工作?任何框架或实用程序?
我已经阅读了Thomas Wanschik关于“物化视图”主题的优秀博客文章以及针对此场景的背景更新。但我担心的是:
- 后台作业必须延迟超过允许更新的最长时间的预定量(我如何确定该延迟?如果操作需要更长的时间怎么办?),并且;
- 这是我迄今为止找到的关于实际解决方案的唯一讨论。NoSQL 确实很重要,为什么我没有看到更多关于这个的讨论?我错过了什么?