前不久,阿里云发布了POLARDB 2.0 并开始POLARDB for Oracle 和 POLARDB for PostgreSQL的公测,再加上原来就支持的MYSQL,POLARDB成为同时兼容三大数据库引擎的数据库即服务产品(DBaaS)。
一直以来,Oracle都是行业客户市场中最核心的数据库产品,看到POLARDB开始支持Oracle引擎,我在第一时间就提交了公测申请并幸运的获得了公测资格。在测试的过程中,我并不关注POLARDB for Oracle的性能表现,因为我认为像阿里这样的互联网公司推出来的服务,最不需要耽心的就是性能的问题,反而是一些其他的诸如开发工具适配、用户使用习惯、代码兼容性这样和“生态”有关的特性不太容易一下子就做好,所以我这次的测试主要就集中在这些方面。
选择测试系统
首先是选择测试系统,我从全球最大的中文IT技术社区的下载频道里下载了一套使用Oracle数据库的CRM系统用于本次测试,系统的开发语言为Java、开发框架是Spring +Struts2+Hibernate。据我所知大量行业客户的现有系统采用的都是相同或者类似的架构。
初始化数据库
下一步是初始化数据库,按照POLARDB 的官方文档,建议访问数据库使用pgAdmin或者阿里云DMS,但我更喜欢用Navicat。要使用第三方的数据库管理工具需要为POLARD申请外网地址和正确的设置白名单,把这些都搞定之后,用Navicat 就可以连接POLARDB for Oracle了,当然非常重要的一点是需要选择用PostgreSQL 协议来进行连接。
使用CRM系统自带的SQL脚本初始化数据,只遇到一个问题,就是序列的最大值。
以下语句:
create sequence SEQ_MAX_TEST
minvalue 1
maxvalue 9999999999999999999999999999
start with 1
increment by 1
cache 20;
会被报告:
ERROR: value "9999999999999999999999999999" is out of range for type bigint
将序列最大值改为bigint的最大值(9223372036854775807)之后就没有问题了,可能公测结束后会有改善吧。
其余的诸如建表、注释、主键及外键依赖、插入记录、创建视图、子查询、inner join、left join这些DDL或者DML语句的运行都没有遇到任何问题。
应用系统接入
再下一步是搭建应用运行环境,我用的是Tomcat,具体细节和POLARDB for Oracle的关联不大,在此略过,这里的重点是应用系统连接数据库的驱动和URL。
初始状态下CRM的数据库连接配置文件是这样的:
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=XXX
password=XXX
开始时,我幻想可以继续使用Oracle的驱动,只是修改了连接URL,但很快发现行不通,后来又尝试用PostgresSQL的驱动,不知为何也不行,最终,我用PPAS(阿里云的另一套Oracle 兼容数据库服务)的驱动成功连接了云上的POLARDB for Oracle。
最终的数据库配置文件为:
driver=com.edb.Driver
url=jdbc:edb://XXX.o.polardb.rds.aliyuncs.com:1921/XXX
username=XXX
password=XXX
测试和使用
也许是因为使用了Hibernate这样的对象关系映射框架的原因吧,在没有对程序本身进行任何修改的情况下,在解决了数据库初始化和应用接入问题后,测试CRM系统在POLARDB for Oracle 上完美的运行了起来。