zoukankan      html  css  js  c++  java
  • 并发与高并发(二十三)高并发之数据库切库分库分表思路

    前言

    数据库为什么要切库?如何切库?

    主体概要

    • 数据库瓶颈
    • 数据库切库
    • 数据库的分表

    主体内容

    一、数据库瓶颈

    • 单个数据库数据量太大(1-2T):多个库
    • 单个数据库服务器压力太大,读写瓶颈:多个库
    • 单个表数据量过大:分表

    二、数据库切库和分库

    现在大型的系统在数据库层面大多采用了读写分离技术,就是一个主库,多个从库。主库主要负责数据更新和实时数据的查询,从库负责的就是非实时数据的查询。因为在实际情况下,数据库大多是读多写少的。而读取数据通常耗时比较长,占用服务器CPU时间也较多,从而影响用户体验。我们通常做法就是将查询从主库中抽取出来,从而多个从库使用负载均衡,减轻每个从库的查询压力。采用“读写分离”的目标就是减轻主库的压力,又可以把用户查询数据的请求分发到不同的从库上,把数据源动态的置入到程序中,让指定的程序选择连接操作主库还是连接从库进行操作。这里用到的技术主要是注解,SpringAOP等等。

    主从切库可以参考:https://www.jianshu.com/p/7c3ab519ceed

    这里我们说一下“多数据源(切库)”与“分库”的比较区别:

    它们都是底层是多个数据库在提供服务。

    分库是属于在微服务应用拆分的时候都有自己的数据库,而多数据源是在没有进行应用拆分的时候就已经分成两个库了,根据业务使用不同的代码连接不同的数据库。

    分库可参考:http://www.imooc.com/article/25256
    https://www.cnblogs.com/shamo89/p/10032390.html

    三、数据库的分表

    1.什么时候考虑分表?

    当一个数据表很大,大到我们做了sql和索引优化之后,基本操作的速度还是影响使用,我们就必须考虑分表了。

    2.分表策略

    (1)横向分表

    将表中不同的数据行按照一定规律分布到不同的数据库表中(这些表保存在同一个数据库中),这样来降低单表数据量,优化查询性能,其中表结构是一样的。

    (2)纵向分表

    一般根据数据的活跃度进行划分。比如对于博客系统,它对于作者标题之类变化频率慢的数据(冷数据),而博客的访问量,点赞数之类(活跃数据)

    (3)mybatis分表插件shardbatis2.0

    这个插件的使用我们可以参考https://www.cnblogs.com/shamo89/p/10033349.html

  • 相关阅读:
    Binary Tree Zigzag Level Order Traversal
    Binary Tree Level Order Traversal
    Symmetric Tree
    Best Time to Buy and Sell Stock II
    Best Time to Buy and Sell Stock
    Triangle
    Populating Next Right Pointers in Each Node II
    Pascal's Triangle II
    Pascal's Triangle
    Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/xusp/p/12740802.html
Copyright © 2011-2022 走看看