mysql sharding(碎片)介绍
1、Sharding 的应用场景一般都那些?
当数据库中的数据量越来越大时,不论是读还是写,压力都会变得越来越大。试想,如果一张表中的数据量达到了千万甚至上亿级别的时候,不管是建索引,优化缓存等,都会面临巨大的性能压力。sharding通过某种条件,把同一个数据库中的数据分散到多个数据库或多台机器上,以减小单台机器压力。
联机游戏、IM、BSP 都是比较适合 Sharding 的应用场景;
2、Sharding与数据库分区(Partition)的区别?
sharding实现了数据的分布式部署,将数据通过一系列的切分规则,把数据分布到不同的DB服务器上,通过路由规则访问特定的数据库,这样一来,每次访问面对的就不是单台服务器,而是N台服务器,这样就降低了单台服务器的压力。
partition只实现了DB内的分区,不能跨服务器部署。
“Shard” 这个词英文的意思是”碎片”,而作为数据库相关的技术用语,似乎最早见于大型多人在线角色扮演游戏(MMORPG)中。”Sharding” 姑且称之为”分片”。
Sharding 不是一门新技术,而是一个相对简朴的软件理念。如您所知,MySQL 5 之后才有了数据表分区功能,那么在此之前,很多 MySQL 的潜在用户都对 MySQL 的扩展性有所顾虑,而是否具备分区功能就成了衡量一个数据库可扩展性与否的一个关键指标(当然不是唯一指标)。数据库扩展性是一个永恒的话题,MySQL 的推广者经常会被问到:如在单一数据库上处理应用数据捉襟见肘而需要进行分区化之类的处理,是如何办到的呢? 答案是:Sharding。
Sharding 不是一个某个特定数据库软件附属的功能,而是在具体技术细节之上的抽象处理,是水平扩展(Scale Out,亦或横向扩展、向外扩展)的解决方案,其主要目的是为突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。
相关推荐
-
MySQL 清除表空间碎片的实例详解
MySQL 清除表空间碎片的实例详解 碎片产生的原因 (1)表的存储会出现碎片化,每当删除了一行内容,该段空间就会变为空白.被留空,而在一段时间内的大量删除操作,会使这种留空的空间变得比存储列表内容所使用的空间更大: (2)当执行插入操作时,MySQL会尝试使用空白空间,但如果某个空白空间一直没有被大小合适的数据占用,仍然无法将其彻底占用,就形成了碎片: (3)当MySQL对数据进行扫描时,它扫描的对象实际是列表的容量需求上限,也就是数据被写入的区域中处于峰值位置的部分: 例如: 一个表有1万行
-
解析mysql 表中的碎片产生原因以及清理
大量删除数据必然会在数据文件中造成不连续的空白空间,而当插入数据时,这些空白空间则会被利用起来 .对于不同的存储引擎整理碎片的方式不一样.myisam可以有以下方式:mysql> show table status from test like 'testusers'\G*************************** 1. row *************************** .... Rows: 3 Avg_row_length: 45
-
mysql sharding(碎片)介绍
1.Sharding 的应用场景一般都那些? 当数据库中的数据量越来越大时,不论是读还是写,压力都会变得越来越大.试想,如果一张表中的数据量达到了千万甚至上亿级别的时候,不管是建索引,优化缓存等,都会面临巨大的性能压力.sharding通过某种条件,把同一个数据库中的数据分散到多个数据库或多台机器上,以减小单台机器压力. 联机游戏.IM.BSP 都是比较适合 Sharding 的应用场景: 2.Sharding与数据库分区(Partition)的区别? sharding实现了数据的分布式部署,将
-
MySql索引详细介绍及正确使用方法
MySql索引详细介绍及正确使用方法 1.前言: 索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点. 索引是存储引擎用于快速查找记录的一种数据结构,通过合理的使用数据库索引可以大大提高系统的访问性能,接下来主要介绍在MySql数据库中索引类型,以及如何创建出更加合理且高效的索引技巧. 注:这里主要针对的是InnoDB存储引擎的B+Tree索引数据结构 2.索引的优点 1.大大减轻了服务器需要扫描的数据量,从而提高了数据的检索速度 2.帮助服务器避免排序和临时表 3.可以将
-
MySQL磁盘碎片整理实例演示
目录 1.磁盘碎片是什么 2.实验 3.对于碎片回收操作 4.后记 补充:如何优化磁盘空间 数据库引擎以InnoDB为主 1.磁盘碎片是什么 InnoDB表的数据存储在页中,每个页可以存放多条记录,这些记录以树形结构组织,这棵树称为B+树. 聚簇索引的叶子结点包含行中所有字段的值,辅助索引的叶子结点包含索引列和主键列. 在InnoDB中,删除一些行,这些行只是被标记已删除,而不会立即删除,个人认为和电脑的清除磁盘相同,之后可以通过覆盖旧数据实现删除,InnDB的Purge线程会异步的清理这
-
docker连接spring boot和mysql容器方法介绍
在之前使用docker部署运行了Spring Boot的小例子,但是没有使用数据库.在这一篇中,介绍docker如何启动mysql容器,以及如何将Spring Boot容器与mysql容器连接起来运行. docker基本命令 首先熟悉一下在操作过程中常用的docker基本命令: docker images:列出所有docker镜像 docker ps:列出所有运行中的容器,-a参数可以列出所有容器,包括停止的 docker stop container_id:停止容器 docker start
-
MySQL高级学习笔记(三):Mysql逻辑架构介绍、mysql存储引擎详解
Mysql逻辑架构介绍总体概览 和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用.主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离 . 这种架构可以根据业务的需求和实际需要选择合适的存储引擎. controller层: Connectors:连接层,c .java等连接mysql 业务逻辑处理成: Connection Pool:连接层 c3p0连接池等 Manager Service util:备份.容灾
-
MySQL 整体架构介绍
MySQL 在整体架构上分为 Server 层和存储引擎层.其中 Server 层,包括连接器.查询缓存.分析器.优化器.执行器等,存储过程.触发器.视图和内置函数都在这层实现.数据引擎层负责数据的存储和提取,如 InnoDB.MyISAM.Memory 等引擎.在客户端连接到 Server 层后,Server 会调用数据引擎提供的接口,进行数据的变更. 连接器 负责和客户端建立连接,获取用户权限以及维持和管理连接. 通过 show processlist; 来查询连接的状态.在用户建立连接后,
-
MySQL Shell的介绍以及安装
01 ReplicaSet的架构 前面的文章中,我们说了ReplicaSet的基本概念和限制以及部署前的基本知识.今天我们来看InnoDB ReplicaSet部署过程中的两个重要组件之一的MySQL Shell,为了更好的理解MySQL Shell,画了一张图,如下: 通过上面的图,不难看出,MySQL Shell是运维人员管理底层MySQL节点的入口,也就是DBA执行管理命令的地方,而MySQL Router是应用程序连接的入口,它的存在,让底层的架构对应用程序透明,应用程序只需要连接MyS
-
mysql事务详细介绍
目录 简介 事务四个特性 事务隔离级别 验证 MVCC 当前读 快照读 当前读.快照读.MVCC关系 mvcc 解决的问题 MVCC实现原理 可见性规则 简介 事务是由一组sql语句组成的逻辑处理单元 事务四个特性 原子性(Atomicity): 要么都成功要么都失败 undo log实现 一致性(Consistent): 如转账前后两个数额总合保持不变 隔离性(lsolation):数据库提供一定的隔离机制,保证事务在不受外部并发操作影响的"独立"环境下运行 锁,mvcc多版本并发控
-
MySQL游标详细介绍
目录 1.什么是游标(或光标) 2.如何使用游标 1.声明游标 2.打开游标 3.使用游标 4.关闭游标 3.代码举例 4.小结 1.什么是游标(或光标) 虽然我们也可以通过筛选条件 WHERE 和 HAVING,或者是限定返回记录的关键字 LIMIT 返回一条记录,但是,却无法在结果集中像指针一样,向前定位一条记录.向后定位一条记录,或者是随意定位到某一条记录,并对记录的数据进行处理. 这个时候,就可以用到游标.游标,提供了一种灵活的操作方式,让我们能够对结果集中的每一条记录进行定位,并对指向
-
MySql事务原理介绍及特性
目录 1. 什么是事务 2. 事务是如何做到同时成功失败 3. 如何提交回滚事务 1. mysql 中默认的事务行为是怎样的 2. 回滚事务 3. 提交事务 4. 事务的4个特性 5. 事务的隔离性 1. 什么是事务 一个事务就是一个完整的业务逻辑. 什么是一个完整的业务逻辑? 假设转账,从A账户向B账户中转账10000. 将A账户的钱减去10000 ( update语句) 将B账户的钱加上10000 ( update语句) 这就是一个完整的业务逻辑. 以_上的操作是-一个最小的工作单元,要么同
随机推荐
- python 递归遍历文件夹,并打印满足条件的文件路径实例
- laravel实现分页样式替换示例代码(增加首、尾页)
- PHP中常用的转义函数
- PHP实现用户认证及管理完全源码
- delphi建立、读取、存贮INI文件的方法《三》
- 使用Nginx 反向代理来避免 ajax 跨域请求的方法
- 详解SQLite中的数据类型
- jQuery.Callbacks()回调函数队列用法详解
- javascript 异常处理使用总结
- 详解Nginx 和 PHP 的两种部署方式的对比
- spring配置扫描多个包问题解析
- Java的正则表达式深入分析
- android全局监控click事件的四种方式(小结)
- 使用ETags减少Web应用带宽和负载第1/2页
- 主流6类数据布线技术的思考
- 详解Spring Cloud Zuul重试机制探秘
- swing jtextArea滚动条和文字缩放效果
- 创建Android库的方法及Android .aar文件用法小结
- 浅析Java常用API(Scanner,Random)匿名对象
- jenkins和sonar实现代码检测过程详解