mysql分库分表 面试_MySQL分库分表面试知识

场景分析

Web开发工作,亦或是海量数据开发工作,学习分库、分表、分区等知识都是很有必要的 。

面试的时候,也有可能也会被问到。不过作为一个有经验的Coder,不熟悉分库、分表技术确实有些 low。

基础概念

分表,能够解决单表数据量过大带来的查询效率下降的问题;

分库,面对高并发的读写访问,当数据库master服务器无法承载写操作压力时,不管如何扩展slave服务器,此时都没有意义。此时,则需要通过数据分库策略,提高数据库并发访问能力。

优点,分库、分表技术优化了数据存储方式,有效减小数据库服务器的负担、缩短查询响应时间。

数据分库、分表存储场景条件

关系型数据库

主从架构(master-slave)

单表数据量在百万、千万级别

数据库面临极高的并发访问

分库、分表实现策略

关键字取模,实现对数据访问进行路由。

分库

举例

按功能分

用户类库、商品类库、订单类库、日志类库等

按地区分

每个城市或省市一个同样的库,如: db_click_bj、db_click_sh 等

横向/水平分表: 解决 表记录太大问题(水平切分)

主要解决问题:

单表过大造成的性能问题;

单表过大造成的单服务器空间问题。

按某个字段分

如:将用户资料附件表分成3个附件分表pre_forum_attachment_[0|1|2],和1个附件索引表(存储tid和附件id关系),根据tid最后一位判断附件保存在哪个分表中。

按日期分表

日志类、统计类数据表按年、月、日、周分表。如:点击量统计click_201801、click_201802

通过MySQL的merge存储引擎实现

需要创建分表、总表,总表需要merge存储引擎。

示例代码

create table log_merge (

dt datetime not null,

info varchar (100) not null,

index (dt)

) engine = merge

union= (log_2017,log_2018) insert_method = last;

纵向/垂直分表 : 解决 列过多问题(垂直切分)

纵向分表常见的方式有根据活跃度分表、根据重要性分表等。

主要解决问题:

表与表之间资源争用问题;

锁争用机率小;

实现核心与非核心的分级存储,如UDB登陆库拆分成一级二级三级库;

数据库同步压力问题。

具体策略

经常组合查询的列放在一个表,常用字段的表可考虑Memory引擎。

不经常使用的字段单独成表。

把text、blob等大字段拆分放在附表。如:把用户文章表分成主表news和从表news_data,主表存标题、关键字、浏览量等,从表存具体内容、模板等。

分库、分表注意事项

维度问题

针对用户购买记录数据,如果按照用户纬度分表,则每个用户的交易记录都保存在同一表中,所以很快很方便的查找到某用户的购买情况,但是某商品被购买的情况则可能分布在多张表中,查找起来比较麻烦。

若按照商品维度分表,方便查找商品购买情况,但查找个人交易记录比较麻烦。

常见解决方案:

通过扫表方式解决,效率太低,不可行。

记录两份数据,一份按照用户纬度分表,一份按照商品维度分表。

通过搜索引擎解决,但如果实时性要求很高,则牵涉到实时搜索问题。

避免分表join操作。关联的表有可能不在同一数据库中。

避免跨库事务

避免在一个事务中修改db0、db1中的表,不仅操作复杂,而且影响效率。

分表宜多不宜少;避免后期可能二次拆分。

尽量同组数据统一DB服务器。例如将卖家a的商品和交易信息都放到db0中,当db1挂了的时候,卖家a相关的东西可以正常使用。即避免多个数据库中的数据产生依赖。

分库分表是一种常用的数据库优化手段,特别适用于数据量大且并发访问高的场景。以下是关于MySQL分库分表的一些面试题: 1. 请问什么是分库分表分库分表是指将一个大型数据库分成多个小的数据库,再将每个小的数据库进行水平或垂直切分,从而达到提高数据库性能和扩展能力的目的。 2. 为什么需要进行分库分表分库分表可以解决数据库在高并发情况下的性能瓶颈问题,提高数据库的读写能力和负载均衡能力。同时,它还可以解决单表数据量过大导致查询效率低下的问题。 3. 分库分表的常用策略有哪些? 常见的分库分表策略包括水平分表和垂直分表。水平分表是指将一个表的行数据按照某种规则分散到多个表中,例如按照用户ID或时间进行分表;垂直分表是指将一个表按照列的属性划分到多个表中,例如将经常被查询的列和不常被查询的列分成两个表。 4. 分库分表的中间件有哪些? 在实际应用中,常常使用分库分表中间件来简化分库分表的操作。常见的分库分表中间件有Mycat和sharding-jdbc等。 5. 分库分表可能会带来哪些问题? 分库分表可能会对事务处理、跨节点Join操作和分布式事务等方面带来一些挑战。需要注意解决这些问题,以保证分库分表的正确性和稳定性。 以上是关于MySQL分库分表的一些面试题目,希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值