为什么使用EAV而不是MongoDB?

为什么使用EAV而不是MongoDB?,mongodb,magento,entity-attribute-value,Mongodb,Magento,Entity Attribute Value,我正在学习magento,我刚刚读到有关EAV的文章。如果我理解正确,这就像是在SQL数据库上模拟noSQL数据库。 例如,通过这种方式,像铅笔这样的产品在其描述中可以有不同于计算机或球的属性 但我在一本书中读到了这个系统,比如: 所有这些灵活性和权力都不是免费的,需要付出代价;实现EAV模型会导致实体数据分布在大量的表上,例如,仅产品模型分布在大约40个不同的表上 [……] EAV的另一个主要缺点是在检索大量EAV对象集合时会降低性能,并且会增加数据库查询的复杂性。由于数据更零碎(存储在更多的

我正在学习magento,我刚刚读到有关EAV的文章。如果我理解正确,这就像是在SQL数据库上模拟noSQL数据库。 例如,通过这种方式,像铅笔这样的产品在其描述中可以有不同于计算机或球的属性

但我在一本书中读到了这个系统,比如:

所有这些灵活性和权力都不是免费的,需要付出代价;实现EAV模型会导致实体数据分布在大量的表上,例如,仅产品模型分布在大约40个不同的表上

[……]

EAV的另一个主要缺点是在检索大量EAV对象集合时会降低性能,并且会增加数据库查询的复杂性。由于数据更零碎(存储在更多的表中),因此选择一条记录涉及多个连接

我是一个全新的人,所以也许我失去了什么,但我的问题是:


为什么要使用这种复杂的方式,而不是使用基于文档的数据库作为mongoDB?

EAV不像noSQL,尤其不是模拟。它使用的是关系数据库,其使用方式与预期相同,但处于高级水平。我同意文档数据库可能是一个很好的替代品,但它们并不等同。你说得对,它不是一个模拟。也许我没有很好地解释它,我知道EAV是纯SQL,但我认为它的使用方式是尝试“模拟”NoSQL数据库,尽管它的使用方式与SQL相同。我甚至不认为它可以做到这一点。EAV和NoSql都试图解决同一个问题,但这并不意味着EAV试图成为NoSql。这就像说冷藏和腌制是延长食物寿命的方法,但你不能说冷藏是模仿腌制。当我说“模仿”时,我试图说(正如你所说;-))他们试图解决同样的问题。这就是为什么我用简单的引号写了emulate。我知道他们很不一样。但我不明白为什么要用一个而不是另一个在这种使用中似乎更有优势的。也许使用EAV而不是像mongodb这样的NoSQL是有原因的,但刚才我没有看到这个原因。我只是想了解这一点。