喜歡自己寫程序的人都知道,Microsoft JET Engine是一個非常好用的In-Process的基於文件(即Access的數據文件,後綴名為MDB)的數據庫引擎,好些小網站也使用MDB文件作為數據庫解決方案。一般而言,需要獨立的數據庫引擎進程的程序都是比較巨大的程序。
然而,使用過Microsoft JET Engine的兄弟都知道,這個引擎的優點跟它的缺點一樣明顯。撇開它安全性能較弱等缺點不論,我個人最近遇到的最大的缺陷就是這個引擎至今沒有64-bit的版本,而且從MSDN Forum得到的一些微軟員工的回答是,沒有計劃開發Microsoft JET Engine的64-bit的版本,估計這也是為什麼Access 2007還是只有32-bit版本的原因。
回到正題,最近我從微軟的官方網站下載了一個SQL Server 2008 Beta 2 Professional(3.5GB, ISO格式)的版本來看看新版本有啥新東東,結果,個人感覺VS2008的IDE界面跟2005沒啥本質的區別,就是MDI的Tab頁變得漂亮了一些而已,同時對Vista有了比較完善的支持了,不像2005必須兩個補丁才能正常運行。而查看它的安裝列表的時候留意到它同時安裝了一個SQL Server Compact Edition V3.5的數據庫引擎(VS2005中捆綁的是SQL Server Compact Edition 3.1),同樣是In-Process的基於文件的解決方案,卻使用了類SQL Server的語法(所謂的類,其實就是T-SQL的真子集)。平心而論,就憑這個特性我也有打算放棄JET Engine而轉投SQL Server Compact門下,同時維護過JET Engine和SQL Server兩套SQL語言的兄弟都有這種體會吧。
然而,這個SQL Server Compact 3.5同樣沒有原生的64-bit的版本,事實上SQL Server 2005從Express版本以後就只有32-bit的版本了,因為Express 版本運行在獨立進程,所以64-bit的程序可以運行無誤。不過從它的官方下載頁面可以清楚的看到native 64bit的Compact editon將在下一版本中release,祈禱微軟能遵守承諾。
如果故事僅僅到這裡就Over的話,我自己都懷疑能否說服自己來完成大批量的數據文件的轉換。畢竟重新動手寫一份數據格式轉換程序也不是一個很輕松的工作,尤其鑒於Microsoft JET Engine的低保密性,我都是把數據庫文件加密後保存,這樣的結果就是在升級數據庫版本或者轉換格式時調試是個大麻煩。
故事的轉折點出現在我發現另外一個非常有用的Library,注意,是一個Library,不是程序,這個Library的全稱是:Microsoft Synchronization Services for ADO.Net,最新的版本也是Beta版。這個Library的作用跟它的名字一樣,用來Synchronize數據庫的。為啥會有這個Library,還得追溯到SQL Server Compact Edition的起源,這個數據庫起源與SQL Server CE版本,所以這個Library很多namespace還沿用了CE的名稱。Windows CE的資料需要跟Windows Desktop的數據進行同步,那就需要一個Synchronizer了。事實上微軟還提供了一個Server端的同步工具,但是必須綁定IIS或者Server端必須是SQL Server Express以上版本。
簡單介紹一下我理解中的這個Synchronizer,不論是2-tier還是n-tier的架構,總是把同步的雙方區分為ClIEnt端和Server端,兩端都提供各自的Provider,兩個Provider通過一個SyncAgent的類來實現同步。具體的如何具備供同步的Tables以及同步的選項在此不再一一列出(主要的原因是我自己也沒完全吃透)。
這個Library - Microsoft Synchronization Services for ADO.Net的出現的確讓我很興奮,按照官方文件的說法,Server的DB可以是任何格式。我一直懶於寫我自己的程序(也就是HIH)的Server版本,主要原因就在於數據庫之間的同步實在不是一個輕松的和願意動手的工作,尤其是不同數據庫格式之間。現在這個Library的出現,讓我堅定信心不寫Server版本,而是直接讓兩個ClIEnt之間進行同步了。當然,還得慢慢來,自己要先些個Demo才能真正斷定這種方案的可行性。
SQL Server Compact Edition的官方頁面:http://www.microsoft.com/sql/editions/compact/default.mspx
一個完整的例子來展現這個Microsoft Synchronization Services for ADO.Net風采(基於SQL Server Compact文件跟SQL Server的同步):