paulwong

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

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

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

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

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

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

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

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

          主站蜘蛛池模板: 杭州市| 陕西省| 沙雅县| 焦作市| 宜昌市| 临邑县| SHOW| 溧阳市| 班戈县| 宁明县| 宁晋县| 安丘市| 双桥区| 葫芦岛市| 古丈县| 湘潭市| 汝南县| 德阳市| 雅江县| 永顺县| 明溪县| 安平县| 乐山市| 南汇区| 满洲里市| 格尔木市| 正镶白旗| 屏山县| 铁岭县| 万州区| 靖宇县| 绥宁县| 酒泉市| 云安县| 台中市| 库伦旗| 牙克石市| 武义县| 洪湖市| 大足县| 扶绥县|