【问题标题】:I'm accessing a mongoDb database using the repository patterns. Where should I check for data Integrity?我正在使用存储库模式访问 mongoDb 数据库。我应该在哪里检查数据完整性?
【发布时间】:2012-06-15 23:00:25
【问题描述】:

总的来说,我对 mongodb 和 NoSQL 数据设计有点陌生。

我正在构建一个包含一些非规范化数据的 mongodb 数据库。例如,我的“用户”文档包含对零个或多个“文章”文档的引用(仅 id),而我的文章文档包含对零个或多个用户的引用。

由于我使用的是存储库模式,因此我的数据访问层的任何部分都不知道文章和用户。我应该在代码中的哪个位置检查以确保我的所有文档彼此一致?我应该让 DAL 的用户代码进行检查吗?

偶尔运行一次数据完整性脚本来检查一切是否一致是个好主意吗?

【问题讨论】:

    标签: mongodb database-design nosql


    【解决方案1】:

    这是微软在Repository Pattern 上的文章。从该文件:

    使用存储库将检索数据并将其映射到实体模型的逻辑与作用于模型的业务逻辑分开。

    您有几个问题:

    我应该在我的代码中的哪个位置检查以确保我的所有文档彼此一致?

    基于上面的陈述,我认为很明显这个逻辑属于Repository。这些对象之间的关系只存在于“业务逻辑”层,数据库无法强制执行这些规则。

    我应该让 DAL 的用户代码进行检查吗?

    他们怎么可能?作为存储库的作者,您是 DAL 用户。对于 MongoDB,DAL 基本上是驱动程序。

    您可能会在驱动程序周围编写一个包装器,以某种形式的事务包装多个写入。但是你必须这样写,MongoDB 没有事务的概念。

    偶尔运行一次数据完整性脚本来检查一切是否一致是个好主意吗?

    归根结底,编写存储库的人将对数据的完整性负责。这样的脚本可能有用,但肯定会占用大量 CPU 周期。

    我对 N:M 映射的建议是开始构建一些基本块来处理保持这两个同步所需的多个写入。一个想法是将更改排队并让后台作业进行更新。这样您就不必担心多次写入和回滚会导致错误数据。

    【讨论】:

      猜你喜欢
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-04
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 2011-05-09
      相关资源
      最近更新 更多