我听到更多关于NoSQL
的信息,但是还有人给我一个明确的解释,说明如何使用它来代替relational databases
。
我读过它不能left joins
,所以我试图弄清楚你如何能够使用这样的数据存储。从阅读:Preserve Joins by code in MongoDB看起来似乎只是建立一个大表,好像你已经在它上面做了连接。
如果上述陈述属实,那么我可以看到它是如何使用的。但是我很好奇你如何处理重复数据...作为规范化的概念,帮助你消除冗余并确保数据的一致性(例如像大写,空格等的轻微修改)......
我们是否只是为了可扩展的速度而牺牲数据的一致性,还是我错过了什么?我们非常感谢任何澄清,以及帮助我理解的任何资源。
EDT
我一直在做更多的挖掘,并找到了以下问题的答案,有助于澄清我的理解:
从这些答案来看,我对一致性的理解似乎是正确的。看起来NoSQL
似乎用于特定的问题类型,如果你需要关系,你应该使用关系数据库。
但这引发了更多问题:
NoSQL
与何时不使用的真实例子? denormalizing
数据,您应该能够解决关系数据库所做的所有相同问题......但是有关于如何使用关系数据库normalize
数据的规则。是否有可用于帮助他们denormalize
数据使用NoSQL
解决方案的规则?NoSQL
解决方案同时使用relational database
的任何示例?答案 0 :(得分:13)
MongoDB能够拥有包含其他文档数组的文档。这解决了许多在reational数据库中存在关系的情况。
当发票有多个头寸时,您不会将这些头寸放入单独的集合中。你可以将它们嵌入一个数组中。
这让我想知道何时使用NoSQL与不使用NoSQL的真实例子?
有许多不同的NoSQL数据库,每个数据库都考虑到不同的用例。但是你把这个问题标记为MongoDB,所以我认为你的意思是MongoDB。
与关系数据库相比,MongoDB有两个主要优势。
首先,它可以很好地扩展。
当数据库太慢或太大时,您可以通过创建多个分片的群集或副本集来轻松添加更多服务器。对于大多数关系数据库而言,这种方法几乎没有效果。
其次,它允许异构数据。
想象一下,例如,计算机硬件商店的产品数据库。产品有哪些特性?所有产品都有价格和供应商。但CPU具有时钟速率,硬盘驱动器和RAM芯片具有容量(并且这些容量无法比较),显示器具有分辨率等等。你会如何在关系数据库中设计它?您可以创建一个非常长的productID-property-value表,也可以创建一个非常宽且稀疏的产品表,其中包含您可以想象的每个属性,但对于大多数产品,大多数属性都是NULL
。两种解决方案都不是很优雅。但MongoDB可以更好地解决这个问题,因为它允许集合中的每个文档具有不同的属性集。
它不能做什么?
作为一项相当新的技术,关于它的文献并不多。围绕它的软件生态系统也不是那么好。您可以为关系数据库获得的工具通常更加闪亮。
还有一些用例MongoDB不适合。
通过对数据进行非规范化,您应该能够解决关系数据库所做的所有相同问题......但是有关于如何使用关系数据库规范化数据的规则。是否有规则可以帮助他们将数据非规范化以使用NoSQL解决方案?
关系数据库大约有40年的历史。他们的理论是计算机科学中一个研究得很好的课题。有关于它们背后的理论的书籍全书。到目前为止,每个可以想象的角落都有一个可靠的解决方案。
但另一方面,NoSQL数据库是一项相当新的技术。我们仍在研究最佳实践。最常见的建议是:“使用自己的头脑。考虑最常执行的查询,并为他们优化数据模式。”
关于何时考虑将NoSQL解决方案与关系数据库并行使用的任何示例?
如果可能,我建议不要在同一产品中使用两种不同的数据库技术:
我只建议在满足您的要求时混合使用数据库技术,而不仅仅是变得困难,而且在物理上不可能。否则,请选择并坚持下去。