【干货】浅谈分布式数据库中间件之分库分表

举报
牵小柴散步 发表于 2018/07/13 14:43:55 2018/07/13
【摘要】 分库分表,顾名思义就是把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。那么关于分库分表,你了解多少呢?接下来,我们将从什么是数据分片及如何进行分片两方面对DDM分库分表做一个阐释。 什么是数据分片分片是解决数据库存储容量限制的直接途径。分片包括垂直分片与水平分片两种方式。垂直分片垂直分片又叫纵向分割,即以逻辑表为单位,把原有数据库切分成多个数据库。...

分库分表,顾名思义就是把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。那么关于分库分表,你了解多少呢?接下来,我们将从什么是数据分片及如何进行分片两方面对DDM分库分表做一个阐释。

   

什么是数据分片

分片是解决数据库存储容量限制的直接途径。分片包括垂直分片与水平分片两种方式。

垂直分

垂直分片又叫纵向分割,即以逻辑表为单位,把原有数据库切分成多个数据库。切分后不同的表存储在不同的数据库上。

垂直分片与业务架构设计有密切的联系。比如从业务领域对系统进行架构优化,分成多个子业务系统,各个子业务系统耦合度较低。子业务系统间以接口方式进行数据通信和数据交换。

垂直拆分后业务清晰,拆分规则明确,系统之间容易整合与扩展。一般用于数据库上层架构设计。

01.png 

垂直分片示意图 

 

水平分片

水平分片又叫横向分割,即以逻辑表中的数据行记录为单位,把原有逻辑数据库切分成多个物理数据库分片,表数据记录分布存储在各个分片上。

水平分片主要用业务架构无法继续细分,而数据库中单张表数据量太大,查询性能下降的场景。通过水平分片,即解决单库容量问题,同时提高并发查询性能。

 02.png

水平分片示意图 



DDM实现了自动水平分片,应用无需关心某个数据该存储在哪一块分片上。

对逻辑表水平分片需要依据一定的分片规则,例如一个订单跟踪系统,我们选取订单号(OrderId)作为拆分键,分别对“订单流水表”、“订单详情表”以及“物流跟踪表”进行水平拆分,拆分规则为对键值Hash后求模,则分片计算规则如下:

H(Key(OrderId)) = Hash(Key(OrderId))%N

其中,N表示一共有N个数据分片,H(Key(OrderId))表示该订单经过订单号Hash并求模后存储的分片编号。

03.png 

分片后数据存储示意图 

 

如何进行分片

在分布式数据库中,可以通过分库分表存储方式,轻松解决大数据量单表容量达到单机数据库存储上线的瓶颈。但是分库存储后,需要尽量避免跨库JOIN操作带来的性能与资源消耗问题。

因此创建逻辑库和逻辑表时,需要根据实际情况确定:

1、逻辑表分不分片?

DDM逻辑表支持全局表、分片表、单表三种类型。用户可以按照数据表的实际使用需求,选择最合适的逻辑表类型创建。

单表只在第一个分片创建表以及存储数据,全局表在每一个分片创建表并且存储全量数据。分片表在每一个分片创建表,数据按照拆分规则分散存储在分片中。

2、按什么规则分?

逻辑表的拆分键选择非常重要。建议按实际业务场景选择拆分键,不同逻辑表,如果具有E-R关系,建议选择相同字段做拆分键,避免跨库JOIN操作。

在实际使用中,有以下建议供参考:

数据量在1000万以下的表,不建议分片。通过建立合适的索引,采取读写分离策略,单表也可以很好的解决性能问题。

数据量在1000万以上的表,建议分片。将数据分片存储后,既能解决单张表容量过大带来的性能瓶颈,同时提高并发支持。注意要选择合适的拆分键,提前做好规划。

业务读取尽量少用多表JOIN,同一个事务避免跨分片。查询条件尽量带上拆分键,避免全分片表扫描。

 

数据库中间件DDM将底层数据库存储引擎以集群方式管理起来,用户使用非常方便。应用程序不需要关心具体有多少分片。类似操作单机数据库,用户通过DDM管理控制台进行数据库运维,使用JDBC等驱动服务或SQL客户端连接数据库,进行数据读写。想要了解更多,欢迎点击分布式数据库中间件DDM查看。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。