MongoDB:如何通过CRUD操作确保巨大的互连结构的数据一致性

时间:2019-03-08 09:27:05

标签: mongodb nosql database-integrity

假设我们在MongoDB数据库中有很多集合,那么说:

  • 作者集合,其中每个作者存储在一个文档中,该文档具有一组相关的书ID(=该作者写的书)
  • 一组图书,其中每本书与一个(或多个)作者ID(=这本书的作者)相关联
  • 可以喜欢书籍和/或作者的用户集合(由用户文档中的一系列喜欢书和喜欢作者的人指定)
  • 更多与作者和书籍ID相关联的馆藏和文档

鉴于我们有大量的数据库条目以及互连关系(我们称它们为“外键”),那么最好的做法是确保 例如,当必须删除作者时数据库的数据一致性?蛮力方法将是恕我直言,以遍历所有集合,并删除该作者ID的所有外观和关联。详细而言,这意味着:

  • 删除作者
  • 删除该作者的所有图书
  • 从所有用户的喜欢列表中删除该作者
  • 从所有用户的喜欢列表中删除该作者的所有图书
  • ...

我想您现在已经知道了,我来自哪里;) 我可以想象这样的动作可能需要一段时间。或者,您可能更喜欢采用事件驱动的方法,这意味着一旦用户打开“喜欢页面”,系统就会即时检查所有喜欢的作者是否仍然存在,并将所有不存在的作者从用户个人资料中删除,同时有可能在页面上出现错误的赞数量 (根据“喜欢”页面,用户喜欢10位作者,其间同时删除了2位作者,但该值尚未更新)。希望大家都知道我问题的本质是什么。我正在寻求有关如何解决此问题的最佳实践建议。预先感谢。

编辑:我知道一个事实,即MongoDB中没有外键这样的字符串,因此我必须自己确保数据一致性。我的问题集中在以下决定上:我是否应该选择蛮力方法(例如一次删除所有受影响的数据)还是由事件驱动,每当要在某处显示受影响的文档时(即,用户打开喜欢的文件)页)。

0 个答案:

没有答案