數(shù)據(jù)庫的防單點故障和分表分庫
通常數(shù)據(jù)庫是安裝在一臺服務器上,如果服務器DOWN機,則數(shù)據(jù)服務停止。這樣在生產(chǎn)環(huán)境是不合適的,必須部署兩臺以上的服務器且都安裝有相同數(shù)據(jù)的數(shù)據(jù)庫。這樣就產(chǎn)生了一個問題,同一份數(shù)據(jù)在不同的機子上,會導致數(shù)據(jù)不同步的問題。一般的方案是:服務端:
互責數(shù)據(jù)同步,一臺服務器專門做寫操作,其他服務器只做讀操作,即主從模式。當主服務器DOWN機時,會在從服務器中選出一臺做主服務器。在MONGODB中叫REPLICATION。
客戶端:
要判斷當前與數(shù)據(jù)庫的鏈接,如果是讀操作,則使用與從服務器的鏈接,如果是寫操作,則使用與主服務器的鏈接。這樣的判斷一般是由驅(qū)動程序去做,配置的時候如果是MYSQL,就要使用REPLYCATION的驅(qū)動。
如果數(shù)據(jù)庫里的某張表數(shù)據(jù)太多,會導致簡單的查詢會需時過長的問題。一般的方案是限制每張表中不能放太多的數(shù)據(jù),如第一個月的數(shù)據(jù)放一張表,下一個月的數(shù)據(jù)放第二張表,這種做法稱為SHARDING,分表。但這樣會導致查詢的復雜性,如數(shù)據(jù)在第二張表,則要具體指明表名,否則查不出數(shù)據(jù)。目前的數(shù)據(jù)庫,可以事先指定分表的規(guī)則,這樣查詢的語句不需改變,數(shù)據(jù)庫端會自動判斷數(shù)據(jù)在哪張表,然后路由到那張表,去查找數(shù)據(jù)然后返回給客戶端。ORACLE叫分區(qū)表,MONGODB叫AUTO SHARDING。
服務端:
需事先指定數(shù)據(jù)分表規(guī)則,這樣收到查詢語句時數(shù)據(jù)庫就知道數(shù)據(jù)在哪張表中。
客戶端:
查詢數(shù)據(jù)時無需再指定分區(qū)表名了
posted on 2014-03-23 21:27 paulwong 閱讀(1426) 評論(0) 編輯 收藏 所屬分類: MYSQL 、MONGODB