| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 分库分表解决方案 -> 正文阅读 |
|
[大数据]分库分表解决方案 |
前言 分库分表详解 ** 分库** 单架构应用单数据库 ** 为服务架构应用单数据库** 1、微服务提供多个类型服务,但单一数据库的传统设计会产生紧密耦合,无法做为独立部署服务。 如果有多个服务访问同一数据库,则需要在所有服务间协调数据模式的更改,在现实工作中,这会导致额外的工作,延迟部署更新。 2、使用这样的设计很难对单个服务进行扩展,因为你只能选择扩展单一数据库。 3、使用单一数据库,对提高应用程序性能成为挑战。当使用单一共享数据库,在一段时间过后,我们最终会有着一个数据庞大的表,让数据检索变得很困难,我们必须连接多个大表格,方能获取所需的数据。 4、在绝大多数情况下,我们将数据使用关系存储到数据库。而使用关系数据库会限制一些服务。在有些情况下,NoSQL数据存储可能更适合你,能够降低集中式数据存储的紧密耦合。 ** 微服务架构多数据库** 随着业务量的加大,数据库访问成为了瓶颈,这个时候多个服务共享一个数据库基本不可行了 ** 分表** 当一个数据库被创建之后,随着时间的推移和业务量的增加,数据库中表以及表中的数据量就会越来越多,就有可能出现两种弊端: 分库分表的类型和特点: 垂直切分如下图: 水平切分 按主键ID拆分数据很均匀,通过ID查询 orders 的场景几乎没有,业务访问 orders 大部分场景都是根据 user_id来过滤的,而且 user_id 的唯一性又很高(一个 user_id 对应的 orders 表记录不多,选择性很好),按照 user_id 来作为 Sharding key能满足大部分业务场景,拆分之后每个子表数据也比较均匀 这样就可以将 orders 表拆分成20个子表,看实际业务量和需求需要拆分成多少张表。 多库水平分表 一般我们说的分库分表都是跨库的分表。既然分库分表能够帮助我们解决性能的问题。那我们在项目设计的时候是不是可以先给它们发几个库或者表呢,其实不然,在我们分库分表的过程中带来了很多的问题,分库分表之后带来了很多的复杂性,比如以前正常的sql使用分库分表以后有些地方需要改动。 拆分以后带来的问题有: 在单库未拆分表之前,我们可以很方便使用 join 操作关联多张表查询数据,但是经过分库分表后两张表可能都不在一个数据库中,如何使用 join进行关联用户信息表查询数据,因为数据在不同的数据库表中,我们不能直接使用join去关联的啊。 有以下几种方案可以解决: 1.1、字段冗余 1.2、全局表(广播表) 1.3、ER 表(绑定表) 2、 分布式事务 3、排序、分页、函数计算问题 4、全局主键避免重复问题 4.1、UUID 5、 多数据源和读写数据源的解决方案 ShardingJdbc和MyCat的区别以及优缺点? ShardingJdbc是一个Jar形式,在本地应用层重写jdbc原生的方法,实现数据库分片形式。 MyCat属于服务器数据库中间件,而ShardingJdbc是一个本地数据库中间件框架。 从设计理念上看确实有一定的相似性,主要流程都是SL解析→>SL路由→>SQL改写→>SQL执行→结果归并。但是架构设计是不同的。MyCat是基于Proxy,它复写了MySQL协议,将MyCat Server 伪装成一个MySQL数据库,而ShardingJdbc是基于JDBC的扩展,是以jar包的形式提供轻量级服务的。
缺点:1、存在代码入侵性;2、加大开发成本;3、不能做到动态添加数据源,添加数据源还需要重启程序;4、程序开发完后,运维人员参与不了。 MyCat的优缺点 优点:1、数据添加不会影响到程序;2、应用层不需管理数据库层方面,由代理层去管理;3、添加数据源不需要重启程序。 缺点:1、程序依赖的中间件,提高维护工作;2、容易出现高可用问题;3、中间件导致切换数据库变的困难;2、增加了proxy,程序性能下降。 |
|
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 5:20:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |