分布式数据库---分库分表

分库:

分库是啥意思?就是你一个库一般我们经验而言,最多支撑到并发 2000,一定要扩容了,而且一个健康的单库并发值你最好保持在每秒 1000 左右,不要太大。那么你可以将一个库的数据拆分到多个库中,访问的时候就访问一个库好了。

分表:

分表是啥意思?就是把一个表的数据放到多个表中,然后查询的时候你就查一个表。比如按照用户 id 来分表,将一个用户的数据就放在一个表中。然后操作的时候你对一个用户就操作那个表就好了。这样可以控制每个表的数据量在可控的范围内,比如每个表就固定在 200 万以内。

了解哪些分库分表中间件?

cobar, TDDL ,mycat。

如何对数据库如何进行垂直拆分或水平拆分的?

水平拆分:

水平分割是企业最常用到的,水平拆分就是大表按照记录分为很多子表。

水平分的规则完全是自定义的,有以下几种参考设计:1.根据业务可以按照天、月、年来进行拆分;2.按每个表的固定记录数

垂直拆分:

将一个表按照字段来分,每张表保证有相同的主键就好。一般来说,将常用字段和大字段分表来放。
优势:比没有分表来说,提高了查询速度,降低了查询结果所用内存;
劣势:没有解决大量记录的问题,对于单表来说随着记录增多,性能还是下降很快;

1 分表可以在代码层级实现;
2 也可以用数据库中间件实现,现在流行的有 mycat和sharing-sphere

MyCAT目前通过配置文件的方式来定义逻辑库和相关配置:

·        MYCAT_HOME/conf/schema.xml中定义逻辑库,表、分片节点等内容;

·        MYCAT_HOME/conf/rule.xml中定义分片规则;

·        MYCAT_HOME/conf/server.xml中定义用户以及系统相关变量,如端口等。

单表数据达到多少的时候会影响数据库的查询性能?为什么?
答:一般mysql达到100w,就影响数据库的查询性能,

分库分表中垂直分库方案会带来哪些问题?
答:单表的数据量还是会很大。

分布式数据存储中间件如mycat的核心流程是什么?
答:拦截sql解析 ->数据源分配 -> 请求响应 -> 结果整合

Mycat中间件的原理?

  当Mycat收到一个SQL时,会先解析这个SQL,查找涉及到的表,然后看此表的定义,如果有分片规则,则获取到SQL里分片字段的值,并匹配分片函数,得到该SQL对应的分片列表,然后将SQL发往这些分片去执行,最后收集和处理所有分片返回的结果数据,并输出到客户端。

以select * from Orders where prov=?语句为例,查到prov=wuhan,按照分片函数,wuhan返回dn1,于是SQL就发给了MySQL1,去取DB1上的查询结果,并返回给用户。

Mycat的在分库分表之后,它是怎么支持联表查询的?

使用好ER表,在sql上添加注解,用全局表。

就是将一个表按照字段来分,每张表保证有相同的主键就好。一般来说,将常用字段和大字段分表来放。
优势:比没有分表来说,提高了查询速度,降低了查询结果所用内存;
劣势:没有解决大量记录的问题,对于单表来说随着记录增多,性能还是下降很快;

posted @ 2020-02-18 22:38  威兰达  阅读(779)  评论(0编辑  收藏  举报