2013-08-28 70 views
5

我對這是如何工作有點困惑。在對mysql進行分片時,我們有一些表格,通常是帶有參考數據的小表格,整個分片。這是爲了使連接。如果我們在mongo中有小的集合,那麼我們不會在分片設置中分割,它們會發生什麼?他們被送到每個碎片,還是留在第一個碎片?如果一個擁有許多應用程序服務器的嚴重分片系統中的所有進程都擊中了一臺服務器,這就會成爲潛在的瓶頸。Mongodb - 分片和不分片的集合

+0

您必須手動告訴(命令)哪些集合被分片。對於較小的集合,不要分割它,因此它將只保留在一個分片中。任何已完成的查詢(通過該集合)將僅被髮送到持有該集合的分片。請參閱:http:// docs.mongodb.org/manual/tutorial/deploy-shard-cluster /#sharding-setup-shard-collection' –

+0

你不碎片的集合將駐留在第一個碎片上,是的它可能是一個瓶頸,也有分佈這些集合的討論,但是,目前的MongoDB並不是 – Sammaye

回答

0

在具有自動分割功能的mongodb中,分割的集合將以某種方式均勻分佈在您擁有的所有分片上。通過那些你不可能分割的集合(不分片),你可以指定一個primary shard它們將駐留在哪裏。此主分片是特定數據庫的給定分片,因此它位於每個數據庫級別。可以移動,並且可以針對不同的數據庫而不同。

存在shard標記的概念,可以影響sharded集合的放置位置。基本上,您可以將集合或集合的一部分約束爲存儲在特定的一組碎片中。 DOCS

+0

我不確定標籤感知分片是否適用於非分片集合,但從來沒有測試過,但是,根據事實一個非分片集合將永遠不會被平衡我會說沒有 – Sammaye

+0

這就是爲什麼我寫到「你可以影響分片集合在哪裏放置」,但是可以說你可能會把一個分片集合完全放在一個分片上,幾乎(可能恰好)是非分片集合的行爲。我相當確定你不能標記未粘貼的集合。 – attish

+0

謝謝大家。這就是我所關心的。對我而言,這是一個潛在的威脅。當然,您在Mongo中沒有必要擔心,這是將較小表格複製到各種分片中的主要原因之一。處理這些問題的另一種方式是建立一個不同的複製環境。我猜測,在Mongo環境中,你不會通過一個唯一的鍵來執行狀態等操作,而是使用想要在報表中顯示的實際狀態等。如果要更改它,這只是一個問題狀態文本。 – CargoMeister