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

分库:

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

分表:

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

用过哪些分库分表中间件?

cobar, TDDL ,mycat。

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

   水平拆分的意思: 就是把一个表的数据给弄到多个库的多个表里去,但是每个库的表结构都一样,只不过每个库表放的数据是不同的,所有库表的数据加起来就是全部数据。水平拆分的意义,就是将数据均匀放更多的库里,然后用多个库来扛更高的并发,还有就是用多个库的存储容量来进行扩容。

  垂直拆分的意思:就是把一个有很多字段的表给拆分成多个表,或者是多个库上去。每个库表的结构都不一样,每个库表都包含部分字段。一般来说,会将较少的访问频率很高的字段放到一个表里去,然后将较多的访问频率很低的字段放到另外一个表里去。因为数据库是有缓存的,你访问频率高的行字段越少,就可以在缓存里缓存更多的行,性能就越好。这个一般在表层面做的较多一些。

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

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

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

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

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

Mycat中间件的原理?

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

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

猜你喜欢

转载自www.cnblogs.com/lgg20/p/12329186.html