Answers:
MongoDB可用于将大多数或所有实体存储到快速的,面向文档的存储中。这种类型的存储方式比我们在Drupal核心中基于标准SQL的存储方式更好(基于“每个字段一个表”架构)。
在Drupal 7的当前状态下,您将具有:
这样可以快速查询MongoDB上的实体,并能够添加Open Source SQL数据库不支持的复杂索引(包括跨表的索引)。同时,您不会失去互操作性,因为实体的基表仍存储在SQL中,因此可以由仍仅使用SQL的模块(例如Flag)进行联接。
借助EntityFieldQuery机制可以使用这种类型的快速查询,它是一种以抽象方式在实体,其属性和其字段上构建查询的方法。核心中的默认实现将这些查询转换为SQL,但是MongoDB模块具有功能齐全的实现,可以直接满足来自MongoDB的那些查询。
多亏了Views的EntityFieldQuery后端,您可以使用惯用的工具轻松利用此功能。唯一的缺点是不支持关系(但是实际上无论如何您很少需要它们-可以通过将其他数据推入实体对象并将其作为实体的其他属性添加来解决)。
简而言之,只要您的项目出现查询性能问题(当您拥有重要的数据集时(例如,从给定实体类型的千个实体中的十分之几开始)),MongoDB就会获得净收益。缺点很少。强烈推荐。
MongoDB和类似的数据库旨在以相对灵活的方式存储结构化(分层)数据。
例如,在中Drupal 7
,当使用时field_sql_storage
,每个字段都会得到它自己的表。当将10个字段附加到内容类型时,最终在数据库中有10个表。加载该节点时,field_sql_storage
将对每个字段和每个节点(或使用时,多个节点node_load_multiple
)执行查询。
使用mongodb_field_storage时,可以将节点的所有字段存储在单个文档中,并通过单个查询获取。
您还可以在MongoDB中存储其他内容,例如看门狗,会话,缓存,块。
您仍然需要MySQL,但是MongoDB不会替换它(仅适用于特定部分)。
另一个优点是MongoDB易于扩展,您可以将许多服务器添加到群集中以共享它们之间的数据。