我有一个问题。我正在考虑为某些类型的对象(例如产品数据)使用数据存储。使用文档存储的标准是if对象具有详细页面,因此需要快速读取整个对象(例如 - 包含所有属性,图像,注释等的产品)。使用SQL的标准是显示列表(例如,N最新,最受欢迎等)。
某些对象符合这两个标准。产品就是一个例子。因此,通常的做法是存储将用于在SQL数据库中的索引页面上呈现列表以及文档存储中的其他数据的信息吗?
答案 0 :(得分:3)
如果非规范化适合于获得性能,请继续进行非规范化。但是你必须确保你有办法处理非规范化数据的更新。您在MongoDB中的选项是:
做出选择..
答案 1 :(得分:1)
主要思想是mongoDB是为非规范化和嵌入而创建的。在我过去的一个项目中,我已经完成了sql非规范化以获得更好的性能,但我不喜欢sql非规范化,因为很多公布的数据(例如,如果您有一对多的关系)。第二步是将数据访问层重写为mongoDB。在mongoDB中我需要加载多个文档的一些困难的页面我已经创建了非规范化文档(包含嵌入式集合和来自不同文档的普通数据)以适合页面内容。没有我的所有问题页面都能快速运行,比如facebook;)。
但是这里可能出现问题,因为你应该每次都支持非规范化文档。此外,我的所有非规范化数据更新都是异步的,有些数据在某些时候可能会过时,但这是正常的做法。甚至stackoverlow使用非规范化,因为有时候在打开问题时我会看到答案,但是当我回到问题列表并刷新页面时,有时问题没有答案。
如果我需要非规范化,我选择mongodb。