OEA 2.11 支持單機版數據庫 - SQLite與SQLCE對比


OEA 平台 設計中,需要支持多種數據庫,這至少包括了 SqlServer、Oracle、一個單機文件數據庫。而之前對於這一塊,我們一直沒有實現,只是預留了許多接口。昨天花費了一天的時間,讓 OEA 支持了本地數據庫 SQLCE。

 

為什么要支持本地數據庫呢?


  1. 支持開發簡單的本地軟件。
    偶爾需要一些比較小的應用程序,例如“個人計帳管理”、“個人聯系方式管理”等。這些簡單的軟件,如果還讓客戶裝個 SQLServer2008,客戶覺得都圍繞着。選擇使用單機數據庫,會讓發布變得十分簡單、體積也小,做好的程序,打個包發給客戶就行了。(當然了,.NET 4.0 還是要裝的。)
    也就是說,用戶可以面向個人。
  2. 支持單機試用。
    在開發管理產品時,往往需要把產品給一些客戶試用。不用裝 SQLServer 的單機版,使得這些客戶能夠十分簡單地試用我們的產品。

 

OEA 如何支持單機版


在使用 OEA 進行開發的過程中,不論是單機版、C/S 版還是B/S 版,它們的界面層以下的代碼都是一樣的,包括服務層、實體層、數據層等。而 單機版 和 C/S 版本的界面也是完全重用。所以,在開發完成之后,只需要把數據庫連接的配置改變為單機數據庫連接就可以了,如下圖:

image

配置完成后,運行程序,即在輸出目錄下建立了 Data 文件夾,並自動生成對應實體的數據庫:

image

這是進銷存實例生成的對應的庫:

image

有興趣的朋友可以在 OEA 2.9 平台發布 中對應的開源地址,使用 SVN 下載最新的源碼即可直接運行。(首次啟動時,要生成數據庫,會需要半分鍾左右。)

 

 

OEA中單機數據庫選型 SQLite vs SQLCE 


既然要使用單機版數據庫,那么選擇什么數據庫比較好呢?目前,業界普遍使用的單機數據庫主要還是 SQLite、Access 和 SQLCE。用得比較多的還是 SQLite,性能也很好,這個應該是 OEA 的首選。SQLCE 在老的版本中主要用於嵌入式開發,在桌面端應用得也少。Access 現在用的人越來越少了,而且連接起來比較費勁,這個在 OEA 中就不考慮了。

 

接下來,我對 SQLite 進行了一些測試。

主要還是測試這個數據庫和 OEA 目前的設計是否有較多的沖突。結果發現果然是太不一樣了。首先,OEA 平台的 AutoDb 模塊會完全管理數據庫,以達到開發人員在平時的開發中忽略數據庫的存在。也就是說,這個模塊會完成對數據庫結構的建立、修改;數據的升級等。可是查了許多關於 SQLLite 的資料,最后得到的結論是:SQLLite 不支持 刪除字段,修改字段。其中,還得查詢 SQLLite 的數據庫結構信息,以支持數據庫差異升級,這在 SQLite 中也支持得很有限,只有從一個 sqlite_master 表中查詢到數據表的建庫SQL,拿出來還得自己解析。其次,在 SQLite 中,外鍵約束可以被創建,但是卻不會被檢查。引用完整性都沒法保證,查詢速度再快有時也沒用。而且,象級聯刪除這類比較普遍的需求也不支持,都需要編寫觸發器完成,雖然 AutoDb 可以自動編寫,但是總感覺太費事了。而 OEA 中聚合對象的刪除,目前的設計是在根對象上刪除后,自動級聯刪除整個聚合樹,要改的話比較麻煩,所以這一點還是沖突。最后,在界面管理器方面,SQLite 用的主要第三方的軟件,有很多,試用了一下,就感覺 SQLiteMgr 還不錯,不過用起來並不順手。

 

痛苦之余,我再對 SQLCE 進行了研究。

其實目前的 OEA 中已經有使用到 SQLCE 3.5,實現了客戶端緩存(詳見:OEA中的緩存模塊設計)。雖然 SQLCE 3.5 並不支持並發,但是在客戶端緩存中沒有這個問題。另外,雖然 AutoDB 自動生成並升級數據庫,但是在做業務開發的時候,總是要經常去數據庫中查詢數據。但是 SQLCE 3.5 麻煩的地方就在於沒有一個好的界面管理器,不管是 VisualStudio 中集成的功能、還是 SqlServer Management Studio,都不方便使用。這樣的話,平時操作起來就會非常麻煩,何談開發效率。

鑒於此,我又查找了一些最新的 SQLCE 4.0 的資料。比較幸運的是,SQLCE 4.0 現在已經支持並發了,在 Web Matrix 開發 Web 網站時,默認都是使用 SQLCE 4.0 來做數據存儲的。而且,它還提供了比較好的界面管理器:SqlCeToolbox,前兩天才發布了最新版本,非常好用。(另外,這篇文章中講了如何使用 SQLCE 開發,還給了 VS 的插件。)其次,SQLCE 4.0中的數據可以無縫地遷移到 SQLServer、SQLAzure 中,這也是非常棒的特性。最后,也是非常重要的,在數據庫設計方面,SQLCE 4 基本上和 SQLServer 是保持一致的,支持 主鍵、外鍵、自增列、級聯刪除等。這就使得 我們在 OEA 上,不論是 AutoDB 還是 ORM,支持 SQLCE 都變得比較容易。

有的朋友會說,性能方面,SQLite 可比 SQLCE 快很多。但是其實我個人感覺 SQLCE 的速度也不慢,數據量不是非常大的情況下,應該沒有問題。

 

最后總結一下二者的對比:

image

 

 

最終,經過一天的時間,OEA 成功支持單機數據庫。還好有 SQLCE 4,要不就太費勁了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM