且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

数据库分区:海量数据分区改造的玄与机

更新时间:2022-09-02 22:49:51

本文讲的是数据库分区:海量数据分区改造的玄与机国内最受关注的数据库技术盛会——2017第八届中国数据库技术大会(DTCC2017)于2017年5月11-13日如约而至。本届大会以“数据驱动?价值发现”为主题,汇集来自互联网、电子商务、金融、电信、***、行业协会等20多个领域的120多位技术专家,共同探讨Oracle、MySQL、NoSQL、云端数据库、智能数据平台、区块链、数据可视化、深度学习等领域的前瞻性热点话题与技术。  

数据库分区:海量数据分区改造的玄与机

  (更多大会精彩:http://tech.it168.com/topic/2017/5-10/DTCC2017/)

在大会的分会场上,来自福富软件研究院的副理事长的梁敬彬来了《海量数据分区改造的玄与机》的精彩分享。

近年来随着数据爆炸式增长,不乏TB级OLTP数据库产生,甚至更大,单表的数据量出现上亿的记录,随着时间的推移表变的更加臃肿,影响了数据库的运行效率,增大了数据库的维护难度,也不利于数据的生命周期管理,这里就需要把大块的数据分而治之,也就是数据库上的分区。

对于分区表的改造思路梁敬彬表示,有普通手工思路和程序实现思路之分,前者新建一张分区表,按日期建分区,确保分区表各字段和属性都和普通表一样,然后停应用,将普通表记录插入到分区表中,再然后将普通表重命名,分区表命名表的名字,完成任务。而这种思路首先命名上会有冲突,插入很慢,并且手工操作很麻烦,尤其是多个分区表要改造的时候。而程序实现思路不用手工方式,用代码实现,重命名顺序执行,分区表用SPLIT模式完成,通过数据字典完成所有属性的完善。

谈到具体改造时梁敬彬谈到,“怎么样做这个事情效率最高,有时候一些脚本的使用频率比较高,在实施过程中,效率也不错。在普通表改造过程中,我们一般会遇到什么问题。首先建一张表,就有命名问题,新表旧表的名字肯定不一样;第二个就是重命名的时候要注意顺序,它的各个属性不能丢失;在性能方面也要注意,要用CTAS方式来进行;做多久能够完成?做的每个动作能不能记录下来?做了什么动作?万一失败的话在哪里失败?”

从梁敬彬展示的部分代码中可以看到,代码分成两部分,一个是脚本,一个测试。可以看到建立了一些有比较复杂属性的表,然后插入数据,通过快速的方式把的表的属性转化成了分区表;脚本分为两部分,逻辑部分可以对这些表进行各种操作,控制部分首先有个概念就是我们在生产环境中有很多脚本,如果直接来执行的话,可能会有些问题,虽然是程序来实现的,但是还是建议通过程序把要执行的脚本全部输出来,然后再一条条过。这里有个判断过程是零,就不执行。零的话有个好处,把脚本可以合一遍,可以手工一条条来执行。  

数据库分区:海量数据分区改造的玄与机

针对关系型数据库,它的表记录会有越来越大的情况。当然在oltp系统里面表非常大,并不是意味着查询非常慢,因为不管记录有多大,只要返回记录,所以分区表是我们在海量数据库里面的一个优化的很好的利器。

需要注意的2个因素为:1分区消除(提升性能)2.历史数据转移。所以当你无法满足这两点的时候,设计就有问题。分区建的选择一般是用在可以有效的割断数据的场合,比如地区号(从0591-0599区分福建的9个地市,这样访问厦门就不要访问别的地方,实现了有效的分区消除)比如时间(区分历史数据,可以只保留最新的数据,有效的实现了数据迁移和瘦身)。

原文发布时间为:2017-05-13

本文作者:张存

本文来自云栖社区合作伙伴IT168,了解相关信息可以关注IT168

原文标题:数据库分区:海量数据分区改造的玄与机