NoSQL与其他SQL Drupal设置


14

在Drupal中与MySQL,PostGRE SQL或MSSQL相比,运行NoSQL(从MongoDB开始)有什么优势?是否仅通过使用存储即可获得优势,还是需要更改某些Drupal配置?


这是KárolyNégyesi提出的“权威”答案。他肯定知道将MongoDB与Drupal结合使用的优势。
kiamlaluno

读我的想法..如果有很多好处,对其他选择非常感兴趣,当然,优点也有缺点。
凯文

Answers:


13

MongoDB可用于将大多数或所有实体存储到快速的,面向文档的存储中。这种类型的存储方式比我们在Drupal核心中基于标准SQL的存储方式更好(基于“每个字段一个表”架构)。

在Drupal 7的当前状态下,您将具有:

  • SQL上存储的实体的基础表(即,用户表,节点表等)
  • SQL中存储的所有字段
  • 实体的基表属性在MongoDB中重复

这样可以快速查询MongoDB上的实体,并能够添加Open Source SQL数据库不支持的复杂索引(包括跨表的索引)。同时,您不会失去互操作性,因为实体的基表仍存储在SQL中,因此可以由仍仅使用SQL的模块(例如Flag)进行联接。

借助EntityFieldQuery机制可以使用这种类型的快速查询,它是一种以抽象方式在实体,其属性和其字段上构建查询的方法。核心中的默认实现将这些查询转换为SQL,但是MongoDB模块具有功能齐全的实现,可以直接满足来自MongoDB的那些查询。

多亏了ViewsEntityFieldQuery后端,您可以使用惯用的工具轻松利用此功能。唯一的缺点是不支持关系(但是实际上无论如何您很少需要它们-可以通过将其他数据推入实体对象并将其作为实体的其他属性添加来解决)。

简而言之,只要您的项目出现查询性能问题(当您拥有重要的数据集时(例如,从给定实体类型的千个实体中的十分之几开始)),MongoDB就会获得净收益。缺点很少。强烈推荐。


Damien Tournoud:如果只有几十分之一的条目遇到性能问题,则可能存在底层问题(DBMS配置,写得不好的查询,可以是任何东西)。如果底层SQL架构足够好,则不必在单个表上有一百万个条目之前就可以担心(但是如果考虑修订和多值字段,则字段可以快速增长)。
Pierre

我的观点恰恰是:我们的架构已规范化,因此查询性能非常差。为了提高查询性能,您需要对模式进行非规范化。在我们的案例中使用MongoDB的主要优点是它是某种“自动非规范化引擎”。
Damien Tournoud 2011年

当然,MongoDB在这里很棒,因为它是一个面向文档的数据库。将复杂的文档(例如实体)存储在SQL存储中只是愚蠢的。这是我们的默认实现,但这并不意味着您应该使用它:)
Damien Tournoud 2011年

@Pierre:Damien谈到了几万个实体,这可能与表行完全不同。例如,您可能在该实体上有10个或更多字段,然后您有10个其他表,每次加载该实体时都需要使用单独的查询来查询。MongoDB可以替换这些附加表,而不是实体基表。
Berdir 2011年

2
没有模块应该期望这些字段位于MySQL中。在Drupal 7上查询字段的唯一方法是EntityFieldQuery。如果直接查询字段表,请在模块中打开一个错误。我目前不知道任何这些模块。
Damien Tournoud

7

MongoDB和类似的数据库旨在以相对灵活的方式存储结构化(分层)数据。

例如,在中Drupal 7,当使用时field_sql_storage,每个字段都会得到它自己的表。当将10个字段附加到内容类型时,最终在数据库中有10个表。加载该节点时,field_sql_storage将对每个字段和每个节点(或使用时,多个节点node_load_multiple)执行查询。

使用mongodb_field_storage时,可以将节点的所有字段存储在单个文档中,并通过单个查询获取。

您还可以在MongoDB中存储其他内容,例如看门狗,会话,缓存,块。

您仍然需要MySQL,但是MongoDB不会替换它(仅适用于特定部分)。

另一个优点是MongoDB易于扩展,您可以将许多服务器添加到群集中以共享它们之间的数据。


嗨,Birdir!您是否知道如果将MongoDB放在现有的proyect中以测试性能,我是否会启用和禁用该模块而不会产生任何后果?我想尝试mongo,但是如果它不起作用怎么办?尝试安全吗?(我知道您不能保证,但是我想知道在大多数情况下会发生什么)
Beto Aveiga 2013年

1
好吧,一开始,您不能只是将其插入。每个字段都配置了它使用的存储后端,您将不得不更改/重新创建字段,重新创建视图(因为它们需要使用efq_views后端),如果您针对字段数据表编写了直接查询,则可能是您自己的查询。为了进行初始比较,在新安装中重新创建相同的结构可能会更容易。
Berdir 2013年

谢谢伯迪尔!几天前,我尝试了MongoDB,但是性能没有明显提高,但是我也不知道您现在告诉我的事情/变化。我认为“ MongoDB应该在较大的站点中有所作为”。我将再次尝试MongoDB。
Beto Aveiga

5

优点附带缺点。

Drupal整体上不能切换到MongoDb,因此您将必须支持两个数据库并确保它们可以很好地协同工作。

许多模块将无法与mongodb配合使用,因此您将失去互操作性。

除非您有紧迫的需求(例如系统的某些部分无法处理请求数量/或数据量),否则我不会切换。甚至当您开始接近极限时,也要在切换之前将硬件投入问题或进行调整。

我以为我之前已经回答过,所以几乎重复

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.