场景问题
当系统的访问量达到上百万用户时,系统的性能达到了上限,系统已经做了一轮轮优化:
(1)应用集群
(2)程序优化
(3)数据库优化(SQL优化、集群)
(4)数据缓存
(5)网络优化(加大带宽、多个网卡)
(6)操作系统优化
但是,系统到了又一个瓶颈,在怎么优化都没有什么效果了。通过性能跟踪,发现是数据库的数据量太大了(几张表都达到了10亿条数据了),而且随着系统的用户访问数据是不停的往上增加。SQL无论怎么优化,数据操作的时间已经达到了一个极限了。
发现数据库服务器的CPU和IO已经都达到了100%,可见,当前机器的硬件情况已经到达了极限,接下来怎么办呢?有人说,把机器换成一台更加强大的机器,磁盘做磁盘阵列。没错,这些做完后,缓解了性能的瓶颈,但是,随着数据量的增加,性能瓶颈又一次出现了。机器又达到极限了。再换更强大的机器,以此类推。机器真的能无止境的变强下去吗?
我们看到了应用可以集群,那么数据为什么不能集群呢?了解后才发现,数据的集群不是那么回事,虽然访问的是多台机器了,但数据还是同一份。最终IO的瓶颈还是会出现。
能不能仿照应用集群那样,有一个HTTP服务器和多个应用服务器。数据也有一个总控制器和多个数据服务器?那就需要将数据进行切分成一块块的,分布在不同的机器上。这样我们可以无限制的进行数据切分,无限制的增加数据服务器。
这个时候我们又遇到新的问题:怎么切分才是合理的?怎么才能找到对应的数据块呢?下面我们介绍怎么通过数据分库来解决以上的问题。
数据分库:基于性能考虑,将数据存放到不同的数据库服务器中,一般可以按两个纬度来拆分数据:
垂直拆分:是指按功能模块拆分,比如CRM可以将客户信息、订单信息、产品信息存放在不同的数据库中,这种方式多个数据库之间的表结构不同。
水平拆分:而水平拆分是将同一个表的数据进行分块保存到不同的数据库中,比如:可以将客户信息按照不同市分别存放在不同的数据库中,这些数据库中的表结构完全相同。
分享到:
相关推荐
水平拆分数据分库和分表的核心问题是表的ID唯一,然后根据唯一的ID映射到一个物理存储位置,这个映射方案要考虑到满足数据量暴增线性扩展和业务上容易保持一致,本文主要讨论分库分表如何映射的问题。
数据分库分表最佳实践.docx
spring动态数据源整合mybatis实现的分库分表操作。 分库分表对业务代码是透明的,只需要在配置文件分配分库模版即可动态的实现分库分表的增删改查操作。
主要介绍了SpringBoot 2.0 整合sharding-jdbc中间件,实现数据分库分表,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
通过使用sharding-jdbc分库分表,以及多数据源的切换
● 海量数据分库分表+文件存储:Mysql8.0+ShardingSphere多维度分库分表 + 阿里云OSS ● 实时计算+数据处理+存储可视化:Flink1.13 + ClickHouse + HDFS + 数据清洗分层 + Echart可视化数据 ● 分布式链路追踪+监控+...
文本分类微博性别分类数据语料库
分库分表数据看板项目实战
Java+Springboot+mybatis+sharding jdbc 实现分库分表
<动态数据源之分库解析1(固定N数据源,切换多数据源)>文章的代码
通用RBAC权限设计及其数据权限和分库分表 支持服务限流、动态路由、灰度发布、 支持常见登录方式, 多系统SSO登录 基于 Spring Cloud Hoxton 、Spring Boot 2.3、 OAuth2 的RBAC权限管理系统 提供对常见容器化支持 ...
Python与MySQL分表分库实战,压缩包文件,欢迎下载。11
一个MySQL分库分表php类。当一个表数据记录过大时...一般而言,分库分表属于水平分割,按照一定的规则将数据插入到不同的表中去。而分库则可以很方便的转移数据库的压力,比如将一个很大库的分 别放在不同的服务器上。
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 关键字: 水平切分,分库,分表,主从,集群 第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一...
分库分表这个是8月份左右跟淘宝的数据分析部门的架构师离哲交流的时候产生的想法,离哲推荐采用TDDL进行分库分表。 回去一看,却发现TDDL只开源了一半,开源的那一半基本没法使用,所以只能自己写一个Sharding了...
待处理数据的初态 C. A和B 3.计算机算法指的是(1),它必须具备(2) 这三个特性。 (1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法 (2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、...
此代码是《分库(备份库、建库,动态创建数据源、动态切换数据源)》文章的代码部分
【导读】我们知道,ApacheSpark在处理实时数据方面的能力非常出色,目前也在工业界广泛使用。本文通过使用SparkMachineLearningLibrary和PySpark来解决一个文本多分类问题,内容包括:数据提取、ModelPipeline、训练...
Go 迁移Mysql数据到分库分表-migrate
SQL,大数据分表,SQL千万级分表,删除百万数据