公开课—京东生产环境海量数据架构优化实战

文章目录

  • 读多写少——主库用来写,从库用来读
  • 单库的写压力太大——数据库的垂直和水平拆分
  • 分表怎么分呢?
    • hash分表
    • range分表
    • 多数据源操作与分布式事务问题
  • ShardingSphare分库分表(京东开源)
  • 关联查询怎么办?跨多个库,多张表怎么办?——要考虑业务场景
  • 线上单库如何迁移到多库多表
  • 监听binlog
  • 依旧有问题——临界的时候
    • 过一段时间把binlog的执行失败的sql语句从新做一遍
    • 又有问题了——数据达到一致后,直接上线吗?——灰度发布
    • 无损发布
    • 既想要解决数据热点的问题,又想不做数据迁移
    • TiDB 分布式数据库

在这里插入图片描述
早期都是单库单表
在这里插入图片描述

读多写少——主库用来写,从库用来读

主库写完了之后,同步到从数据库,通过从数据库分担压力
中小公司完全OK

单库的写压力太大——数据库的垂直和水平拆分

在这里插入图片描述
垂直拆分——比如微服务架构,根据不同业务我们拆分微服务应用,数据库的表也要按照业务分开。

水平拆分——虽然拆分成单表,如果一张表的量超过500万或1000万,数据的增量太快,这里假如到达4000万,就要把一张订单表拆成多张表。

垂直分库,水平分表

分表怎么分呢?

hash分表

在这里插入图片描述
hash分表的方式有个问题——假如分的四张表又快满了,还要再拆表,那总共八张表了,按照以前的**id%(表的个数)**的办法落在其他表中,以前的算法落得表和现在不一是同一个表了,查不到了,所以必须要把老数据做一次迁移。
数据迁移扩容痛苦

range分表

在这里插入图片描述
就是把数据按照范围顺序放,这样根据id算一下在什么范围,即使扩容了也可以找到。

当订单id在1000万以内,操作同一张表,如果并发特别大,压力特别大,那各种修改,新增,加大量的锁,性能肯定受影响。

这个问题就叫热点的问题

多数据源操作与分布式事务问题

其实市面上有很多很好的分库分表框架,直接用

ShardingSphare分库分表(京东开源)

在这里插入图片描述

非常轻量,
内部有很多的组件,Sharding-jdbc组件,其实就是帮我们做分库分表的,做好分库分表的配置文件,按照什么字段,什么规则配置好。

关联查询怎么办?跨多个库,多张表怎么办?——要考虑业务场景

在这里插入图片描述
从用户端思考,对于一个用户,我们尽量让他的数据落在一个库,一张表,这样查起来容易得多。用userId来分,这样插用户信息免费,那查订单呢?在orderId后面拼接上serId(后四位)

商家端:用商家的id作为分库分表的字段合适,上面的规则不适用了啊?查商家的订单就要跨库了呀,在互联网公司,商家端的数据会单独再存一份。按照商家端的id做路由分库分表。

运营管理端:要查全量数据,怎么办?
如果非实时的情况,可以把全量的数据放到数据仓库中(大数据),查的比较慢,可以走数据仓库;
如果要求实时的话(elasticsearch),一般需求是定好的,我们根据要查询的几个维度的字段,建立索引到ES的大宽表,这时候查起来就很快了。

在这里插入图片描述

线上单库如何迁移到多库多表

在这里插入图片描述
一般都是不停机迁移,但前段不断有新的增删改查操作来修改数据,我们的迁移是把数据复制过去,这时候要是来了一条修改已迁移的数据,怎么办?难道重头扫一遍吗?

监听binlog

数据库的binlog日志,
在这里插入图片描述
数据库有很多日志的,面试的时候很经常问。

binlog用来记录数据库的所有修改操作,

后端虽然在做全量的迁移,实时的增删改的操作,我们可以拿出来写进我们的新系统(多库多表),这样就同步了。

依旧有问题——临界的时候

insert一条语句,sql执行了一次,在迁移完成后,binlog在新数据库又执行了一次,会逐渐冲突(不过这个问题不大)。
在这里插入图片描述
update语句和delete语句问题大了。
假设update语句修改了单库单表,还没更新的时候,这时候被迁移查到了,准备写到多库多表,还没写成功的时候,这时候binlog更新了多库多表,查不到就更新为空,这时候老库的数据迁移过来了,实际写入多库多表的数据是旧数据。
delete同样在临界的时候会有问题。

过一段时间把binlog的执行失败的sql语句从新做一遍

binlog执行失败的sql丢到队列中去,过一段时间重新执行。

又有问题了——数据达到一致后,直接上线吗?——灰度发布

搞一小部分流量先打过来,看数据能不能进入到我们的多库多表,试探一下数据是不是正确,没问题了再全部上线。
灰度发布时间不能太长,否则会造成很多的报错,比如有个请求打到单库单表,而这个数据在多库多表中,这就报错啦。所以不能太长时间。

无损发布

就是把单库单表的数据断掉,直接把多库多表全流量切换上线。
这要是有问题的话,回退比较麻烦

所以一般采用的是灰度发布
在这里插入图片描述

既想要解决数据热点的问题,又想不做数据迁移

我们设计一套分库分表方案,并且解决热点问题?

TiDB 分布式数据库

这就不用做分库分表了,很多事情他帮我们做了。

后面就是卖课广告了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/660325.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

49. 字母异位词分组 128. 最长连续序列

49. 字母异位词分组 128. 最长连续序列 把集合里面的所有元素都放入set容器里面 定义结果最大连续数量 ans for循环遍历每个元素 先判断集合里面有没有比这个元素小1的 如果没有 说明这个元素就是序列的第一个元素 然后接着找集合里面有没有比这个元素大1的 while一直找 …

营业执照办理

2024年4月30日00:00至2024年5月6日8:00对‮统系‬进行维护升级。系统维护升‮期级‬间,将关‮系闭‬统,暂停登‮注记‬册业务线‮申上‬报;4月30日申办登‮业记‬务的,请到属‮登地‬记注册窗口办理。 由此‮来带‬不便&#xf

Linux第二节--常见的指令介绍集合(持续更新中)

点赞关注不迷路!,本节涉及初识Linux第二节,主要为常见的几条指令介绍。 Linux下基本指令 1. ls 指令 语法: ls [选项][目录或文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件&#…

中国移动举办算力网络未来产业暨联合体创新论坛

4月29日,在国务院国有资产监督管理委员会的指导下,由中国移动主办的算力网络未来产业暨联合体创新论坛在苏州举办。大会以“算网一体,智领未来”为主题,旨在汇聚算力网络产学研各界领军力量,共创算力网络技术策源之路&…

《HCIP-openEuler实验指导手册》1.7 Apache虚拟主机配置

知识点 配置步骤 需求 域名访问目录test1.com/home/source/test1test2.com/home/source/test2test3.com/home/source/test3 创建配置文件 touch /etc/httpd/conf.d/vhost.conf vim /etc/httpd/conf.d/vhost.conf文件内容如下 <VirtualHost *.81> ServerName test1.c…

区域能源消耗碳排放空间格局模拟—基于夜间灯光数据

卫星遥感具有客观、连续、稳定、大范围、重复观测的优点&#xff0c;已成为监测全球碳盘查不可或缺的技术手段&#xff0c;卫星遥感也正在成为新一代 、国际认可的全球碳核查方法。本此课程的目的就是梳理碳中和与碳达峰对卫星遥感的现实需求&#xff0c;系统总结遥感技术在生态…

挑战一周完成Vue3项目Day3: 品牌管理+平台属性管理+SPU管理+SKU管理

一、真实接口替换mock接口 &#xff08;1&#xff09;替换各个环境下的服务器地址&#xff08; .env.development、.env.production、.env.test &#xff09; VITE_SERVE"http://sph-api.atguigu.cn" &#xff08;2&#xff09; 配饰代理跨域&#xff1a;vite.con…

javase学习01-GUI设计中的菜单条,菜单及菜单项(简单的实现)

目录 一&#xff0c;效果及代码 二&#xff0c;相关内容 1&#xff0c;创建图片资源文件夹 2&#xff0c;菜单初识 3&#xff0c;图标大小设置 4&#xff0c;菜单高度设置 今天学习了Java的GUI&#xff08;graphics user interface&#xff09;图形用户界面中的窗口和菜单…

VGG16简单部署(使用自己的数据集)

一.注意事项 1.本文主要是引用大佬的文章&#xff08;侵权请联系&#xff0c;马上删除&#xff09;&#xff0c;做的工作为简单补充 二.介绍 ①简介&#xff1a;VGG16是一种卷积神经网络模型&#xff0c;由牛津大学视觉几何组&#xff08;Visual Geometry Group&#xff09;开…

[python] 基于PyWaffle库绘制华夫饼图

华夫饼图Waffle chart是一种独特而直观的图表&#xff0c;用于表示分类数据。它采用网格状排列的等大小方格或矩形&#xff0c;每个方格或矩形分配不同的颜色或阴影来表示不同的类别。这种可视化方法有效地传达了每个类别在整个数据集中的相对比例。本文介绍如何使用基于Python…

二阶逻辑回归

使用此种二阶函数&#xff0c;可以很好的补齐一个圆 这里涉及到一些函数的原理 http://链接: https://pan.baidu.com/s/1qftR1DY1LscbwE_uSje4dQ 提取码: sm88 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 数据集下载

[1688]jsp工资投放管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 工资投放管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0…