【问题标题】:Should we denormalize data in a Document to improve performance? (Document Database)我们应该对 Document 中的数据进行非规范化以提高性能吗? (文件数据库)
【发布时间】:2012-03-12 04:52:59
【问题描述】:

在我的系统员工日志中,请求和请求是关于设备的。

为了避免每次需要显示请求时都加载员工和设备文档,我想在请求文档中对员工姓名和设备库存编号、制造商名称和型号进行非规范化处理。

我是不是走错路了?这是反模式吗?

我意识到,如果我这样做了,那么我将不得不更新所有受影响的请求文档,以防员工姓名更改或设备库存编号发生更改的极少数情况。


PS:文档数据库建模指南的链接也将不胜感激。

【问题讨论】:

    标签: nosql ravendb document-database


    【解决方案1】:

    Sly,这实际上取决于您所需的速度水平。如果您只有一个没有分片的数据库并且您对非常快的性能感到满意,那么为了简单起见,请不要进行非规范化并使用.Include。但是,它们不适用于分片会话,因此您可能希望在那时进行非规范化并获得闪电般的性能。

    我非常个人的意见是,除非您有充分的理由不使用它,否则您应该始终使用 .Include。

    【讨论】:

      【解决方案2】:

      Here 是一篇关于非规范化的简短文章。

      总之,如果您永远不打算更新,非规范化是可以的,并且性能优势超过了存储劣势(通常是这样)。

      【讨论】:

        【解决方案3】:

        狡猾, 就您而言,如果信息发生变化,您是否真的需要更新信息? 如果 Sally May 在 2011 年要求购买一台新笔记本电脑,那么在 2012 年将该要求更改为 Sally May-Jones 是否有意义?

        通常当我们想要非规范化时,我们不想要它以提高性能(尽管它是一个因素,但 Include 可以很好地处理它)。我们希望它能够获得数据的时间点视图。

        【讨论】:

        • Ayende,就我而言,是的,我需要更新,因为即使在她报告之后,用户也可能会看到她的名字中仍然有错误。至于设备,如果我们弄错库存编号,处理请求的人会感到困惑并浪费时间。我可能不必更新去年的记录,但我当然必须更新最近的记录。但我明白你的意思。
        • Ayende,你是说在大多数情况下,RavenDb 的 Include 的执行速度与非规范化一样快(或几乎一样快)?
        猜你喜欢
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        • 2012-01-07
        • 2011-01-21
        • 2016-11-12
        • 2017-01-27
        • 2010-10-22
        • 2011-02-11
        相关资源
        最近更新 更多