一、概述
1、MySQL兼容性特性概览
异构数据库迁移工作量主要来自:数据类型,SQL语言,PL/SQL语言,甚至客户端应用程序接口等。此时KES从语法和功能上对MySQL提供原生支持,所以KES只需要简单修改即可。
1.1、数据类型
#KES对MySQL的基本数据类型如:
(1)数值类型(整型、浮点型、定点数类型)、
(2)文本字符串类型(CHAR、VARCHAR、TINYTEXT、MEDIUMTEXT、LONGTEXT)、
(3)位类型、
(4)日期时间类型(YEAR、TIME、DATE、DATETIME、TIMESTAMP)、
(5)枚举类型 ENUM、
(6)集合类型 SET、
(7)二进制类型(BINARY、VARBINARY、BLOB)、
(8)空间类型(GEOMETRY、POINT、LINESTRING、POLYGON)、
(9)JSON 类型(JSON 对象、JSON 数组)可以原生支持,或者通过转换进行支持。
#支持 MySQL 所有操作符,以及数据类型转换。
1.2 函数
(1)兼容 MySQL 常用的日期时间函数
(2)兼容数值函数,如:ABS、ACOS、CEIL、CEILING 等
(3)兼容 BIT_LENGTH、CHAR_LENGTH、CONCAT、FIND_IN_SET、OCTET_LENGTH 等字符函数
(4)兼容 AVG、BIT_AND、BIT_OR、GROUP_CONCAT、STDDEV_POP 等聚集函数
(5)兼容 CUME_DIST、DENSE_RANK、FIRST_VALUE、LAST_VALUE 等窗口函数
(6)兼容 JSON 函数
(7)兼容和 base64 的转换函数:to_base64、from_base64 等
1.3 SQL语句
#KES对大多数常用的 MySQL 特有 SQL 语句均提供了原生支持.
#KES 主要兼容如下 MySQL 的 SQL 语句:
• CALL 语句
• DO 语句
• EXCEPT、INTERSECT、UNION 语句
• DELETE FROM [PARTITION]
• HANDLER 语句
• INSERT ... SELECT
• INSERT ... SET
• INSERT ... ON DUPLICATE KEY UPDATE
• LOAD DATA/XML
• REPLACE INTO
• SELECT ... LIMIT
• SELECT ... INTO
• SELECT ... JOIN
• SELECT ... UNION/INTERSECT/EXCEPT
• 包含等号操作符的子查询
• 包含比较操作符的子查询
• 包含 ANY、IN、SOME 的子查询
• 包含 ALL 的子查询
• 行子查询
• 包含 EXISTS、NOT EXISTS 的子查询
• 包含对外层查询表引用的子查询
• 包含 FROM 子句的子查询
• TABLE 语句
• UPDATE 语句
• VALUES 语句
• WITH AS 语句
• START TRANSACTION
• COMMIT、ROLLBACK
• SAVEPOINT、ROLLBACK TO SAVEPOINT、RELEASE SAVEPOINT 等
1.4 PL/SQL语法
#KES 支持如下 MySQL 过程化语言的常用语法:
• 赋值语句
• IF 语句
• CASE 语句
• 循环语句
• EXECUTE 语句
• 动态 SQL
• BEGIN ... END
• LABELS 标签语句
• DECLARE 语句
• FOREACH 语句
• REPEAT 语句
• RETURN 语句
• WHILE 语句等
1.5 PL/SQL对象
#KES 支持如下 MySQL 过程化语言对象:
• 内置标量函数
• 触发器
• 匿名块
• 存储过程
• 函数
• 包
• TYPE 类型对象
1.6 客户端 SQL 交互工具
#在生产上,通常客户 DDL 脚本和报表是通过 SQL 交互工具移植的。针对这种情况,KES 提供了如下 SQL 交互工具:
• ksql:命令行的 SQL 交互工具,类似 MySQL 的命令行。
• Kstudio:图形化的 SQL 交互工具,类似 MySQL 的图形化工具。
#通过上述工具,用户可连接数据库服务器,运行数据库实用程序,发送 SQL 语句,运行 SQL 脚本,或运行KES 数据库管理命令实施数据库管理等。
2、MySQL特性改写方法
2.1 SQL 语句中变量
MySQL 的 SQL 语句中支持使用 @var 定义变量,并通过 set 或者 select into 语句赋值。
KES 目前不支持 SQL 语句中直接使用变量,对于这种应用,可以使用 KES 的 context 来改写。
2.2 PLSQL中的DECLARE CONDITION
MySQL 中 PLSQL 中可以使用:
DECLARE …. CONDITION 语句
DECLARE …HANDLER 语句
KES 中可以使用自定义异常来转换对应语句。
2.3 SIGNAL
MySQL 中 signal 语句可以定义向应用返回的消息和sqltate, 而 KES 中可以使用 RAISE 语句转换,例如: RAISE EXCEPTION, RAISE SQLSTATE
二、MySQL数据库移植实战
1、主要移植内容
下面的操作就是迁移的先后顺序,如果不同可能会报错。
根据迁移是否停服,迁移又分为离线迁移和在线迁移。
1.1、数据库、用户移植
- 数据库:就是存储各种sql等数据的
- 用户:操作这些数据对象的
为此,数据迁移一般是先迁移数据库和用户。
如何移植这些内容?应在目的数据库KES上创建与源库MySQL同名的数据库和用户。另外,所创建数据库的字符集与MySQL数据库字符集一直。
1.2、MySQL数据迁移
使用KDTS将MySQL离线迁移到KES中。
使用KFS将MySQL在线迁移到KES中。
1.3、应用程序移植
在迁移完数据后,才开始迁移应用程序,原因是因为:在用程序中,可能会访问和操作前面迁移的数据库对象。
应该程序移植是:对MySQL API方式或者嵌入式sql方式的应用程序的移植。它主要包括接口驱动程序和连接方法的移植,以及 MySQL 扩展或私有的、且 KES 未兼容的 API 移植。通常,该项任务的工作量较少。
在生产上,应用程序移植与移植系统测试与调试交叉进行。
2、关键移植步骤(重点)
前四个是准备工作
2.1、确定移植目标
开始迁移前,应根据用户的实际需求,确定移植目标。
#迁移目标有:
• 迁移 MySQL 数据库的规模。
• 迁移 MySQL 数据库对象的种类和特征,如简单和复杂迁移对象所占比例等。
• 迁移的难易程度,如是否迁移大对象,是否迁移大量约束等。
• 迁移的工期要求。
• 迁移数据时是在线迁移还是离线迁移。
• 对目标系统的技术指标要求,诸如平台、版本、应用编程接口、工具、可用性、安全性和性能指标要求等。
2.2、评估移植任务
#通常,移植评估主要包括以下内容:
• 移植技术指标,如移植业务压力和性能指标等。
• 移植数据规模,如移植各类数据库对象的数量,PL/SQL 程序的规模等。
• 移植中 KES 不支持功能的种类和数量。
• 移植的约束种类和数量。
• 移植过程中可能遇到的其他问题。
移植评估的数据库/应用概括模板
项目 | 描述 | 备注 |
---|---|---|
数据库版本 | 8.0 | |
操作系统版本 | Windows 2000/2003 Server | |
服务器型号 | 联想 / SUN | |
CPU 配置 | ||
内存(RAM) | ||
磁盘(Disk Profile) | ||
服务器个数(# of Servers) | 1 或 2 | |
用户数 / 天(# Users/Day) | 几十 / 天 | |
事务量 / 天(# Transactions / Day) | ||
当前数据库大小 | 几个 GB | |
数据库增长速率(#GB/month) | ||
目标用户(Schema) | ||
应用方式(OLTP/OLAP) | OLTP | |
应用服务器(中间件) | 无 | |
客户端应用类型(C/S,B/S) | C/S | |
客户端应用编程语言 | Delphi7 | |
客户端应用连接接口 | ODAC/ADO | |
是否深入的 SQL 应用 | 无 | |
监控工具 | 无 | |
备份方式 | ||
其它工具(备份软件等) | 无 | |
高可用要求 | 较高 | |
高可用配置方案 | VCS 或单机 |
移植评估的移植报告总结模板
项目 | 描述 |
---|---|
移植分析日期 | 20220105 下午 |
移植分析人员 | ABC |
KES 版本 | |
MySQL 版本 | 8.0 |
Schema | |
DB Size (GB) | 几个 GB |
Schema Size (MB) | 几个 GB |
移植评估的对象统计模板
类型 | 小计 | 备注 |
---|---|---|
Function | 7 | 较少用 |
Index | 有 | |
LOB | 有 | 最大到几十 MB,主要是照片、word、视频(较少) |
Materialized View | 有 > 10 | |
Procedure | 25 | |
Table | 1660 | 约束较多 |
Table Partition | 无 | |
Trigger | <30 | |
Type | 无 | |
View | >200 | |
对象共计 |
移植评估的约束统计模板
类型 | 小计 | 备注 |
---|---|---|
CHECK OR NOT NULL | ||
FOREIGN KEY | ||
PRIMARY KEY | ||
UNIQUE KEY | ||
OTHER | ||
约束共计 |
移植评估的其它方面模板
特性 | 小计 | 备注 |
---|---|---|
数据压缩 | 无 | |
索引组织表 | 无 | |
物化视图 | 无 | |
存储概要 | 无 | |
空间数据管理 | 无 | |
全文搜索 | 有 | |
数据库链接 | 无 | |
数据复制 | 无 | |
共计 |
2.3、组建移植团队
#具备知识和技能
• 熟悉 MySQL 和 KES 的 SQL 语言和 PL/SQL 语言特性,以及相关的 MySQL 兼容特性。
• 熟悉 MySQL 和 KES 的各种应用编程接口,以及相关的 MySQL 兼容特性。
• 熟悉 MySQL 和 KES 的相关客户端工具,以及这些工具间的相同点和异同点。
2.4、准备迁移环境
2.4.1、部署目的数据库服务器
• 目的数据库服务器的 CPU、内存、网络环境等硬件应尽量采用较高的配置。
• 如果移植的 MySQL 数据库系统规模较大,如超过 1GB,则建议把 MySQL 和 KES 部署在不同的物理机器上。
• 为确保迁移效率,应尽量把 KES 和 MySQL 服务器部署到同一局域网内。
2.4.2、获取并安装必要的软件
迁移前应获取并安装如下软件:MySQL 数据库系统、KES 数据库系统、JDBC 和 ODBC 驱动程序、C语言开发工具、TPC-C 测试工具、LoadRunner 等。
如果迁移数据规模较大,建议对安装的 KES 数据库服务器进行适当的优化,如增大shared_buffer 大小、预先创建较大的日志文件,预先申请足够的表空间数据库文件等。
2.5、数据库用户迁移(操作)
#数据库、用户和模式迁移主要包括以下内容:
• 获取源 MySQL 数据库的 IP 地址、实例名、网络服务端口号、用户名/密码等信息。
• 在目的 KES 数据库上,使用 KSQL 工具上执行如下操作:
– 创建与源 MySQL 用户同名的用户,用户 root。
– 创建与源 MySQL 同名的数据库,mysql。
– 创建与源 MySQL 同名的模式。
• 大小写处理。
• 迁移 MySQL 时,注意 Kingbase 的 data 需要使用指定的初始化参数来初始化数据库。
initdb --enable-ci --dbmode=mysql
2.6、数据迀移(操作)
1、KES 数据迁移工具 KDTS 动态加载待迁移的数据库访问接口,方便用户定制和使用。
2、KES 数据同步工具 KFS 支持同、异构数据源之间的数据迁移
3、同构数据源间数据迁移:支持 KES V7 和 V8R3 到 KES V9 的数据迁移。
4、异构数据源之间的数据迁移:支持 MySQL5、MySQL8 到 KES V9 的数据迁移。
5、KES 数据同步工具 KFS 支持结构迁移、支持全量数据迁移、支持列名映射,支持数据迁移过滤,在配置
数据任务时,可以对迁移的表配置 where 条件、通过匹配的 where 条件过滤需要迁移的数据。
6、数据库迁移时需要按照用户需求确定在线迁移还是离线迁移,若是离线迁移,使用 KDTS 完成 MySQL 的完整
迁移;若是在线迁移,目前支持使用 KFS 完成,注意这种情况下无法迁移 plsql 等复杂对象。
2.6.1、迁移前准备
1、获取 MySQL 数据库的相关信息
#迁移前,应获取源数据库 MySQL 服务名及迁移的数据规模信息。
1. 数据库、用户和模式迁移主要包括以下内容:
获取源 MySQL 数据库的 IP 地址、实例名、网络服务端口号、用户名/密码等信息。
`在目的 KES 数据库上,使用 KSQL 工具上执行如下操作:`
创建与源 MySQL 用户同名的用户,用户 root。
创建与源 MySQL 同名的数据库,mysql。
创建与源 MySQL 同名的模式。如果通过查询分析器或 KSQL 工具创建同名用户,则省略此步。但是,如果通过企业管理器创建同名用户,则此步则不能省略。
2. 大小写是否敏感
MySQL 通常默认是大小写不敏感,而 KES 默认是大小写敏感,可以在初始化数据库的时候进行修改。
./initdb -D /home/kingbase/Kingbase/ES/V9/data -U SYSTEM --enable-ci
3. 查询 MySQL 数据库编码方式
show variables like 'character_set_database';
【KES 初始化设置编码方式】
--encoding=GBK(支持 GBK UNICODE ASCII)
4. 查看表数据量大小
查看当前用户在 MySQL 中的表大小,按从大到小排序(单位 GB)
select
table_schema, table_name, table_rows, truncate(data_length/1024/1024, 2), truncate(index_length/1024/1024,2)
from information_schema.tables
where table_schema = 'mysql'
order by data_length desc, index_length desc;
5. 检查数据库日期格式
MySQL 数据库中 date 的默认格式为“YYYY-MM-DD”,time 的默认格式为“HH:MM:SS”
KES 中时间的默认格式为:ISO,YMD
MySQL 数据库中有日期“0099-09-30 00:00:00”,KES 中将 99 识别为月份报错:
ERROR: date/time field value out of range
2、配置 KES 的 MySQL 兼容开关
#应对目的数据库 KES 进行适当的 MySQL 兼容配置。通常,应配置以下兼容参数:
1. mysql_interval_style:兼容 MySQL 的 interval 格式。
在 KES 系统参数 mysql_interval_style 的默认值为 off。
2. sql_mode:兼容 MySQL 的模式列表。
在 KES 系统参数 sql_mode 可以设置为:
• ONLY_FULL_GROUP_BY:如果查询的 select 列表、HAVING 条件或 ORDER BY 列表,引用了既不在 GROUP BY 子句中命名,也不再功能上依赖于 GROUP_BY 列的非聚合列,则拒绝这些查询;
• STRICT_ALL_TABLES:为所有存储引擎启用严格 SQL 模式,无效的数据值将被拒绝;
• REAL_AS_FLOAT:REAL 类型默认是 FLOAT8,开启之后为 FLOAT4;
• NO_AUTO_VALUE_ON_ZERO:开启时,插入 0 序列不自增,将 0 作为最终插入的值;
• ANSI_QUOTES:表示双引号返回标示符。如果用户取消该选项,则表示双引号返回字符常量。
#注意:若取消该模式,将会导致 KStudio 工具新建、删除对象失败。
可以用如下方式使用 sql_mode 参数:
TEST=# set sql_mode = 'ONLY_FULL_GROUP_BY';
SET
TEST=# show sql_mode;
sql_mode
-----------------------------------
ONLY_FULL_GROUP_BY
(1 行记录)
3、移植数据库、用户
在目的数据库 KES 上创建与源数据库 MySQL 同名的用户、数据库,并且授予新建用户具有使用该据库和新建模式的所有或适当的权限。另外,所创建数据库的字符集应与 MySQL 数据库字符集一致。如果 KES 已有同名数据库,则登录该数据库后,只需创建同名用户。
4、配置 JDBC 数据源
配置 KES 和 MySQL 的 JDBC 数据源,并设置相关的连接信息。
5、配置目的库 KES 性能参数
#为了提高迁移速度,应对目的库 KES 进行性能优化配置。 主配置文件 kingbase.conf
例如:
1. 根据迁移数据规模的大小,迁移前可预先创建适当大小的的数据和日志文件。
开始迁移之前根据待迁移数据库的大小,保证 KES 数据目录所在位置有足够的空间。
2. 根据 KES 服务器硬件配置的实际情况调整 shared_buffers 大小,默认是 128M,建议调整为内存的 1/4大小。
2.6.2、离线迁移
2.6.2.1、BS 迁移步骤
#创建源数据库连接
创建源库数据库连接。创建数据库连接界面如下,填写数据源信息,包括:“连接名称”、“数据库类型”、“数据库版本”、“服务器地址”、“端口”、“用户名”、“密码”、“数据库”、“驱动”、“URL”、“连接参数”。
#创建目标数据库连接
创建目标数据库连接。创建数据库连接界面如下,填写数据源信息,包括:“连接名称”、“数据库类型”、“数据库版本”、“服务器地址”、“端口”、“用户名”、“密码”、“数据库”、“驱动”、“URL”、“连接参数”。
#新建迁移任务
KDTS 采用向导页的方式指导用户新建迁移任务,简单易用,用户依次配置“选择数据源”-“选择模式”-“选择迁移对象”-“配置参数”,即可快速配置一个迁移任务。
(1)选择数据源
填写自定义任务名称(任务名称不能重复),选择“源数据库”和“目标数据库”,或者选择“新建数据源”后使用。
(2)选择模式
根据您的数据迁移所需选择对应模式(如需选择模式在系统模式中可选中“包含系统模式”复选框)的表结构、表数据、视图、序列、函数、存储过程、程序包、同义词、自定义类型等。当模式较多时也可以通过左上方的查询框进行检索。请您至少选择一种模式,否则将收到错误提示,以至于不能完成新建任务。
(3)选择迁移对象
通过已选模式选择您需要迁移数据的表,模式较多时可在已选模式搜索框内输入模式名关键字进行快速检索。
可迁移此模式下全部表,也可以指定或排除部份表,当您选择“包含指定对象”或“排除指定对象”时,请您通过“从列表选择”或“从文件导入”将数据添加到包含列表中,如您未添加数据,则会收到错误提示,导致无法完成新建任务。
从列表选择对象时,可选择对应模式、检索对象名关键字进行快速检索对象。点击“添加”按钮后加入到已选列表,当您想要移除部份表时可以选择对应的表点击“移除”按钮取消表。选择完成后点击确定。
(4)配置参数
迁移工具提供了一系列配置参数用于迁移方案的个性化配置,满足多种迁移场景。配置参数分为“迁移配置”、“数据类型映射”、“线程配置”三个方面。
#执行迁移任务
可将此任务作为预迁移任务点击“保存”,或者作为执行任务点击“保存并迁移”。
#迁移完成:
迁移结束“状态”栏显示“完成”,则迁移任务成功。
# 迁移失败
迁移结束“状态”栏显示“失败”,则迁移任务失败。失败后可点击详情查看日志有助于解决问题。
#查看迁移报告及问题处理
迁移完成后,需要确认执行结果,包括迁移数据量,是否有错误发生,可以通过迁移日志和迁移结果进行查看。
“迁移日志”打印迁移任务执行后的日志,具体可分为“系统日志”、“Error 日志”、“Info 日志”。
“迁移结果”功能的工作区包括“任务执行批次”、“迁移对象”、“总数”、“成功数”、“失败数”、“略过数”、“操作”。您可以查看历史迁移任务执行的每次记录,以及每次迁移的对象、成功数、失败数、查看失败任务的错误日志。
2.6.2.2、SHELL 迁移步骤
#目录说明
• bin: 启动脚本
• conf: 配置文件
• doc: 帮助文档
• drivers: 数据库连接驱动(注意不同版本驱动的存放目录差别,详见 readme.md)
• jdk: jdk
• kdms: kdms 程序
• lib: 程序包
• logs: 日志
• result: 迁移报告
#配置数据库连接信息
• 进入 KDTS-CLI/conf 目录下,打开 application.yml 文件,根据源库类型设置当前激活的源库配置
(active: mysql),如下所示:
#在正确设置 application.yml 中的 active 项后,打开对应配置文件(datasource-mysql.yml),按实际运行环境进行配置即可。
#配置源端数据库连接信息、目标数据库连接信息
编辑 conf/datasource-mysql.yml 文件,编辑源端和目标端连接信息,包括 url、driver-class-name、username、password 信息,如下图所示:
配置要迁移的源库模式,数据库对象,涉及到的参数见下图
#迁移配置参数说明:
编辑 conf/datasource-mysql.yml 文件有多个配置参数,可灵活使用。以下列举常用的配置参数。
• fetchSize:游标提取记录数(每次和服务器交互提取的数据行数,加大该值可提升读取效率,但会增加内存开销(一次将指定数量的数据取回放在缓存中))。
• tableWithLargeObjectFetchSize:含大对象数据表的游标提取记录数(同上,只是此参数针对有大对象字段的表)。
• tableWithBigLargeObjectFetchSize:大表拆分阈值行数(当表的行数超过此值时,将对表进行拆分,每块的记录数为此值和表总记录数除以“拆分最大块数”中的最大值)。
• largeTableSplitThresholdRows:大表拆分阈值行数(当表的行数超过此值时,将对表进行拆分,每块的记录数为此值和表总记录数除以“拆分最大块数”中的最大值)。
• largeTableSplitThresholdSize:大表拆分阈值大小(单位为 M)(当表的数据大小(普通字段 + 大对象字段)超过此值时,将对表进行拆分)。
• largeTableSplitMaxChunkNum:大表拆分最大块数(每张表的最大拆分块数,应不超过总的读线程数)。
• largeTableSplitConditionFile:大表拆分条件定义文件(优先于按行数和大小拆分)。
• tableDataFilterConditionFile:表数据过滤条件定义文件。
• useKdms:是否使用 kdms 做转换(视图、函数、存储过程、包、触发器)。
• kdmsUrl:kdms 访问地址,前提是 useKdms: true
• writeBatchSize:批量提交记录数(行数据)。
• writeBatchByteSize:批量提交数据大小(单位 M)。
• lobInMemoryThresholdSize:大对象数据读入内存阈值(单位兆,默认 128M)。
• dropExistingObject:删除目标库中已存在的对象(如表、视图等)。
• truncateTable:是否默认清空目标库中已存在的表数据。
• renameObject:目标数据库对象重命名,除表名、列名外的其他对象: pk、fk、constraint、unique constraint、index等。
#线程相关设置
线程相关设置可根据实际服务器配置按比例调整,如果与目标数据库运行在同一服务器上,应将绝大部分资源
分配给数据库。
进入 KDTS-CLI/conf 目录下,参照 thread-config_sample.json 文件新建 thread-config.json 文件,设置线程池配置,如下图所示:
数据迁移属于 IO 密集型操作,涉及网络络 IO 和磁盘 IO 的交互,一旦发生 IO,线程就会处于等待状态,当
IO 结束,数据准备好后,线程才会继续执行。为提升数据迁移的效率可以多设置 些线程池中线程的数量,避免任务等待,线程可以去做更多的迁移任务,提高并发处理效率。但不是线程数设置的越高,效率就越高,线程上下文切换是有代价的。对于 IO 密集型线程数的设置公式为:
线程数 = CPU 核心数/(1-阻塞系数) ,其中阻塞系数一般为 0.8~0.9 之间,取 0.9 则:
双核 CPU:2/(1-0.9) = 20
64 核 2 路 CPU:64*2/(1-0.9) = 1280
#启动脚本
– 进入 KDTS-CLI/bin 目录下,编辑: startup.sh
– 检查 JDK 的路径是否正确 JAVA_PATH=${BASE_PATH}/jdk
– 启动运行脚本 进入 KDTS-CLI/bin 目录,执行: ./startup.sh
#查看迁移报告及问题处理
可以在运行日志(kdts_plus_***.log)中查看到迁移整个过程的信息,包括任务启动、迁移进程、结果汇总
可查看 result 下的迁移结果(在形如“result/2021-12-02_15-15-15/Sehcma1”目录下)
• index.html--报告主页面
• detail_XXX.html--XXX 详细信息(如表结构、表数据、表主键等)
• FailedScript--失败脚本目录
• IgnoredScript--略过脚本目录
• SuccessScript--成功脚本目录
#在迁移过程中一旦某个对象创建失败,KDTS 会将该对象的创建 sql 保留到本次迁移任务文件夹下的 FailedScript 目录下 *.sql 文件,用户可以手动修改后通过 Ksql 或者 KStudio 工具手动执行。
2.6.3、在线迁移
在线迁移时,首先需要使用 KFS 完成。
2.7、应用程序迁移(操作)
在应用编程接口方面,KingbaseES 与 MySQL 兼容程度较高,所以,一般情况下,应用程序迁移比较容易。应用程序迁移通常应和移植系统测试同时进行。这样可及时修改测试过程中发现的问题。
2.7.1、概述
如何在一个应用程序中访问和操纵数据库呢?通常,可采用以下方式:
1.API 方式
该方式通过数据库厂商提供的各种标准应用编程接口在应用程序中与数据库进行交互。常用的应用编程接口如JDBC 和 ODBC 等。目前,大多数数据库厂商均提供很多标准的数据库 API 及其驱动程序。
在实际应用中,应首先加载驱动程序。加载成功后,利用 API 函数与数据库交互并完成对数据库数据的操作。
JDBC 基本使用对比表
步骤说明 | MySQL 实现 | KingbaseES 实现 | 差异说明 |
---|---|---|---|
声明连接对象 | Connection con; |
Connection con; |
语法完全一致 |
加载驱动程序 | Class.forName("com.mysql.jdbc.Driver"); |
Class.forName("com.kingbase8.Driver"); |
驱动类路径不同 |
定义连接串 | String url="jdbc:mysql://192.168.0.1:3306/databasename"; |
String url="jdbc:kingbase8://192.168.0.1:54321/databasename"; |
协议头、端口、驱动标识不同 |
获取数据库连接 | con = DriverManager.getConnection(url,user,pwd); |
con = DriverManager.getConnection(url,user,pwd); |
核心方法一致,参数适配差异 |
Hibernate 基础配置对比表
说明 | MySQL 配置实现 | KingbaseES 配置实现 |
---|---|---|
配置文件 | 需修改 hibernate.properties 、hibernate.cfg.xml 、persistence.xml 三个文件 |
需修改 hibernate.properties 、hibernate.cfg.xml 、persistence.xml 三个文件 |
hibernate.properties |
增加: hibernate.dialect=org.hibernate.dialect.MySQLDialect |
增加: hibernate.dialect=org.hibernate.dialect.Kingbase8Dialect |
hibernate.cfg.xml |
增加: <property name="dialect">org.hibernate.dialect.MySQLDialect</property> |
增加: <property name="dialect">org.hibernate.dialect.Kingbase8Dialect</property> |
persistence.xml |
增加: <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> |
增加: <property name="hibernate.dialect" value="org.hibernate.dialect.Kingbase8Dialect"/> |
版本支持 | - | 支持 Hibernate 2.0 及以上版本 |
#MyBatis
目前 Mybatis3.2.8,Mybatis3.3.0 和 Mybatis3.4.5 均已通过 KingbaseES 版本适配的验证测试
MyBatis 的 jar 包可以从官方网站下载,Mybatis 所以使用的 JDBC 包 kingbase8-9.0.0.jar 位于数据库安装路径下interface/jdbc 目录。使用时将 Mybatis 包和 JDBC 包导入到项目的 Libraries 中并定义相关配置项即可。
定义 Mybatis 配置文件,跟据用户选择,更改一下配置文件。
在 config.xml 中配置 JDBC 的驱动信息参数,数据库服务器信息参数和登陆用户信息参数。当然,这些参数也可以根据用户应用需求,单独生成 property 文件,针对不用的应用场景,导入不同的属性文件。这里以 property 为例说明下 config.xml 的配置使用。
在 property 中增加如下声明:
jdbc.driverClassName=com.kingbase8.Driver
jdbc.url=jdbc:kingbase8://127.0.0.1:54321/TEST
jdbc.username=登录名
jdbc.password=登录密码在config.xml 中增加如下声明:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
2.7.2、修改应用框架
如果应用使用的框架支持多种数据库和各自方言,修改配置使得框架使用 postgresql 库及其方言。
未修改之前框架适配使用的是 MySQL 的方言和表结构,其中用到了 BLOB/CLOB。
经调研框架也支持其他库,例如 MySQL 和 postgresql,除 MySQL 外,类型均为 bytea/binary,目前解决方法是配置框架使用 postgresql 库及其方言。
#具体修改:
1. BaseInterceptor.java 中 KingbaseES 类型库使用 postgresql 方言
2. Spring-Context-Activiti.xml 中指定 database type 为 postgres,database schema update 设为 false
3. 数据库实例需要配置为大小写不敏感,工作流使用的库需要建在默认 schema 下
2.8、测试与调试移植系统
#移植系统性能测试和调优的主要步骤如下:
• 构造测试数据:若条件允许的话,建议构造与实际生产数据规模相同的数据,并模拟构造未来一年、两年、五年或更长生命周期的数据进行测试。
• 部署测试软硬件环境:根据测试数据规模的大小,配置适当的测试软硬件环境。
• 性能测试:既可采用手动方式,也可利用 TPCC 测试工具、LoadRunner 等工具对移植系统进行自动测试。
• 性能调优:对未达到性能指标的功能模块及其 SQL 语句进行优化并给出相关建议。