浅谈分库分表

来源:互联网 发布:淘宝头条 编辑:程序博客网 时间:2024/06/09 15:33

0 概述

本文将为什么要分库分表、怎么分以及分库分表后带来的问题,来谈一谈分库分表的相关知识。

1 为什么要分库分表

为什么要分库分表,正面来回答这个问题,可能不是很好回答,那么我们从反面来看,如果不分库分表将会带来什么问题呢?
1.如果有新的需求,需要变更表的字段,那么就需要提交DDL,执行DDL时候是需要锁表的,如果此时表中数据过大就会导致锁表时间过长。
2.表中数据过大,DML性能下降,如果量比较大,rt会变高
3.单机性能极限,采用一主多从策略,读写分离,写的请求落在主节点上,读的请求落在从库上,但是如果从库过多会导致主从延时比较长,写入的数据不能立刻查到,这个需要看具体业务场景,是否需要强制查询主库。

2 怎么分

首先我们要选择一个分表字段(一般是业务的主键 比如订单Id),然后水平拆分(分表字段取模分表总数),那么怎么选择这个分表字段呢主要需要考以下几点:
1.是否便于查询,比如订单表,我们也可以按照订单Id,也可以按照用户Id来分。但是有时候,我们希望分库分表后能够满足两个Id查询,比如订单Id和userId,希望同一个userId的所有订单都落到同一张表中,这样就可以采用组合方的式生成分表字段订单Id(全局自增主键+userId后四位),这种组合方式生成订单Id做分表字段,即可用满足订单Id查询又可以满足用户Id查询。
2.数据分配是否相对均匀,不会出现数据的倾斜问题,如果选择分表字段不是很合适就会导致一些表的数据比较多,而一些表的数据比较少,应当避免这种现象。

3 带来的问题

1.夸库的事务不可用,原本的一个事务都是在同一库的(事务是基于连接的),分库后原本事务可能需要分到了不同的库,这样夸库的事务就会不可用。
2.非分表字段来查询的需求,这种情况下直接查询的性能非常低,需要扫描全表,这种情况可以通过将数据导入到ElasticSearch(搜索引擎)来解决,通过搜索引擎来满足查询非分表字段,也可以建立一个route表这个表想到于二级索引(路由表主要存储非分表字段到分表字段映射关系)。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 狂上植物人表妹 温宁嫁给植物人 奶奶植物人孙子日醒 赴韩整容成植物人 植物人妹妹 植物人状态 植物人老公 什么是植物人 植物人唤醒 植物人促醒 植物人怎样护理 植物人的症状 植物人症状 植物人妈妈 植物人是脑死亡吗 植物人什么症状 无影剑唤醒植物人 植物人怀孕 植物人怎么排便 什么叫植物人 植物人原因 植物人吃饭吗 植物人母亲 女植物人 植物人能怀孕吗 怎么变成植物人 植物人是怎么造成的 植物人能吃饭吗 儿子遇车祸成植物人 温宁被迫嫁给植物人陆普渊 为什么会成为植物人 植物公司起名 适合做人名的植物名 植物生态墙 植物染 植物水 多年生植物 植物鱼 绿巨人植物 植物所 植物的品种