SQL Server數據庫大型應用解決方案總結(轉載)

轉載地址:http://hb.qq.com/a/20120111/000216.htmsql

隨着互聯網應用的普遍普及,海量數據的存儲和訪問成爲了系統設計的瓶頸問題。對於一個大型的互聯網應用,天天百萬級甚至上億的PV無疑對數據庫形成了至關高的負載。對於系統的穩定性和擴展性形成了極大的問題。數據庫

  1、負載均衡技術安全

  負載均衡集羣是由一組相互獨立的計算機系統構成,經過常規網絡或專用網絡進行鏈接,由路由器銜接在一塊兒,各節點相互協做、共同負載、均衡壓力,對客戶端來講,整個羣集能夠視爲一臺具備超高性能的獨立服務器。服務器

  一、實現原理網絡

  實現數據庫的負載均衡技術,首先要有一個能夠控制鏈接數據庫的控制端。在這裏,它截斷了數據庫和程序的直接鏈接,由全部的程序來訪問這個中間層,而後再由中間層來訪問數據庫。這樣,咱們就能夠具體控制訪問某個數據庫了,而後還能夠根據數據庫的當前負載採起有效的均衡策略,來調整每次鏈接到哪一個數據庫。併發

  二、實現多數據庫數據同步負載均衡

  對於負載均衡,最重要的就是全部服務器的數據都是實時同步的。這是一個集羣所必需的,由於,若是數不據實時、不一樣步,那麼用戶從一臺服務器讀出的數據,就有別於從另外一臺服務器讀出的數據,這是不能容許的。因此必須實現數據庫的數據同步。這樣,在查詢的時候就能夠有多個資源,實現均衡。比較經常使用的方法是Moebius for SQL Server集羣,Moebius for SQL Server集羣採用將核心程序駐留在每一個機器的數據庫中的辦法,這個核心程序稱爲Moebius for SQL Server 中間件,主要做用是監測數據庫內數據的變化並將變化的數據同步到其餘數據庫中。數據同步完成後客戶端纔會獲得響應,同步過程是併發完成的,因此同步到多個數據庫和同步到一個數據庫的時間基本相等;另外同步的過程是在事務的環境下完成的,保證了多份數據在任什麼時候刻數據的一致性。正由於Moebius 中間件宿主在數據庫中的創新,讓中間件不但能知道數據的變化,並且知道引發數據變化的SQL語句,根據SQL語句的類型智能的採起不一樣的數據同步的策略以保證數據同步成本的最小化。分佈式

 

 

SQL Server數據庫大型應用解決方案總結

 

數據條數不多,數據內容也不大,則直接同步數據


  數據條數不多,可是裏面包含大數據類型,好比文本,二進制數據等,則先對數據進行壓縮而後再同步,從而減小網絡帶寬的佔用和傳輸所用的時間。sqlserver

 

  數據條數不少,此時中間件會拿到形成數據變化的SQL語句, 而後對SQL語句進行解析,分析其執行計劃和執行成本,並選擇是同步數據仍是同步SQL語句到其餘的數據庫中。此種狀況應用在對錶結構進行調整或者批量更改數據的時候很是有用。性能

  三、優缺點

  (1) 擴展性強:當系統要更高數據庫處理速度時,只要簡單地增長數據庫服務器就 能夠獲得擴展。

  (2) 可維護性:當某節點發生故障時,系統會自動檢測故障並轉移故障節點的應用,保證數據庫的持續工做。

  (3) 安全性:由於數據會同步的多臺服務器上,能夠實現數據集的冗餘,經過多份數據來保證安全性。另外它成功地將數據庫放到了內網之中,更好地保護了數據庫的安全性。

  (4) 易用性:對應用來講徹底透明,集羣暴露出來的就是一個IP

  (1) 不可以按照Web服務器的處理能力分配負載。

  (2) 負載均衡器(控制端)故障,會致使整個數據庫系統癱瘓。

  2、數據庫的讀寫分離

  第2頁:2、數據庫的讀寫分離

  1,實現原理

  讀寫分離簡單的說是把對數據庫讀和寫的操做分開對應不一樣的數據庫服務器,這樣能有效地減輕數據庫壓力,也能減輕io壓力。主數據庫提供寫操做,從數據庫提供讀操做,其實在不少系統中,主要是讀的操做。當主數據庫進行寫操做時,數據要同步到從的數據庫,這樣纔能有效保證數據庫完整性。

 

 

SQL Server數據庫大型應用解決方案總結

 

 

 

(ebay的讀寫比率是260:1,ebay的讀寫分離)

 

SQL Server數據庫大型應用解決方案總結

 

 

 

(微軟數據庫分發)


  2,實現方法

 

  在MS Sql server中可使用發佈定義的方式實現數據庫複製,實現讀寫分離,複製是將一組數據從一個數據源拷貝到多個數據源的技術,是將一份數據發佈到多個存儲站點上的有效方式。使用複製技術,用戶能夠將一份數據發佈到多臺服務器上。複製技術能夠確保分佈在不一樣地點的數據自動同步更新,從而保證數據的一致性。SQL SERVER複製技術類型有三種,分別是:快照複製、事務複製、合併複製。SQL SERVER 主要採用出版物、訂閱的方式來處理複製。源數據所在的服務器是出版服務器,負責發表數據。出版服務器把要發表的數據的全部改變狀況的拷貝複製到分發服務器,分發服務器包含有一個分發數據庫,可接收數據的全部改變,並保存這些改變,再把這些改變分發給訂閱服務器。

  3,優缺點

  (1)數據的實時性差:數據不是實時同步到自讀服務器上的,當數據寫入主服務器後,要在下次同步後才能查詢到。

  (2)數據量大時同步效率差:單表數據量過大時插入和更新因索引,磁盤IO等問題,性能會變的不好。

  (3)同時鏈接多個(至少兩個)數據庫:至少要鏈接到兩個數據數據庫,實際的讀寫操做是在程序代碼中完成的,容易引發混亂

  (4)讀具備高性能高可靠性和可伸縮:只讀服務器,由於沒有寫操做,會大大減輕磁盤IO等性能問題,大大提升效率;只讀服務器能夠採用負載均衡,主數據庫發佈到多個只讀服務器上實現讀操做的可伸縮性。

  第3頁:3、數據庫/數據表 拆分(分佈式)

  經過某種特定的條件,將存放在同一個數據庫中的數據分散存放到多個數據庫上,實現分佈存儲,經過路由規則路由訪問特定的數據庫,這樣一來每次訪問面對的就不是單臺服務器了,而是N臺服務器,這樣就能夠下降單臺機器的負載壓力。提示:sqlserver 2005版本以後,能夠友好的支持「表分區」。

  垂直(縱向)拆分:是指按功能模塊拆分,好比分爲訂單庫、商品庫、用戶庫...這種方式多個數據庫之間的表結構不一樣。

  水平(橫向)拆分:將同一個表的數據進行分塊保存到不一樣的數據庫中,這些數據庫中的表結構徹底相同。

 

 

SQL Server數據庫大型應用解決方案總結

 

 

 

(縱向拆分)

SQL Server數據庫大型應用解決方案總結

 

 

(橫向拆分)


  1,實現原理

 

  使用垂直拆分,主要要看應用類型是否合適這種拆分方式,如系統能夠分爲,訂單系統,商品管理系統,用戶管理系統業務系統比較明的,垂直拆分能很好的起到分散數據庫壓力的做用。業務模塊不明晰,耦合(表關聯)度比較高的系統不適合使用這種拆分方式。可是垂直拆分方式並不能完全解決全部壓力問題,例如 有一個5000w的訂單表,操做起來訂單庫的壓力仍然很大,如咱們須要在這個表中增長(insert)一條新的數據,insert完畢後,數據庫會針對這張表從新創建索引,5000w行數據創建索引的系統開銷仍是不容忽視的,反過來,假如咱們將這個表分紅100個table呢,從table_001一直到table_100,5000w行數據平均下來,每一個子表裏邊就只有50萬行數據,這時候咱們向一張只有50w行數據的table中insert數據後創建索引的時間就會呈數量級的降低,極大了提升了DB的運行時效率,提升了DB的併發量,這種拆分就是橫向拆分

  2,實現方法

  垂直拆分,拆分方式實現起來比較簡單,根據表名訪問不一樣的數據庫就能夠了。橫向拆分的規則不少,這裏總結前人的幾點,

  (1)順序拆分:如能夠按訂單的日前按年份才分,2003年的放在db1中,2004年的db2,以此類推。固然也能夠按主鍵標準拆分。

  優勢:可部分遷移

  缺點:數據分佈不均,可能2003年的訂單有100W,2008年的有500W。

  (2)hash取模分: 對user_id進行hash(或者若是user_id是數值型的話直接使用user_id的值也可),而後用一個特定的數字,好比應用中須要將一個數據庫切分紅4個數據庫的話,咱們就用4這個數字對user_id的hash值進行取模運算,也就是user_id%4,這樣的話每次運算就有四種可能:結果爲1的時候對應DB1;結果爲2的時候對應DB2;結果爲3的時候對應DB3;結果爲0的時候對應DB4,這樣一來就很是均勻的將數據分配到4個DB中。

  優勢:數據分佈均勻

  缺點:數據遷移的時候麻煩;不能按照機器性能分攤數據 。

  (3)在認證庫中保存數據庫配置

  就是創建一個DB,這個DB單獨保存user_id到DB的映射關係,每次訪問數據庫的時候都要先查詢一次這個數據庫,以獲得具體的DB信息,而後才能進行咱們須要的查詢操做。

  優勢:靈活性強,一對一關係

  缺點:每次查詢以前都要多一次查詢,會形成必定的性能損失。

相關文章
相關標籤/搜索