2012-08-30 29 views
2

我想實現我們的MongoDB數據庫分片,這是該方案在數據庫中實現水平MongoDB的分片和離開的集合unsharded

,我們有一臺服務器運行配置服務器

我們有2臺服務器上運行mongod的情況下,所謂的節點1和節點

我們有一個服務器運行mongos

我已經添加了服務器節點1和節點作爲mongos碎片服務器外殼使用命令

db.runCommand({addshard:「serverhostname [:port]」});

後來我在節點1創建數據庫,並從Mongos

啓用拆分該數據庫

現在我們有2級碎片的服務器上,每個MongoDB的文檔,mongos應該把其中創建節點1(在數據庫實際駐留)的一些收藏品和節點2上的一些集合。

我創造了300個集的mongos但仍然是所有藏品都將只有一臺服務器什麼是錯在上述支撐

注: - 由於我在應用層我不能碎片升級的位置是不在集合級別上,我有一個腳本,可根據需要動態創建多個集合。

請提供您的建議,關於如何在數據庫級別進行分片,以便集合在所有分片服務器之間平均分配。

我正在尋找像

一些解決辦法,如果我自動創建300個集mongos應分別在兩個分片服務器上創建大約150或100的集合。

提前感謝您加入並幫助我解決此問題。

回答

2

集合不會自動分佈在各個分片上,直到您在其上添加enable sharding,然後添加數據。這些分片集合然後將在這兩個分片上有數據(分成塊並自動平衡)。

在實際上對集合運行命令並且在其中有足夠的數據以便它們開始拆分和遷移塊之前,它們都將保留在它們所在的位置。

這是因爲每個數據庫都有一個不會更改的主分片。這就是最初創建數據庫的地方,以及所有非分片數據將存活的地方。如果添加另一個數據庫,則mongos應在第二個分片上創建它,併爲每個創建的數據庫創建一個備用(或多於兩個的循環)。在每種情況下,直到您對該集合進行分片之前,它將僅保留在該數據庫的主分片上。

+0

感謝您提供有價值的信息亞當,但我們動態地創建集合讓我們每天說300個集合在這種情況下該做什麼如果我們在集合層次中分片,如何分割這些東西,我們最終將分割數百個集合。我們只需要在數據庫級別分片。對於這種情況,每天都有創建集合(比如每個網站用戶)的方案。 –

+0

這實際上並不是真正在MongoDB中如何工作,並且沒有辦法自動完成您描述的內容。您可以創建2個數據庫,以便在每個分片上至少有一個數據庫,然後在創建數據庫時對其進行交替或循環掃描,以便均勻分割,但不會自動平衡,也無法輕鬆添加其他分片。 –

+0

嘿,這是一個非常好的建議,我提到了kristina是一個mongodb開發人員給出的答案,在這裏她說這發生了,但它不會發生在我們身上[Stack overflow posting](http://stackoverflow.com/questions/ 10329484 /定義一個分片鍵自動爲動態收集和建議對) –