Java面试(9)之数据库层性能优化

mysql性能优化

一, mysql总览:

ca9aff1504e84bdd9f37fb8e6119fbb5.png

二, 主从同步

3f132d31835b4392bb96a9ed07ba2f0c.png

依赖binlog来实现完成同步

726727cef8a2466eb848e7f37357f80b.png

解决方案: 两阶段提交

afa0e70389074a70856a772d28b23a20.png

buffer pool、change buffer、log buffer与redo log交互

9405fea5bb114137bc5df9c13b16e18d.png

-------------------------------------------------------------------------------------------------------------

关系型数据库在高并发下

一, 表数据过大的解决方案

1.1 单表多大才考虑拆表?

根据阿里开发手册: 单表行数超过500W或者单表数据容量超过2G

1.2 列数多大? 按照mysql官网,innodb建议不超过1017列,如果列数很大,考虑用mongodb,列数过大会导致分页

1.3 数据库表的拆分

分库分表

冷热数据分离

电商类

交易类

微信(朋友圈、我的相册)

历史数据归档

1.4 分库分表策略

水平拆分:

4e6df916f24249c3aa08f238dea5cdde.png

按照数据取模的问题在于,如果扩容了表,那么原来表里的数据就需要重新迁移会很麻烦.

针对这种解决方案:

1, 一致性hash算法 0-(2的32 - 1)

e26b044ef9e74dd69a76ea0b12a8e26a.png

2, 按照范围分片

二, 分库分表实战

以用户表为例,考虑如下:

4dba1d1b2ade4e0580775dcd0e7e821b.png

全局唯一ID的生成方式:

9bea3fcf3fb64c33bf8ddbb635456c0f.png

雪花算法:

28c39c5f24c349a9a5f5c6645ae3b59f.png

47b50ee769ef4a46bc8848ea5d9e013e.png

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱编程的Loren

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值