2015-09-21 18 views

回答

2

考慮到referenced documents沒有什麼特別之處,它只是由應用層而不是MongoDB本身推斷的邏輯關係,支持sharding。這適用於「手動」引用以及DBRefs。你甚至可以在一個DBRef屬性上分割,儘管我不確定你爲什麼想要考慮一個DBRef應該有固有的低基數。

手動和DBRef的性能都有影響,因爲必須執行多個查詢以「連接」數據。從文檔:

要解決DBRefs,您的應用程序必須執行額外的查詢,以 返回引用的文檔。許多驅動程序都有助手方法,它們自動爲DBRef形成查詢。驅動程序不要 自動將DBRefs解析爲文檔。

1

MongoDB中沒有「文檔鏈接」這樣的東西。只是集合A的文檔中的字段碰巧與集合B中的文檔的字段具有相同的值。DBRef只是應用程序層上的轉換,並且不受數據庫的任何特殊處理。

對於分片效率而言,重要的是如何爲引用的集合定義shard key。當您搜索的字段是集合的分片鍵的一部分時,mongos可以通過將查詢重定向到正確的分片來加速它。

您可能希望屬於集合B的同一文檔的集合A的所有文檔都駐留在同一個分片上。這意味着你應該讓A的分片鍵包含A的字段,該字段是B的唯一標識符(objectID,name或其他)。

相關問題