Java跨多數據庫幾種方案對比

這段時間公司產品要做跨多數據庫適配,由於之前使用MyBatis一直是面向SQL編程,使用了一些MySQL的語法,所以需要改造,上週開會確定了三種方案:
 
1.  Spring Data JPA  --- 持久層更換爲ORM框架,使用Spring Data JPA+Hibernate組合
2.  SQL攔截解析 --- 從數據源層面做SQL攔截,解析語法樹,進行改寫適配
3.  多方言適配 --- 通過MyBatis標籤或者其他形式,對需要支持的數據庫特性的SQL語法進行個性化適配
 
下面來對以上幾種方案進行橫向比較:
 
方案/類型(1-5顆星)
改造成本
開發效率
技術難度
SQL調優
性能
可維護性
跨多數據庫
 Spring Data JPA
★★★
★★★
★★★
★★★★
★★★★★
★★★★★
SQL攔截解析 
★★★
★★★★★
★★★★★
★★
★★★
多方言適配
★★★★
★★★
★★★★★
★★★★★
★★★

一、Spring Data JPA

Spring Data JPA是Spring Data家族的一部分,可以輕鬆實現基於JPA的存儲庫,極大地簡化持久層開發及數據庫切換的成本。

優點:屏蔽數據庫底層細節,ORMapping,開發效率高
缺點:SQL難以調優,生成的SQL難以控制,雖然也能使用SQL開發,但是違反了ORM的初衷

二、SQL攔截解析


從數據源層面將MySQL的語法翻譯成其他數據庫的語法,這種方式需要對各種數據庫語法十分熟悉,並且需要長期維護不同的方言轉換

優點:代理數據源,不用改造已有的業務
缺點:雖然看起來十分美好,但是難度十分大,方言適配也是不小的開發量

三、多方言適配

就是SQL92/SQL99的基礎語法上,再適配數據庫的個性化語法,這種方式幾乎是(二)的簡單版本,需要梳理各種數據庫語法以及支持的數據庫種類

優點:改造成本低
缺點:可維護性很低,需要確定好支持的數據庫種類,後續增加還需要再適配

總體來說,只有(一)比較符合當前需求,存在的問題基本可以接受,(二)、(三)因爲技術難度、改造成本和可維護性等問題,基本可以排除

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章