当集合之间存在关系时,mongodb 如何扩展?

how mongodb scales when you have relationships between collections?

我有一个mongodb链接文档(不能嵌入数据)

mongos集群(http://docs.mongodb.org/manual/core/sharding-introduction/)是否支持文档链接时的分片?

这对性能有何影响?

谢谢!

MongoDB中没有"document links"这样的东西。只是集合 A 文档中的字段恰好与集合 B 中文档的字段具有相同的值。DBRef 只是应用层的转换,数据库没有任何特殊处理。

对于分片效率而言,重要的是如何为引用的集合定义 shard key。当您搜索的字段是集合的分片键的一部分时,mongos 可以通过将查询重定向到正确的分片来加速它。

您可能希望属于集合 B 的同一文档的集合 A 的所有文档驻留在同一个分片上。这意味着你应该让 A 的分片键包含 A 的字段,它是 B 的唯一标识符(objectID、名称或其他)。

考虑到referenced documents没有什么特别之处,只是应用层推断的逻辑关系,而不是MongoDB本身,所以支持sharding。这适用于 "manual" 引用,以及 DBRefs。您甚至可以在 DBRef 属性 上进行分片,尽管我不确定您为什么要考虑 DBRef 应该具有固有的低基数。

手动和 DBRef 的性能都会受到影响,因为必须对数据执行多个查询 "join"。来自文档:

To resolve DBRefs, your application must perform additional queries to return the referenced documents. Many drivers have helper methods that form the query for the DBRef automatically. The drivers do not automatically resolve DBRefs into documents.