有時(shí)候出于某些特定的原因,需要在服務(wù)器端與客戶(hù)端之間進(jìn)行數(shù)據(jù)的同步。如下圖所示,某個(gè)公司在各地有銷(xiāo)售辦事處。為了便于管理,在每個(gè)銷(xiāo)售辦事處都設(shè)置了SQL Server客戶(hù)端應(yīng)用程序。每天晚上總公司的數(shù)據(jù)庫(kù)服務(wù)器需要與各自的辦事處客戶(hù)端之間的數(shù)據(jù)進(jìn)行同步。這主要是通過(guò)服務(wù)器與客戶(hù)端之間的數(shù)據(jù)復(fù)制功能來(lái)實(shí)現(xiàn)的。在SQL Server中有這方面現(xiàn)成的解決方案,實(shí)現(xiàn)起來(lái)也比較簡(jiǎn)單。為此對(duì)于這個(gè)具體的實(shí)現(xiàn),筆者就不做過(guò)多闡述了。筆者現(xiàn)在要就講的是,在設(shè)計(jì)并實(shí)現(xiàn)這個(gè)解決方案的時(shí)候,需要注意哪些問(wèn)題。

注意事項(xiàng)一:按計(jì)劃同步與安需同步要一起實(shí)現(xiàn)。
這個(gè)解決方案的關(guān)鍵點(diǎn)就是如何保證客戶(hù)端與服務(wù)器之間數(shù)據(jù)的同步問(wèn)題。一般來(lái)說(shuō),這個(gè)同步是有計(jì)劃的,是自動(dòng)完成的。如每天晚上12點(diǎn)自動(dòng)與總公司的數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行數(shù)據(jù)同步。把客戶(hù)端的數(shù)據(jù)傳遞給服務(wù)器,然后再把數(shù)據(jù)庫(kù)中最新的數(shù)據(jù)下載下來(lái)。這個(gè)動(dòng)作往往不需要手工去干預(yù),只要?jiǎng)傞_(kāi)始設(shè)置好,這個(gè)同步工作就會(huì)自動(dòng)完成。
但是,除了可以根據(jù)計(jì)劃來(lái)實(shí)現(xiàn)同步的話(huà),有時(shí)會(huì)也需要能夠按需來(lái)進(jìn)行同步。如在2009年6月1日晚上11點(diǎn)實(shí)現(xiàn)同步后,在6月2日早上7點(diǎn)之前總公司定義好了最新的價(jià)格。6月2日以后的價(jià)格要按這個(gè)最新的價(jià)格表執(zhí)行。此時(shí)在總公司服務(wù)器處,就需要強(qiáng)制更新各個(gè)客戶(hù)端的價(jià)格。這個(gè)就在計(jì)劃之外了。另外需要注意的是,根據(jù)計(jì)劃同步的時(shí)候,往往同步的是全部的數(shù)據(jù),包括銷(xiāo)售數(shù)據(jù)、庫(kù)存量、新增加會(huì)員信息等等。而按需實(shí)現(xiàn)同步的話(huà),往往只是針對(duì)特定的表,如銷(xiāo)售價(jià)格等等。所以在按需同步時(shí),必須要能夠?qū)崿F(xiàn)根據(jù)特定表來(lái)進(jìn)行同步。如果在按需同步時(shí),同步不必要的數(shù)據(jù),則可能需要比較長(zhǎng)的時(shí)間。而按需同步往往是用來(lái)針對(duì)一些特殊的情況,時(shí)間比較緊。所以只針對(duì)特定的表進(jìn)行同步,以減少同步的時(shí)間,這是非常必要的,也是非常實(shí)際的一個(gè)問(wèn)題。
注意事項(xiàng)二:可以通過(guò)多種方式與服務(wù)器實(shí)現(xiàn)數(shù)據(jù)同步。
一般來(lái)說(shuō),通過(guò)VPN隧道在客戶(hù)端與服務(wù)器之間實(shí)現(xiàn)數(shù)據(jù)的復(fù)制,這是比較可行的方案。因?yàn)樵诳蛻?hù)端與服務(wù)器端之間建立VPN隧道,不僅可以增加數(shù)據(jù)的安全,而且還可以提高復(fù)制的效率。其整個(gè)同步過(guò)程所花費(fèi)的時(shí)間是比較短的。但是其代價(jià)也是比較高的。如果辦事處與總公司的位置不是很遠(yuǎn),如在同一個(gè)城市,則對(duì)企業(yè)來(lái)說(shuō),通過(guò)VPN隧道來(lái)實(shí)現(xiàn)客戶(hù)端與服務(wù)器端數(shù)據(jù)的同步就顯得有點(diǎn)浪費(fèi)。
所以,在設(shè)計(jì)這個(gè)解決方案的時(shí)候,數(shù)據(jù)庫(kù)管理員最好能夠考慮一下,能否采用其他一些更加便宜的方式來(lái)實(shí)現(xiàn)同步。如直接通過(guò)internet來(lái)實(shí)現(xiàn)同步。雖然這個(gè)方式可能會(huì)發(fā)生數(shù)據(jù)泄露的危險(xiǎn),而且速度也比較慢。但是價(jià)格比較便宜。對(duì)于一般的企業(yè)來(lái)說(shuō),如服裝企業(yè)在同城設(shè)立銷(xiāo)售點(diǎn)的話(huà),采用這個(gè)方式來(lái)實(shí)現(xiàn)同步也已經(jīng)足夠了。為此在設(shè)計(jì)客戶(hù)端與服務(wù)器端數(shù)據(jù)同步時(shí),數(shù)據(jù)庫(kù)管理員需要向客戶(hù)說(shuō)明各種同步渠道的差異,并根據(jù)客戶(hù)的要求來(lái)實(shí)現(xiàn)。而不能夠想當(dāng)然而,認(rèn)為VPN隧道不錯(cuò),就采用這個(gè)同步渠道。
注意事項(xiàng)三:設(shè)置更新源。
由于各地的辦事處都需要向服務(wù)器提出更新的需要。不過(guò)為了提高數(shù)據(jù)的準(zhǔn)確性,在服務(wù)器上必須能夠設(shè)置,哪些內(nèi)容只可以在服務(wù)器上進(jìn)行更新。如通常情況下,產(chǎn)品的價(jià)格只能夠有服務(wù)器來(lái)更新。像KFC各地銷(xiāo)售的價(jià)格都是統(tǒng)一的。所以各地銷(xiāo)售點(diǎn)是不能夠更新服務(wù)器方的價(jià)格表。如果需要提價(jià)的話(huà),往往是在服務(wù)器端調(diào)整價(jià)格,然后再把這個(gè)價(jià)格信息強(qiáng)制更新到各地的銷(xiāo)售辦事處。所以某些數(shù)據(jù)應(yīng)當(dāng)只在服務(wù)器方進(jìn)行更新。
為此,在部署這個(gè)方案時(shí),數(shù)據(jù)庫(kù)管理員應(yīng)該協(xié)同企業(yè)的管理人員,確定到底哪些數(shù)據(jù)只能夠在數(shù)據(jù)庫(kù)服務(wù)器方進(jìn)行更新。如果可行的話(huà),數(shù)據(jù)庫(kù)管理員還可以給企業(yè)一些建議。即可以根據(jù)自己的經(jīng)驗(yàn),把需要在服務(wù)器方進(jìn)行更新的內(nèi)容列出來(lái)。這些內(nèi)容有產(chǎn)品基本信息、產(chǎn)品價(jià)格、促銷(xiāo)方案等等。然后供企業(yè)用戶(hù)選擇。這會(huì)讓企業(yè)用戶(hù)能夠更加迅速、準(zhǔn)確的選擇出相關(guān)的內(nèi)容。當(dāng)然,如果企業(yè)平時(shí)管理比較規(guī)范的話(huà),那么肯定也有這方面的書(shū)面資料。此時(shí)對(duì)于數(shù)據(jù)庫(kù)管理員來(lái)說(shuō)可能工作起來(lái)更加的方便。無(wú)論如何,在部署這個(gè)解決方案時(shí),數(shù)據(jù)庫(kù)管理員必須向企業(yè)客戶(hù)確認(rèn)這方面的內(nèi)容。不然的話(huà),到時(shí)候出問(wèn)題,數(shù)據(jù)庫(kù)管理員可要吃不了兜著走了。
注意事項(xiàng)三:要多某些記錄進(jìn)行刷選。
不同的客戶(hù)端,從同一個(gè)表中獲取數(shù)據(jù),但是其獲取的紀(jì)錄可能是不同的。如一個(gè)中式快餐店,在各地辦了很多分店。其為了招攬顧客,會(huì)不斷的推出新的品種。不過(guò)新產(chǎn)品剛剛推出的時(shí)候,往往只有在幾個(gè)特定的門(mén)店有的賣(mài)。企業(yè)希望通過(guò)這種方式來(lái)判斷顧問(wèn)對(duì)新產(chǎn)品的接受程度。如果反響好的話(huà),才會(huì)在各地的門(mén)店中推廣。
這個(gè)需求說(shuō)出來(lái)簡(jiǎn)單,但是在系統(tǒng)的實(shí)現(xiàn)上有一定的難度。具體來(lái)說(shuō),就是要求客戶(hù)端與服務(wù)器之間在進(jìn)行數(shù)據(jù)同步的時(shí)候,要能夠根據(jù)門(mén)店代碼的不同,進(jìn)行記錄的刷選,把某些產(chǎn)品記錄過(guò)濾掉,以免造成不必要的麻煩。這在SQL Server數(shù)據(jù)庫(kù)上也是可以實(shí)現(xiàn)的,配置起來(lái)不是很復(fù)雜。在實(shí)現(xiàn)過(guò)程中,其難點(diǎn)是管理方面的問(wèn)題。即企業(yè)需要根據(jù)實(shí)際情況,定義好相關(guān)的過(guò)濾規(guī)則。而企業(yè)平時(shí)主要是依靠口頭管理,缺乏相關(guān)的規(guī)則。為此在這個(gè)規(guī)則的定義上,就遇到了麻煩。
通常情況下,這個(gè)流程是各地連鎖店自己申請(qǐng)或者有企業(yè)總部指定,然后把新產(chǎn)品在這幾個(gè)門(mén)店試賣(mài)。從技術(shù)的角度來(lái)講,只是在連鎖店信息中加入一個(gè)字段,然后再過(guò)濾條件上加入一個(gè)判斷條件即可。為此數(shù)據(jù)庫(kù)管理員還需要幫助企業(yè)確認(rèn)相關(guān)的業(yè)務(wù)邏輯。往往著是實(shí)現(xiàn)這個(gè)需求的關(guān)鍵。如果這個(gè)業(yè)務(wù)邏輯定義的比較嚴(yán)格,而且企業(yè)會(huì)嚴(yán)格執(zhí)行的話(huà),那么后續(xù)基本上不需要調(diào)整。而如果企業(yè)沒(méi)有明確的業(yè)務(wù)邏輯,而純粹是憑“靈感”的話(huà),那么后續(xù)調(diào)整可能會(huì)比較多。對(duì)于這一點(diǎn),數(shù)據(jù)庫(kù)管理員自己不僅需要心中有數(shù),而且還需要向企業(yè)說(shuō)明這個(gè)問(wèn)題,讓他們認(rèn)識(shí)到這個(gè)事件的嚴(yán)重性。#p#分頁(yè)標(biāo)題#e#
注意事項(xiàng)四:必須控制遠(yuǎn)程站點(diǎn)保持不同步狀態(tài)的時(shí)間。
為安全起見(jiàn),相關(guān)應(yīng)用程序還必須控制遠(yuǎn)程站點(diǎn)保持不同步狀態(tài)的時(shí)間。簡(jiǎn)單的說(shuō),就是當(dāng)某個(gè)客戶(hù)端在規(guī)定的時(shí)間內(nèi)沒(méi)有進(jìn)行數(shù)據(jù)同步(如網(wǎng)絡(luò)異常導(dǎo)致同步失敗),那么該采取什么措施?如可以設(shè)置一個(gè)寬限期,第一次同步失敗后沒(méi)有關(guān)系,但是不能夠連續(xù)三次同步失敗。如果控制的比較嚴(yán)格,如同步失敗后,馬上就鎖住客戶(hù)端,不允許相關(guān)的應(yīng)用程序再連接到這個(gè)客戶(hù)端。一般來(lái)說(shuō),對(duì)于即時(shí)性要求比較高的企業(yè),如彩票行業(yè)、銀行等等都會(huì)有類(lèi)似的要求。
可見(jiàn),當(dāng)客戶(hù)端不及時(shí)同步該如何處理,這也是因企業(yè)而異的。從SQL Server數(shù)據(jù)庫(kù)角度來(lái)講,可以設(shè)置不同的規(guī)則來(lái)處理這件事情。如可以即時(shí)鎖住客戶(hù)端,也可以給管理員提供警告,或者給與一個(gè)寬限期。現(xiàn)在主要的問(wèn)題是,企業(yè)要確定自己所需要的管理方式,并且在短時(shí)間內(nèi)不會(huì)改變。然后,數(shù)據(jù)庫(kù)管理員就可以根據(jù)企業(yè)的要求,在數(shù)據(jù)庫(kù)客戶(hù)端與服務(wù)器中進(jìn)行相關(guān)的設(shè)置。通常情況下,為了數(shù)據(jù)能夠及時(shí)的同步,都需要在客戶(hù)端采取措施控制遠(yuǎn)程站點(diǎn)保持不同步狀態(tài)的時(shí)