2012-04-10 70 views
2

我已經在使用的NoSQL如CouchDB的或MongoDB中(其中我比較熟悉後者)讀了幾本書小。縮放和性能SQL或NoSQL的

什麼會在性能方面更爲合適 - 尤其是縮放:

  1. 個人DB的,如果需要
  2. 單個MongoDB中被劃分的使用分片

我離開了SQL上獨立的服務器託管縮放技術,比如主從(這是我所理解的,就是你用擴展服務器的應用程序來擴展SQL的方式)。

在我的應用程序的每個「賬戶」,將僅用於個人使用,將不太可能增長到瘋狂的大小或訪問。所以我想我可以將應用程序託管在一臺或幾臺服務器上,數據根據需要分佈在一臺或多臺服務器上。當一個SQL挖掘出來時,我會將數據庫的一半(根據使用情況而定)遷移到另一個服務器(遠程或不是遠程)。這在理論上應該提供一些性能提升,允許我稍微努力一點點擴大?

中的NoSQL解決方案或者共享聽起來很簡單 - 唯一的副作用是我需要保持所有記錄在同一個數據庫 - 降低個人安全輕微 - 理論?

您對這件事有什麼經驗/意見?

問候, 亞歷

回答

3

這個問題是有點混亂。您正在詢問兩種不同可伸縮性方法的性能特徵......這使得兩種可伸縮性方法相當相似,但事實並非如此。

有你問這裏有兩個不同的方法;我會用標準術語來描述它們。這些不是NoSQL特有的,並且適用於任何技術。

垂直縮放,它是一個非常大的單個服務器。

水平擴展這是許多小型服務器羣集在一起。

這兩種解決方案與他們的不同。橫向擴展能夠以一致的小成本逐步增加容量。每次單個服務器的容量已滿時,垂直縮放需要預付大量費用。除此之外,通常由於這個因素,水平縮放是架構師用來縮放的方法。 Google在90年代末證明了這種方法的可行性。

的MongoDB和其他NoSQL的解決方案,用這種方式來實現可擴展性。在MongoDB中,它被稱爲分片。現在解決性能特點。在垂直方法中,最終發生容量增長的是這臺單機本身實際上是一系列集羣組件。巨大的硬盤陣列,主板陣列和cpus和ram。將兩者進行對比是不可能的,因爲它的大部分依賴於實際使用的硬件和環境。有一點很清楚。爲了達到類似的性能,橫向方法將更便宜,更簡單。

水平方法也有一些好處。在單臺機器上會出現一些自然限制,通過在多臺機器上分配負載來避免這種限制。

最後,在旁註中,主/從不用於縮放。爲了提供更多讀取能力,它將所有寫入操作相乘。這意味着每個附加節點的好處越來越少。雖然它可以稍微提高讀取容量,但它的目的是提供高可用性,而不是擴展性。

+0

我不完全表達自己以前,赦免我的錯誤:) 我試圖問的是,是否將每個用戶的數據分離到不同的數據庫(因此可能的服務器 - 無論是虛擬的還是物理的)都會獲得類似的縮放比例導致分片?這是不是像水平縮放?如果每個用戶都可以運行自己獨特的數據庫,那麼理論上我可以在任何數量的廉價服務器上平衡SQL的負載嗎? – 2012-04-11 13:51:22