【问题标题】:How to handle changes in duplicated data in NoSQL如何处理 NoSQL 中重复数据的变化
【发布时间】:2012-03-21 04:14:41
【问题描述】:

我们正在为即将到来的项目评估 NoSQL。我倾向于以 RDBMS 的方式思考问题,并且在概念化缺乏规范化方面遇到了困难。

我了解在 NoSQL 中复制数据不会被视为错误。我无法理解的是修复数据更改以防止异常。

举例说明问题:

您正在组织一系列扑克锦标赛。你有球员, 地点和比赛活动。据我了解,锦标赛 事件可能包含一个位置和一组玩家。它确实 不需要拥有所有玩家数据,但如果你想获取名称 以及参加下一场锦标赛的每个人的家庭住址,这些信息 应该在锦标赛收藏中。

有人结婚并搬家,改变了他们的姓氏和 地址。应用程序是否需要更新播放器集合和 锦标赛收藏?还是我的收藏模型错了?怎么做 开发人员“跟踪”信息在哪里重复?

【问题讨论】:

    标签: nosql denormalization


    【解决方案1】:

    要做的一件事是为您拥有的每种数据类型建立一个“记录系统”或主文件。所有数据不需要单一来源,但每个来源都应该有一个。

    要采取的另一项措施是对数据进行版本化(保留历史更改),以便非规范化数据可以不可变 - 在您的示例中,过去发生的锦标赛的玩家数据适合该时间。如果玩家从那时起搬到了新地址,您仍然可以通过转到玩家的“记录系统”来获取当前地址,但锦标赛记录会反映他/她当时的地址等。

    【讨论】:

      【解决方案2】:

      我看到最近使用的模型是拥有一个不可变的“主”数据集合(在您的情况下,玩家列表,每个锦标赛中的玩家的锦标赛列表“相关”建模,其中锦标赛记录有一个玩家 ID 列表)和一个非规范化列表(在您的情况下,是一个包含完整玩家数据的锦标赛列表),该列表仅通过对“主”数据运行定期进程来更新。

      这样应用只需要更新主数据,周期性的更新过程最终会重建非规范化的结果。

      【讨论】:

      • 当您说“不可变”时,您的字面意思是如果 anything 在该主对象上发生更改,您将删除它并创建一个新对象?
      • 对不起,这里的词可能用错了。不可变是指在创建非规范化列表的过程中不会修改主列表。
      • @ChrisShain 基本上,您建议维护 2 个单独的写入(主集合)和读取(非规范化集合)集合。您还提到了定期更新以最终重建非规范化结果。所以这里的权衡是不渲染即时更新对吗?如果我们需要为查询呈现近乎实时的更新怎么办?而且我还担心周期性更新和连续读取对去规范化集合的影响。另外,您能否提供一些您提到的真实用例示例:The model that I see being used quite a bit lately......
      • @oblivion 对不起-这个答案已经 6 岁了,我不会再把它当作福音。根据您使用的平台,可能会有更好的方法来执行此操作,例如 Cassandra 中的物化视图。
      • 所以这基本上是在模拟外键?还是我错过了这里的重点?
      猜你喜欢
      • 2016-02-17
      • 2014-12-07
      • 1970-01-01
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      相关资源
      最近更新 更多