我们是否应该对文档中的数据进行非规范化以提高性能? (文件数据库)

时间:2012-02-21 20:55:33

标签: nosql ravendb document-database

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

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

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

我意识到,如果我这样做,那么在非常罕见的情况下,我必须更新所有受影响的请求文档,即员工的姓名更改或设备的库存号更改。


PS:文档数据库建模指南的链接也将受到赞赏。

3 个答案:

答案 0 :(得分:2)

狡猾,这实际上取决于您所需的速度水平。如果您只有一个没有分片的数据库,并且您可以使用非常快的性能,那么为了简单起见,请不要反规范化并使用.Include。但是,它们不适用于分片会话,因此您可能希望进行非规范化,然后具有闪电性能

我个人的观点是,除非你有充分的理由不使用它,否则你应该始终使用.Include

答案 1 :(得分:1)

Here是关于非规范化的好短篇小说。

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

答案 2 :(得分:1)

狡猾, 在您的情况下,真的是否需要更新信息? 如果Sally May在2011年申请了一台新笔记本电脑,那么在2012年更改Sally May-Jones的请求是否有意义?

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