`
844604778
  • 浏览: 549993 次
文章分类
社区版块
存档分类
最新评论

基于MySQL分库分表方案简介

 
阅读更多

一、背景介绍

1.大数据量的存储需要大量的数据库资源;

2.数据量的不断增长要求数据库存储具有可扩展性;

3.在保证大数据量的情况下,要保证性能、高可用性等质量要求;

4.现有框架中没有彻底解决大数据量的存储问题;

5.Oracle等海量存储方案价格不菲,采用MySQL进行分库分表节约IT成本。

二、可行性分析

1.风险评估

1)DBA数据库管理的资源和规范要求;

2.业务数据量规模和变化的影响

1)对于事先可规划的中等以上数据规模,采用单库分表(一个数据库实例,分多张表)、读写分离、或者多库多表(多个数据库实例,多张表)可以满足业务需求,且相应设计和实现相对简单,不易出错。

2)对于初期数据规模不可准确预知,但随着业务发展数据规模不断增长的系统,要求数据存储具有可扩展性。这种可扩展性通过分库分表解决,要求分库分表在路由上具有极强的伸缩性,这也是分库分表的难点,本方案提出一个循序渐进的实现路线逐步解决这个问题。

3.技术积累

1)公司已有简单的分库分表方案

2)这个方案缺乏扩展性

3)本方案将提出短期实现一定扩展性、中长期高可扩展性的方案

4.开源或产品

1)商业版数据库Sharding:MySQL Proxy,提供MySQL协议接口(非JDBC),主从结构,可以负载平衡,读写分离,failover等,lua语法复杂,不支持大数据量的分库分表;

2)Amoeba,支持分数据库实例,每个数据相同的表,不支持事务;类似MySQL Proxy,设计上抛弃lua,更简单;

3)阿里集团研究院开源的CobarClient,主要面向小规模的数据库sharding集群访问,基于ibatis,需要规划数据规模,缺乏扩展性;另外有Cobar,阿里集团内部的一个完整DAL层,实现完整JDBC代理;

4)HibernateShards,Hibernate提供的sharding,支持分数据库实例,比较复杂,事先规划数据规模,和框架不符;

5)guzz,多库(虚拟的数据库,实际数据库的路由规则仍然自定义)、表分切、读写分离,以及多台数据库之间透明的分布式事务支持,设计目标是支持大型在线生产应用;需完全替换ibatis;完全和框架不符。

6)TDDL,淘宝的DAL,很强的分库分表能力,仍然需要数据量实现规划,动态扩展有限。

7)以上某些产品在一定程度上可以满足我们的需求,但不能彻底解决我们大数据量可扩展的问题。

三、性能指标

1.和没有引入分库分表时相比,每次操作最大延迟<1ms;

四、特性列表和RoadMap

1.垂直分库,不同业务数据使用不同数据库实例存储

2.数据切分:

a)根据切分字段Hash取模;

b)确定需要切分的数据,尽量将可能进行关联的分片数据放在一个数据库实例中,例如同一用户的基本信息、好友信息或者文件信息等;

3.短期:分库分表

a)数据库实例编号递增

b)每个数据库内分表序号从1递增,不全局编号

c)基于数据源(ibatis基础上)拦截建立访问层,应用感知

d)应用需在底层进行数据源、分布式事务考虑和管理等

e)可扩展性:只支持向上扩展,不支持收缩

4.长期:数据库访问层

a)建立灵活的数据切分和路由规则

b)支持MySQL集群

c)读写分离和负载均衡

d)可用性探测

e)分布式事务

f)对应用透明


附录:


分享到:
评论

相关推荐

    基于mybatis插件实现轻量级分库分表方案-亿级数据mysql存储解决方案-mybatis-sharding.zip

    基于mybatis插件实现轻量级分库分表方案-亿级数据mysql存储解决方案-mybatis-sharding

    分库分表案例.rar

    本案例基于mysql数据库实现的分库分表和读写分离示例,使用IDEA开发,有数据库结构和示例完整源码

    Zebra:美团点评集团统一使用MySQL数据库访问层的中间件。主要提供对业务开发透明,读写分库,分库分表能力,并提供端到端SQL监控的集成方案

    具有以下功能点:配置集中管理,动态刷新支持读写分离,分库分表丰富的监控信息在CAT上展现初步化数据库请求,多数据源支持核心价值简化了识别分离,分库分表的开发工作,并在业务方在分库分库,识读分离的情况下,...

    Gaea:Gaea是一个mysql代理,由小米b2c-dev团队开发

    其中分库分表方案兼容了mycat和kingshard两个项目的路由方式。Gaea在设计,实现阶段参照了mycat,kingshard和vitess ,并使用tidb parser作为内置的sql parser,在此表达诚挚感谢。为了方便使用和学习Gaea,我们也...

    TiDB架构及设计实现

    高度兼容MySQL大多数情况下,无需修改代码即可从MySQL轻松迁移至TiDB,分库分表后的MySQL集群亦可通过TiDB工具进行实时迁移。水平弹性扩展通过简单地增加新节点即可实现TiDB的水平扩展,按需扩展吞吐或存储,轻松...

    阿里云数据库DRDS解决方案.docx

    DRDS 是一款基于 MySQL 存储、采用分库分表技术进行水平扩展的分布式 OLTP 数据库服务产品,支持 RDS for MySQL 以及 POLARDB for MySQL,产品目标旨在提升数据存储容量、并发吞吐、复杂计算效率三个方面的扩展性...

    Mycat-server-1.6-RELEASE源码

    Mycat关键特性 关键特性 支持SQL92标准 支持MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常见SQL语法 ...支持库内分表(1.6) 集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。

    在OneProxy的基础上实行MySQL读写分离与负载均衡

    采用与MySQL Proxy一致的反向协议输出模式,对应用非常简单和透明易用,让用户畏惧的数据库故障切换(Failover)、读写分离(Read/Write Split)、分库分表(Horizontal Partitioning)等复杂方案变得极其简单可控!...

    PingCAP TiDB 中文技术手册-2017

    TiDB 对业务没有任何侵入性,能优雅的替换传统的数据库中间件、数据库分库分表等 Sharding 方案。同时 它也让开发运维人员不用关注数据库 Scale 的细节问题,专注于业务开发,极大的提升研发的生产力。

    PingCAP TiDB 中文技术手册 2017 pdf

    TiDB 对业务没有任何侵入性,能优雅的替换传统的数据库中间件、数据库分库分表等 Sharding 方案。同时 它也让开发运维人员不用关注数据库 Scale 的细节问题,专注于业务开发,极大的提升研发的生产力。

    Java思维导图xmind文件+导出图片

    MySQL高性能解决方案之分库分表 数据库中间件初始Mycat 基于Mycat实习MySQL数据库读写分离 基于Mycat实战之数据库切分策略剖析 Mycat全局表、Er表、分片预警分析 Nginx 基于OpenResty部署应用层Nginx以及...

    2021互联网大厂Java架构师面试题突击视频教程

    那如何设计可以动态扩容缩容的分库分表方案? 50_一个关键的问题!分库分表之后全局id咋生成? 51_说说MySQL读写分离的原理?主从同步延时咋解决? 52_如何设计高可用系统架构?限流?熔断?降级?什么鬼!

    基于SSM的人大机关办公管理系统.zip

    同时,为了保证数据安全性,系统采用了分库分表策略,将数据分散存储在不同的数据库实例中。在功能模块方面,系统包括以下几个主要模块:登录注册模块:用户可以通过该模块实现登录和注册功能,便于系统管理员管理和...

    百度地图开发java源码-IDEAF---DEMO:整合分布式企业级应用框架的综合性DEMO

    当当的基于jdbc协议的数据库分库分表解决方案,完美衔接spring+mybaits的ORM层实现(暂不支持oracle)。在本项目中用于实现CRUD的分库分表及读写分离。 #####github: 集成方式:嵌入式 使用依赖:jar包 项目配置文件...

    理解TIDB架构设计

    MySQL要想能做到水平扩展,唯一的方法就业务层的分库分表或者使用中间件等方案。但是,这些中间层方案也有很大局限性,执行计划不是最优,分布式事务,跨节点join,扩容复杂等。TiDB是一个开源分布式NewSQL数据库。...

    开涛高可用高并发-亿级流量核心技术

    14.5.3 使用sharding-jdbc分库分表 279 14.5.4 sharding-jdbc分库分表配置 279 14.5.5 使用sharding-jdbc读写分离 283 14.6 数据异构 284 14.6.1 查询维度异构 284 14.6.2 聚合数据异构 285 14.7 任务系统扩容 285 ...

    分片方法:分表分库的新思路-服务层共享框架,全SQL,全数据库兼容,ACID特性与原生数据库一致,能实现RR等级分离,无SQL解析性能更高

    我们目前国内主流的Sharding框架都是基于SQL来完成,其主要流程:是解析上层层次SQL结合对应的分表分库配置,对合并SQL进行改写并分发到对应的单机数据库上获得各个单机数据库的返回结果后,根据原SQL归并结果,返回...

    JeeSite快速开发平台-其他

    支持读写分离、分库分表;支持微服务应用。 JeeSite 快速开发平台的主要目的是能够让初级的研发人员快速的开发出复杂的业务功能(经典架构会的人多),让开发者注重专注业务,其余有平台来封装技术细节,降低技术...

    Mycat数据库中间件 v1.13

    支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。 支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。 支持多租户方案。 支持分布式事务(弱xa)。 支持全局序列号,解决分布式...

Global site tag (gtag.js) - Google Analytics