searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

浅谈分布式数据库场景下分库分表技术实践(一)

2023-03-28 10:34:14
16
0

 

  1. 背景:

    目前,在互联网大潮下,一些行业数据呈现海量增长模式,对应业务日趋复杂,随着操作量及计算量的增大,对性能、可靠性、可扩展性的要求也愈加强烈。业务数据存储方式从传统集中式数据库存储正转向分布式数据库分片存储,通过分布式数据库组件,实现数据存储的弹性扩展和高可靠性。同时,应用层为避免性能上瓶颈,在对应用数据库表结构进行设计时,往往采用分库分表分片方式,实现应用层对数据的高效读写访问。

  1. 分析:

   数据库分库分表的数据切分方式总体上可以分为垂直切分和水平切分方式,垂直切分是指按功能模块等维度拆分,解决业务对象所涉及的表与表之间的访问瓶颈竞争。水平切分是指将同一个表的数据按照一定业务维度进行分片存储,来解决单表中数据量海量增长出现的访问瓶颈。

        1)数据分片

             数据库表可以通过设定分片字段进行数据分片,可以采用业务字段分片,也可以采用专用分片键字段进行分片,如:

             创建分片库表,指定分片键:

               CREATE TABLE ` test_order ` (

  `field_1` varchar(20) DEFAULT NULL,

  `field_2` int(11) DEFAULT '1',

  `shard1` bigint(20) DEFAULT NULL,

  PRIMARY KEY (`field_1`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

             然后设置分片键及其分片算法

                  sharding @@table name='test_order' set type='sharding' and sharding_func='shard-XXX-FUNC' and sharding_id='shard1' and dn='dn1…';

      2)按照数据分片访问

            在进行数据分片访问时,为了提高读写访问效率,通过增加分片字段作为访问条件,实现数据所在分片的快速定位和寻址:

             Select * from test_order where shard1 = ? and field_1 = ?

      3) 构建统一数据访问层

        数据分片后,由于应用数据是分散存储在很多个存储节点上,应用访问数据层需要充分考虑复杂的分片策略和算法,将导致业务逻辑和数据存储逻辑耦合性高,功能实现复杂。特别是在应用数据存储结构发生变更或者需要切换不同类型数据库时,需进行大量改造工作,可维护性弱。因此,可以考虑封装统一的数据访问层,屏蔽底层物理库表数据分片策略的差异性,提供面向业务对象的数据读写访问:

     

  1. 结尾:

        在进行应用系统数据库库表设计时,针对大表的数据结构,对数据合理切分非常重要,除考虑合理的分片字段、分片算法外,还需考虑应用系统在对数据进行加工处理过程中涉及的数据迁移、数据寻址、分片数据一致性、分布式事务、数据在各分片上的均匀分布等诸多方面。因此,在分布式数据架构中,良好的数据切分,将为应用系统的可靠性、稳定性、扩展性、数据安全性等方面提供良好的数据基础。

 

 

 

0条评论
作者已关闭评论
邓****强
8文章数
0粉丝数
邓****强
8 文章 | 0 粉丝
原创

浅谈分布式数据库场景下分库分表技术实践(一)

2023-03-28 10:34:14
16
0

 

  1. 背景:

    目前,在互联网大潮下,一些行业数据呈现海量增长模式,对应业务日趋复杂,随着操作量及计算量的增大,对性能、可靠性、可扩展性的要求也愈加强烈。业务数据存储方式从传统集中式数据库存储正转向分布式数据库分片存储,通过分布式数据库组件,实现数据存储的弹性扩展和高可靠性。同时,应用层为避免性能上瓶颈,在对应用数据库表结构进行设计时,往往采用分库分表分片方式,实现应用层对数据的高效读写访问。

  1. 分析:

   数据库分库分表的数据切分方式总体上可以分为垂直切分和水平切分方式,垂直切分是指按功能模块等维度拆分,解决业务对象所涉及的表与表之间的访问瓶颈竞争。水平切分是指将同一个表的数据按照一定业务维度进行分片存储,来解决单表中数据量海量增长出现的访问瓶颈。

        1)数据分片

             数据库表可以通过设定分片字段进行数据分片,可以采用业务字段分片,也可以采用专用分片键字段进行分片,如:

             创建分片库表,指定分片键:

               CREATE TABLE ` test_order ` (

  `field_1` varchar(20) DEFAULT NULL,

  `field_2` int(11) DEFAULT '1',

  `shard1` bigint(20) DEFAULT NULL,

  PRIMARY KEY (`field_1`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

             然后设置分片键及其分片算法

                  sharding @@table name='test_order' set type='sharding' and sharding_func='shard-XXX-FUNC' and sharding_id='shard1' and dn='dn1…';

      2)按照数据分片访问

            在进行数据分片访问时,为了提高读写访问效率,通过增加分片字段作为访问条件,实现数据所在分片的快速定位和寻址:

             Select * from test_order where shard1 = ? and field_1 = ?

      3) 构建统一数据访问层

        数据分片后,由于应用数据是分散存储在很多个存储节点上,应用访问数据层需要充分考虑复杂的分片策略和算法,将导致业务逻辑和数据存储逻辑耦合性高,功能实现复杂。特别是在应用数据存储结构发生变更或者需要切换不同类型数据库时,需进行大量改造工作,可维护性弱。因此,可以考虑封装统一的数据访问层,屏蔽底层物理库表数据分片策略的差异性,提供面向业务对象的数据读写访问:

     

  1. 结尾:

        在进行应用系统数据库库表设计时,针对大表的数据结构,对数据合理切分非常重要,除考虑合理的分片字段、分片算法外,还需考虑应用系统在对数据进行加工处理过程中涉及的数据迁移、数据寻址、分片数据一致性、分布式事务、数据在各分片上的均匀分布等诸多方面。因此,在分布式数据架构中,良好的数据切分,将为应用系统的可靠性、稳定性、扩展性、数据安全性等方面提供良好的数据基础。

 

 

 

文章来自个人专栏
解构分布式应用架构
8 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0