通常數(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ū)表名了