有時候出于某些特定的原因,需要在服務器端與客戶端之間進行數據的同步。如下圖所示,某個公司在各地有銷售辦事處。為了便于管理,在每個銷售辦事處都設置了SQL Server客戶端應用程序。每天晚上總公司的數據庫服務器需要與各自的辦事處客戶端之間的數據進行同步。這主要是通過服務器與客戶端之間的數據復制功能來實現的。在SQL Server中有這方面現成的解決方案,實現起來也比較簡單。為此對于這個具體的實現,筆者就不做過多闡述了。筆者現在要就講的是,在設計并實現這個解決方案的時候,需要注意哪些問題。

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