paulwong

          數據庫的防單點故障和分表分庫

          通常數據庫是安裝在一臺服務器上,如果服務器DOWN機,則數據服務停止。這樣在生產環境是不合適的,必須部署兩臺以上的服務器且都安裝有相同數據的數據庫。這樣就產生了一個問題,同一份數據在不同的機子上,會導致數據不同步的問題。一般的方案是:

          服務端:
          互責數據同步,一臺服務器專門做寫操作,其他服務器只做讀操作,即主從模式。當主服務器DOWN機時,會在從服務器中選出一臺做主服務器。在MONGODB中叫REPLICATION。

          客戶端:
          要判斷當前與數據庫的鏈接,如果是讀操作,則使用與從服務器的鏈接,如果是寫操作,則使用與主服務器的鏈接。這樣的判斷一般是由驅動程序去做,配置的時候如果是MYSQL,就要使用REPLYCATION的驅動。

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

          服務端:
          需事先指定數據分表規則,這樣收到查詢語句時數據庫就知道數據在哪張表中。

          客戶端:
          查詢數據時無需再指定分區表名了

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

          主站蜘蛛池模板: 蚌埠市| 保亭| 云霄县| 宜丰县| 雅安市| 蒲江县| 醴陵市| 巨鹿县| 中西区| 鲜城| 莱州市| 惠水县| 绥滨县| 苍南县| 华蓥市| 苗栗县| 秀山| 申扎县| 鄂尔多斯市| 望城县| 龙州县| 潜山县| 淮安市| 磐安县| 柯坪县| 德江县| 峡江县| 洛宁县| 故城县| 年辖:市辖区| 连云港市| 霍林郭勒市| 兴安盟| 汤阴县| 南木林县| 泰宁县| 乳山市| 万盛区| 色达县| 庆安县| 贵港市|