`
lsy
  • 浏览: 123232 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

浅谈MySQL Sharding分片技术

 
阅读更多
一个生产系统总会经历一个业务量由小变大的过程,可扩展性成为了考量系统高可用性的一个重要衡量指标。试想一下,一个记事本应用程序,在存储的很少字节时,能够快速的打开和访问,但是如果硬要让记事本存储百万、千万字节,那么这个记事本估计就歇菜了!同样,系统刚开始的时候,用户数量不多,所有的数据都放在了同一个数据库中,此时因为用户少压力小,一个数据库完全可以应付的了。但是随着用户数量不断增加,数据库压力也与日俱增,如果没有妥善的扩容机制,那么再强劲的硬件和商业数据库也会歇菜。

“Shard”字面意思为碎片,Sharding可以译为分片。MySQL5以后提供了Sharding的能力,其目的就是为突破单节点数据服务器I/O能力限制,解决数据库Scale Out水平扩展的问题。通过Sharding可以将数据按照物理位置贴合用户分布,得到更加快速的响应;操作庞然大物总是让人头疼,Sharding将数据分块,更小的数据集操作汇总能够得到更加的体验;分片使得数据分摊在各个数据节点,对其操作实现负载均衡,众多屌丝的汇聚战胜了一个高富帅!

ü  Sharding按方向可以分为两类。垂直分区:以表为单位,把不同的表分散到不同的数据库或主机上。特点是规则简单,实施方便,适合业务之间耦合度低的系统。水平分区:以行为单位,将同一个表中的数据按照某种条件拆分到不同的数据库或主机上。特点是相对复杂,适合单表巨大的系统。

ü  Sharding按模式可以分为两大模式。静态分片模式,即分区键是静态分配的,一般使用范围或哈希函数,例如深圳团队放到一个分片,北京团队放到另外一个分片;或者编号为0096开头的员工放到一个分片,而0199开头的员工放到另外一个分片。这种模式虽然实现简单,但明显的缺陷便是存在数据不均匀的情况。动态分片模式,即分区函数将从字典中查找分区键,然后定位具体哪个分片存储了数据。这种模式比静态模式更加灵活,但是需要一个集中存储来存放字典,每次查找数据都需要执行2次查询,并且集中存储本身还可能存在单点故障。

ü  Sharding按分区类型分为:

1)        RANGE 分区:基于属于一个给定连续区间的列值,把多行分配给分区。

2)        LIST 分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。

3)        HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。

4)        KEY 分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL 服务器提供其自身的哈希函数。必须有一列或多列包含整数值。

在经过周密的设计和反复的测试后发现,所做的一切的努力都是值得的,MySQL的Sharding技术让一群低廉的PC服务器构成了一个可以媲美昂贵的小型机+商业数据库的性能,以低成本的方式构建了强大的数据中心。难怪淘宝这个巨人在很早的时候就一直推行“走你IOE”!

因此,学习MySQL Sharding百益而无一害!最早的先驱者估计可以是Google捐赠给开源社区的Hibernate shards了,这是一个Hibernate应用横向分割的分布式数据库解决方案的框架。它可以让一个Hibernate应用比较简单地加入横向分割的数据库分布式功能。另外,还有HiveDB。其底层也是基于Hibernate shards实现,目前版本相对稳定,其亮点是具有类似mysql proxy之类多服务器容错功能,单独服务器发生故障不影响系统正常运行,通过类似ha-jdbc思想实现。最后,不得不提的就是淘宝贡献的TDDL,使用过淘宝的同学应该都深有体会,其可靠性、可用性、稳定性、可扩展性均领跑业界很多同类产品。TDDL最大的两个亮点是动态数据源管理和分库分表。建议抽出游戏时间,向淘宝好好学习,天天向上!

分享到:
评论

相关推荐

    Sharding JDBC 实现数据分片 - 技术分享.pdf

    ShardingJDBC是一种轻量级Java框架,它提供了一种基于jar包的服务,用于实现数据库的自动分库分表,也就是数据分片。数据分片是一种数据库架构模式,它将一个数据库分成多个小的、更易管理、可扩展的部分。随着业务...

    mysql分库分表-mysql-sharding-jdbc.zip

    `mysql-sharding-jdbc` 是一个用于 MySQL 数据库分片的 Java 框架,它提供了 JDBC 驱动接口,使得开发者可以方便地在应用层进行分库分表操作。 一、MySQL 分库分表原理 1. 分库:将一个大型数据库拆分为多个小型...

    sharding-jdbc数据分片

    sharding-jdbc通过数据分片技术解决了大数据量带来的性能瓶颈,为Java开发者提供了高效、易用的数据库扩展方案。结合SpringBoot框架,它简化了数据分片的集成过程,使得开发者能更专注于业务逻辑,而无需过多关注...

    sharding-proxy实现分表

    - 配置 `conf/server.yaml` 文件,设置连接MySQL的配置信息,包括数据源、分片规则、端口等。 - 如果需要,配置 `conf/sharding-rule.yaml` 或 `conf/master-slave-rule.yaml` 文件,定义具体的分片规则。 #### ...

    springmvc4.3+mysql5.6+shardingjdbc1.4

    3. **配置ShardingJDBC**:在项目中配置ShardingJDBC规则,包括分片策略(如哈希取模、范围分片等)、数据源信息等。 4. **SpringMVC整合**:在SpringMVC配置文件中,定义数据源、事务管理器,并结合ShardingJDBC的...

    sharding分库分表demo

    本示例通过整合一系列技术,包括SpringBoot、ShardingSphere、Swagger和MyBatis-Plus,来演示如何在实际应用中实现分库分表的操作。 首先,SpringBoot是一个基于Spring框架的轻量级启动器,它简化了初始化和配置...

    Spring boot+Spring JDBC Template+mysql+ sharding-j-subdb.zip

    总结一下,这个项目结合了Spring Boot的快速开发能力,Spring JDBC Template的数据库操作便捷性,MySQL的稳定存储,以及Sharding-J-Subdb的数据库分片策略,构建了一个能够处理大规模数据并提供高并发访问能力的应用...

    springmvc4.3+mysql5.6+shardingjdbc2.0.3

    标题 "springmvc4.3+mysql5.6+shardingjdbc2.0.3" 描述了一个基于Java的Web开发项目,它集成了Spring MVC 4.3版本、MySQL 5.6数据库以及ShardingJDBC 2.0.3版本的分库分表框架。这个项目提供了一个基础架构,允许...

    sharding-jdbc-demo

    【标题】"sharding-jdbc-demo" 是一个基于Sharding-JDBC、SpringBoot、MyBatis和Druid的示例项目,旨在展示如何在Java环境中整合这些组件来实现数据库分片和微服务架构。 【描述】这个项目的核心是利用Sharding-...

    分布式数据库-MySQL Sharding1

    分布式数据库-MySQL Sharding1 是一种将单个数据库拆分成多个数据库节点的技术,目的是为了解决单个数据库的性能瓶颈和存储空间限制。这种技术可以将数据分布到多个数据库节点上,以提高系统的整体性能和可扩展性。 ...

    mysql分库分表sharding-jdbc-sharding-jdbc-demo.zip

    这个"mysql分库分表sharding-jdbc-sharding-jdbc-demo.zip"压缩包提供的就是一个使用Sharding-JDBC进行数据库分库分表的示例项目。 Sharding-JDBC的工作原理是通过透明化的JDBC层,将数据路由、分片规则、读写分离...

    ShardingJDBC分库分表mysql数据库实战小滴新版

    同时,课程还涉及分库分表进阶内容,如 Snowflake 雪花算法实战、广播表和绑定表配置实战以及 Sharding-Jdbc 多种分片策略实战,包括精准分片算法、范围分片算法、复合分片算法和 Hint 分片算法等。此外,课

    2012 最新的mongodb sharding配置步骤 权威指南 分片步骤

    在处理海量数据时,为了提高性能和可扩展性,MongoDB 提供了分片(Sharding)功能,即将数据分散到多个物理节点上,实现水平扩展。本文将详细介绍2012年最新的MongoDB分片配置步骤,适用于权威的MongoDB环境搭建。 ...

    sharding-sphere-demo 分表分库

    1. **配置分片策略**:在Sharding-Sphere中,需要定义分片规则,这包括分片键(决定数据如何分片的字段)、分片算法(如何计算分片位置的逻辑)以及分片策略(如何将数据分配到不同的库和表)。 2. **集成到应用**...

    30分钟学MongoDB系列——分布式架构分片(Sharding)

    其中,分片(Sharding)是MongoDB中非常重要的分布式特性之一,它能够帮助数据库管理系统实现数据的水平扩展,以提升整个系统的处理能力和吞吐量。 分片概念的起源可以追溯到大型多人在线角色扮演游戏(MMORPG),...

    原创Linux下Mongodb的分布式分片群集(sharding cluster)配置

    分片(Sharding)是MongoDB中的关键特性,旨在通过将数据分散到多个物理节点来处理大规模的数据存储和查询。分片群集由三个主要组件构成: 1. **分片服务器(Shard Server)**:存储实际的数据,每个分片负责一部分...

    k8s 安装 mongodb 分片(Sharding)+ 副本集(Replica Set)

    k8s 安装 MongoDB 分片(Sharding)+ 副本集(Replica Set) k8s 安装 MongoDB 分片(Sharding)+ 副本集(Replica Set)是结合 Kubernetes(k8s)和 MongoDB 实现高可用性和高性能的解决方案。本解决方案通过使用 ...

    MySQL分库分表-sharding_demo.zip

    MySQL的分库分表是一种常见的数据库扩展策略,用于解决单个数据库系统在处理大量数据和高并发场景下性能瓶颈的问题。本示例"sharding_demo"将深入探讨如何实现这一策略,通过创建分布式数据库环境来提升系统的可扩展...

    应对sharding-jdbc结合mybatis实现分库分表功能 分表的联合查询采用将mysql的数据同步到elasticsearch进行筛选

    通过Sharding-JDBC和MyBatis实现数据库分片,结合Logstash将MySQL数据同步到Elasticsearch,解决了分库分表后的联合查询难题,同时利用Elasticsearch的高性能搜索能力,实现了高效的数据筛选。这样的设计思路在大...

    集成sharding-jdbc实现分库分表.zip

    Sharding-JDBC通过规则配置,可以根据特定的分片策略(如取模、范围等)将数据分布到不同的数据库和表上,达到数据分散的效果。 3. **Sharding-JDBC的集成步骤** - 引入库:在项目中添加Sharding-JDBC的Maven或...

Global site tag (gtag.js) - Google Analytics