2012-02-08 21 views
2

在一臺更強大的機器上實現mongodb分片與說100個分片只是爲了實現更高的concurrenct寫入數據庫,因爲我被告知,每個monogod.exe進程都有一個全局鎖?假設這是可能的,那麼這個問題會給我更高的寫入併發性嗎?MongoDB在一臺機器上分片

+0

100個碎片可能太多了,但如果在強壯的服務器上使用幾個碎片獲得更好的寫入性能,我不會感到驚訝。儘管如此,爲什麼不把你的碎片放在單獨的較不健壯的服務器上?你期望得到什麼樣的插入/更新率? – 2012-02-09 00:01:35

+0

主要原因是我需要做的POC的可用性,我想知道是否可以模擬我可用的服務器的分片環境。我假設一個擁有8核心和32GB內存的服務器被認爲是強壯的。我希望能夠獲得1000個併發寫入和10,000個併發讀取,其中每個讀取或寫入請求將不會超過0.5秒鐘由數據庫提供服務。這對於MongoDB更合理嗎?每個讀取的查詢結果大小和要寫入的數據量並不大,這主要是爲了向db提供許多併發的讀取或寫入請求。 – iCode 2012-02-09 02:54:12

+0

你在這裏深刻體會到了。我甚至有道理嗎? – iCode 2012-02-09 02:57:30

回答

9

在機器上運行多個mongods不是一個好主意。每個mongod進程都會嘗試使用所有可用的內存,強制其他mongod的內存映射頁面內存不足。這將在大多數情況下創建大量的交換。

全局數據庫的鎖一般不會有問題,因爲是體現在:http://blog.pythonisito.com/2011/12/mongodbs-write-lock.html

只用一臺機器一個mongod的(但它的罰款添加mongos或配置服務器以及),除非它是一些簡單的測試。

歡呼聲, 德里克

1

唯一使用情況下,我發現運行在同一臺服務器上幾個mongod的是增加高延遲連接複製速度。

正如Derick強調的那樣,在運行mongodb時,寫入鎖並不是真正的問題。

要回答你的問題:你能證明蒙戈縮放每臺機器的幾個實例(每臺服務器SEMS 4個實例是不夠的),如果你的測試不涉及太多的數據(否則首頁輸出將大大decrase你的表現,我已經測試過了)

但是,實例仍然會競爭的資源。你所要做的就是將數據庫鎖定問題轉移到資源鎖定問題上。

2

我完全不同意。我們的設置中每盒運行8個碎片。它由兩個頭節點組成,每個頭節點都有兩臺用於複製的機器。總共6盒。這些帶有大約120GB內存,32個內核和2TB的強壯框。每盒有8個碎片(爲了歷史目的,我們可以將其設置爲8),我們確保我們有效利用CPU。 RAM自行排除。你必須觀察指標,並確保你沒有太多分頁,但是如果你確實把SSD硬盤泄漏到磁盤驅動器上,那麼SSD硬盤就不算太壞。

+0

RAM如何自我排序?另外,您是否決定爲更高的寫入吞吐量或其他功能設置這麼多碎片? – iCode 2014-04-22 02:07:46

+0

我們使用了Mongo Map Reduce(MR),它需要CPU的能力來處理所有的數據。原始分片設置了每個核心的碎片。這給了我們最大的CPU。從那以後,這個盒子已經升級了,所以我們現在每4個內核碎片。至於內存,它是將索引保存在RAM中的練習。數據永遠不會適應,所以不要擔心。我們監視我們的索引相對於RAM的大小,並已升級到適應。我們也刪除了我們不需要的索引。 – 2014-04-22 16:54:51

0

是的,你可以,事實上,這是我們爲50+密爾寫重型數據庫所做的。只要確保每個mongod的所有索引都適合RAM,並且還有增長和維護的空間。

但是,有一個小小的折衷:根據您的目標QPS是什麼,這種共享需要機器具有更大的馬力,而在單臺機器上分片將不會,並且在大多數情況下,您可以取消商品,更便宜的硬件。不管是什麼情況,請進行一系列性能測試(ageinst IO,Network,PQS等)並仔細建立您的基準並考慮SSD驅動器的存儲,這聽起來有點偏頗,但Linux XFS存儲器也是需要考慮的事情。

相關問題