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的基础语法上,再适配数据库的个性化语法,这种方式几乎是(二)的简单版本,需要梳理各种数据库语法以及支持的数据库种类

优点:改造成本低
缺点:可维护性很低,需要确定好支持的数据库种类,后续增加还需要再适配

总体来说,只有(一)比较符合当前需求,存在的问题基本可以接受,(二)、(三)因为技术难度、改造成本和可维护性等问题,基本可以排除

原创文章 45 获赞 151 访问量 11万+

猜你喜欢

转载自blog.csdn.net/u010697681/article/details/105490166
今日推荐