• 数据库的分库分表


    当MySQL单表记录数过大时,增删改查性能都会急剧下降。

    通常在以整型值为主的表数据量达到千万级时,以字符串为主的表达到五百万的时候就需要考虑分库分表。

    一般来说,数据库的分库分表分为两种拆分形式,即纵向和横向。

    垂直拆分:垂直分库:解决表过多的问题; 垂直分表:解决单表列过多的问题。通常根据业务耦合性,将关联性低的表划分到不同的数据库。

    垂直拆分的优点:

    • 可以使得行数据变小,一个数据块(Block)就能存放更多的数据,在查询时就会减少I/O次数(每次查询时读取的Block 就少)

    • 可以达到最大化利用Cache的目的,具体在垂直拆分的时候可以将不常变的字段放一起,将经常改变的放一起

    • 数据维护简单

    垂直拆分的缺点:

    • 主键出现冗余,需要管理冗余列

    • 会引起表连接JOIN操作(增加CPU开销)可以通过在业务服务器上进行join来减少数据库压力

    • 依然存在单表数据量过大的问题(需要水平拆分)

    • 事务处理复杂

    水平拆分:水平分库分表:解决单表数据量过大的问题。按照表内某个字段,根据规则将同一个表拆分到多个数据库或多个表中。

    水平拆分的优点 :

    • 不存在单库大数据和高并发的性能瓶颈

    • 应用端改造较少

    • 提高了系统的稳定性和负载能力

    水平拆分的缺点:

    • 分片事务一致性难以解决

    • 跨节点Join性能差,逻辑复杂

    • 数据多次扩展难度跟维护量极大

     拆分以后生成分布式id的方法:

    • 使用Twitter的SnowFlake的算法来生成
    • 单独唯护一张表
    • zookeeper,mongoDb中的方法

    未完待续...

  • 相关阅读:
    Redis常见数据类型
    MYSQL常见可优化场景
    算术切片
    找数组里没出现的数
    不同路径和(II)
    不同路径和
    最小路径和
    强盗抢房子
    丑数(2)
    判断子序列
  • 原文地址:https://www.cnblogs.com/dream2true/p/10822546.html
Copyright © 2020-2023  润新知