注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Oracle、MySQL资料及经验

.

 
 
 

日志

 
 

MySQL去O的实施技术(转)  

2017-01-06 21:24:36|  分类: MySQL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
去O是一个系统工程,有一定的技术门槛。而业务系统的情况多种多样,有的业务系统数据量少、业务逻辑简单、系统压力也不大,而有的业务系统数据量庞大、业务逻辑复杂、对性能要求也比较高。本文主要是简要介绍在通常情况下(在不考虑一些特殊场景和需求的情况下),开展去O工作的一个常规步骤。

1、界定范围
明确去O所涉及的系统范围是第一要务。只有清晰的界定好范围,才能保证后续的工作不会产生偏差。

具体来说,需要收集下列信息:
1. 涉及的系统功能和使用人员
2. 涉及系统运行的业务高峰时段和低峰时段
3. 涉及的应用服务器的信息,包括CPU、内存、磁盘空间、网卡等
4. 涉及的Oracle数据库服务器的信息,包括CPU、内存、磁盘空间、网卡等
5. 涉及的Oracle上的数据库对象信息
a) schema清单
b) 表清单(使用大对象字段(BLOB\CLOB\LONG RAW\BFILE)的要单独标注出来)
c) 索引清单
d) Package清单
e) 存储过程清单
f) 自定义函数清单
g) dblink清单
h) trigger清单
i) job清单
j) 视图清单
k) 分区表清单
l) 物化视图清单
m) 同义词清单
n) Sequence清单
6. 涉及的Oracle上的数据库对象所占磁盘空间的信息,主要是表和索引所占的磁盘空间情况
7. 涉及的Oracle上的每个表中记录总数的统计信息
8. 涉及的Oracle数据库是否存在逻辑备库,物理备库是否对外提供读服务
9. 涉及的Oracle数据库的查询和计算是什么类型的,是OLAP统计报表类型的还是OLTP交易查询类型的

2、系统架构初步优化
以下两种情况在传统O架构中明显存在,我们需要考虑在去O过程中是否要采取新的架构来进行实现:
1. 图片、文档、大文本对象等被保存在Oracle数据库大字段中,一方面到会导致单表所需的磁盘空间急剧膨胀,另一方面对含大字段的库表进行读写的时候,也会产生大量IO,造成数据库系统总体性能下降。
2. OLAP类型的统计计算和OLTP类型的交易查询计算混合在Oracle上运行。

由于传统O架构和云架构不同,因此在去O之后需要考虑是否要做架构调整和优化。

推荐的方案是:
1. 将Oracle大字段类型存放到”共享文件系统”中,数据库中只保存”共享文件系统”中的访问路径。这样在应用真的需要读取这些大对象进行展示的时候,才进行两次查询获取大对象。这样的好处是数据库所需存储空间会下降很多,读写表的IO也会明显下降。
2. 对于单表数据量较大(记录数千万级)的表、Oracle存储容量较大或并发访问量超过万级以上的schema,需使用分布式MySQL集群进行分库分表。
3. 对于实时性要求不高的统计分析需求,可以通过ETL工具自动将数据同步到大数据平台上进行离线计算,并待离线计算完成之后,将计算结果回写MYSQL中支持实时查询的需求。
需要注意的事,采取上述架构调整,会导致数据流发生变化,也需要进行更多的应用改造。因此需要结合应用改造、工期、数据流变化所带来的业务影响等因素找到一个平衡点。

3、数据流梳理
去O本质上会导致数据流的走向发生变化,因此要梳理清楚数据是从何而来,到哪里而去。具体的说,就是数据都是谁写入到Oracle中,谁从Oracle中获取数据,并且评估去O对会对数据的写入、读取产生什么影响。

主要要梳理以下方面:
1. 数据的来源方
a) 第一步界定的数据库表中的数据是否有来源于外部系统的
b) 外部系统是如何将数据写入到本系统数据库中的,是直接访问数据库写入数据,还是通过调用本系统的对外接口写入数据
c) 是实时写入还是定时写入
d) 去O之后,外部系统是否需要配合进行程序修改,如果需要修改,都需要哪些修改

2. 数据的读取方
a) 第一步界定的数据库表中的数据是否有外部系统需要读取的
b) 外部系统是如何读取数据的,是直接访问库表读取,亦或者是通过同义词、视图、dblink的方式进行读取,还是通过调用本系统的对外接口进行读取
c) 是实时读取还是定时dump数据
d) 去O之后,外部系统是否需要配合进行程序修改,如果需要修改,都需要哪些修改

3. 架构优化调整所导致的数据流变化
a) “共享文件系统”的写入和读取方都有哪些系统,需要考虑应用改造
b) 确定需要同步到大数据平台进行OLAP计算的数据范围,确定需要从大数据平台离线计算后回流到MYSQL中进行实时查询的数据范围

4、Oracle的功能适配
作为一款成熟的商业软件,Oracle提供了很多强大的功能。在去O的过程,为了得到更好的性能,Oracle的一些特性需要考虑进行适配,具体见下表格:

去O是一个系统工程 - 熊猫兔 - Oracle、MySQL资料及经验

常见的数据类型对应如下:

去O是一个系统工程 - 熊猫兔 - Oracle、MySQL资料及经验

其他与Oracle特性相关的问题也需要考虑:
1. SQL语法、限制字符(escape code)及保留字
2. 对象命名是否大小写敏感
3. 大字段的支持(CLOB、BLOB、BFILE等)
4. JOIN类型的支持(影响到SQL性能)
5. 数据量或性能上限(是否要拆表、拆库)

5、去O应用程序改造
通过前面的系统改造分析,可以逐步明确去O过程中应用系统的改造点,一般情况下会包含以下几方面:

1. 本系统应用程序的改造
a) 读写Oracle改造为读写MySQL/分布式MySQL集群
b) 根据第五章所述,Oracle适配方案做相应应用改造
c) 大对象读写到”共享文件系统”的应用改造,以及存量数据迁移到”共享文件系统”的应用改造
d) 统计类型的OLAP计算迁移到大数据平台上的应用改造,以及相关数据流变化带来的数据同步任务配置

2. 外部系统的应用改造
a) 针对直接访问Oracle库的应用需要配合进行应用改造和迁移
b) 数据流发生变化导致的接口适配改造,例如接口文件投递位置发生变化

3. 数据库对象迁移
a) 表结构迁移
b) 非表对象的迁移(视图/物化视图/函数/存储过程/触发器/JOB等)

4. J2EE应用迁移
a) 同构J2EE应用服务器。例如从AIX操作系统中的Weblogic Server迁移到部署在CentOS操作系统中的Weblogic Server. 这种情况比较简单,就是应用打包后重新部署,只需要简单的测试。

b) 异构J2EE应用服务器。例如从AIX操作系统中的Weblogic Server迁移到部署在CentOS操作系统中的Tomcat应用服务器,这种情况一般不会有什么问题。最好首先检查一下JDK版本,重新打包部署成功后进行一段时间的测试,避免出现一些异常现象。另外如果原来用到Weblogic Server Cluster功能,则需要配置多台应用服务器,可以配置SLB连接后端多台Tomcat Server来达到应用服务器集群的效果。

6、功能和性能测试
去O本质是应用系统进行重构,因此一定要在上线前指定好测试方案,并进行充分的功能测试和性能测试。安排熟悉业务的人员进行功能测试验证,并根据业务对系统的性能要求进行充分的性能压测。

7、存量数据迁移及应用切换上线
去O相关应用改造开发完成,并通过功能测试和性能测试之后,需要考虑新版应用切换上线以及存量历史数据迁移到云平台的方案。由于Oracle和MySQL是两种异构的数据库,因此无法通过Oracle数据文件磁盘复制的方式进行数据迁移,而必须采用应用从Oracle读取数据在写入到MYSQL的方式完成存量历史数据的迁移工作。

一般情况下,有如下两个方案:
方案一:

去O是一个系统工程 - 熊猫兔 - Oracle、MySQL资料及经验

当数据量比较大的情况下,第二部耗时会很长,会导致停业务时间过长。因此比较适合在数据量比较小,而且业务可以接受停服务的情况使用。

方案二:

去O是一个系统工程 - 熊猫兔 - Oracle、MySQL资料及经验

此方案的特点是在第一阶段用ETL工具进行数据迁移时,业务是不停的。当处于基本追上状态的时候,意味着MYSQL上的数据和Oracle上的数据只差分钟级别的变化量。只需要在Oracle上停写几分钟,完成这部分增量数据的同步,就可以达成Oracle和MySQL中数据处于最终一致的状态。此时,启动新版应用就可以快速恢复业务。全程下来,停业务的时间只是在分钟级别。

迁移过程中需要考虑以下问题:
1. 表数量及数据量(迁移工作量)
2. 带宽(迁移时间)
3. 网络环境(源、目的数据库是否同时可达)
4. 是否有停应用迁移窗口(性能影响、增量迁移需求)
5. 意外中断(OGG支持断点续迁)
6. 迁移效率(并发,读取优化,写入优化)
7. 数据准确性(数据比对及校验)
8. 帐户权限
9. 外键等约束的迁移


  评论这张
 
阅读(25)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017