paulwong

          數(shù)據(jù)庫(kù)的防單點(diǎn)故障和分表分庫(kù)

          通常數(shù)據(jù)庫(kù)是安裝在一臺(tái)服務(wù)器上,如果服務(wù)器DOWN機(jī),則數(shù)據(jù)服務(wù)停止。這樣在生產(chǎn)環(huán)境是不合適的,必須部署兩臺(tái)以上的服務(wù)器且都安裝有相同數(shù)據(jù)的數(shù)據(jù)庫(kù)。這樣就產(chǎn)生了一個(gè)問(wèn)題,同一份數(shù)據(jù)在不同的機(jī)子上,會(huì)導(dǎo)致數(shù)據(jù)不同步的問(wèn)題。一般的方案是:

          服務(wù)端:
          互責(zé)數(shù)據(jù)同步,一臺(tái)服務(wù)器專門(mén)做寫(xiě)操作,其他服務(wù)器只做讀操作,即主從模式。當(dāng)主服務(wù)器DOWN機(jī)時(shí),會(huì)在從服務(wù)器中選出一臺(tái)做主服務(wù)器。在MONGODB中叫REPLICATION。

          客戶端:
          要判斷當(dāng)前與數(shù)據(jù)庫(kù)的鏈接,如果是讀操作,則使用與從服務(wù)器的鏈接,如果是寫(xiě)操作,則使用與主服務(wù)器的鏈接。這樣的判斷一般是由驅(qū)動(dòng)程序去做,配置的時(shí)候如果是MYSQL,就要使用REPLYCATION的驅(qū)動(dòng)。

          如果數(shù)據(jù)庫(kù)里的某張表數(shù)據(jù)太多,會(huì)導(dǎo)致簡(jiǎn)單的查詢會(huì)需時(shí)過(guò)長(zhǎng)的問(wèn)題。一般的方案是限制每張表中不能放太多的數(shù)據(jù),如第一個(gè)月的數(shù)據(jù)放一張表,下一個(gè)月的數(shù)據(jù)放第二張表,這種做法稱為SHARDING,分表。但這樣會(huì)導(dǎo)致查詢的復(fù)雜性,如數(shù)據(jù)在第二張表,則要具體指明表名,否則查不出數(shù)據(jù)。目前的數(shù)據(jù)庫(kù),可以事先指定分表的規(guī)則,這樣查詢的語(yǔ)句不需改變,數(shù)據(jù)庫(kù)端會(huì)自動(dòng)判斷數(shù)據(jù)在哪張表,然后路由到那張表,去查找數(shù)據(jù)然后返回給客戶端。ORACLE叫分區(qū)表,MONGODB叫AUTO SHARDING。

          服務(wù)端:
          需事先指定數(shù)據(jù)分表規(guī)則,這樣收到查詢語(yǔ)句時(shí)數(shù)據(jù)庫(kù)就知道數(shù)據(jù)在哪張表中。

          客戶端:
          查詢數(shù)據(jù)時(shí)無(wú)需再指定分區(qū)表名了

          posted on 2014-03-23 21:27 paulwong 閱讀(1427) 評(píng)論(0)  編輯  收藏 所屬分類: MYSQLMONGODB

          主站蜘蛛池模板: 泰兴市| 天长市| 兴安盟| 广宗县| 十堰市| 新田县| 开平市| 黄浦区| 启东市| 竹山县| 台前县| 道孚县| 博乐市| 焉耆| 巴东县| 尚义县| 杭州市| 厦门市| 抚州市| 大田县| 巴彦县| 永安市| 汽车| 毕节市| 株洲市| 嘉定区| 天津市| 卢龙县| 廉江市| 河北省| 中方县| 达拉特旗| 英超| 禹城市| 德州市| 罗甸县| 台湾省| 玉树县| 滨州市| 南阳市| 焦作市|