zoukankan      html  css  js  c++  java
  • 分布式数据库---分库分表

    分库:

    分库是啥意思?就是你一个库一般我们经验而言,最多支撑到并发 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上添加注解,用全局表。

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

  • 相关阅读:
    121. Best Time to Buy and Sell Stock
    分页查询
    ViewPager
    SharedPreferences
    android 动画
    display~
    stringBuffer拼接有规律字符串
    修改placehosder
    this Activity.this Activity.class
    Windows基础编程SDK复习知识点
  • 原文地址:https://www.cnblogs.com/lgg20/p/12329186.html
Copyright © 2011-2022 走看看