美文网首页MySQL
谈一谈分表设计

谈一谈分表设计

作者: xcrossed | 来源:发表于2019-10-19 01:53 被阅读0次

[toc]

谈一谈分表设计

在一个可预见的,能运行比较长,数据量可能比较大的业务场景中,经常需要分库分表,因为单表存储能力和查询能力都是有上限的。一般如果业务还是要正常跑下去的话,都要进行迁移,比如迁移到能水平扩展的存储(如tidb, mongodb等)。但是在初期,业务还没有起量的时候或者说不能预见能起量的时候,都是采用传统的分库分表方法来解决。这篇文章只谈分表。

需要分表的场景

一般来说,数据是膨胀类增长时,比如线性增长,指数增长,这些场景都需要分表。举个例子,用户订单表,购买记录流水表,收支流水记录,发放记录流水,操作记录表。一个用户的操作可能产生几倍的数据增长。

分表设计的原则

  • 满足业务的需求
  • 能保持数据不恶化

说下不恶化这个原则,也就是在业务随着时间向前推进增长的情况下,系统能正常运行。

常用分表方法

  • 根据业务id做shardKey(取模或者hash, 或者某类算法)分表

  • 根据时间分表(年月日相关)

  • 分表冗余表(路由表)

前2种一般都有用到。这里说一下第三种
有时按第一种分表,数据变得难以查询,比如订单表,假定表结包含如下字段

orderId 订单id
uid 用户id
money 订单金额
itemid 商品id

如果存储是按照格式,会发现,如果用户来查询自己的订单,就比较难查询。
这时需要再存储一个对应关,简称路由表,按uid来分表,存储orderId

最优分表方法

其实没有什么最优方法,只有适合的才是最好的。

但是对于分表的的情况,如是数据有冷热之分,比如只查询最近的,一个月前的几乎不会查询到,则需要根据时间更佳,如果担心分月单表压力大,可能再根据uid来分一次,不会随着时间,表里面的数量膨胀到最终爆炸。

数据库分表是解决单表海量数据的查询性能问题。

有些表是没有冷热之分,比如商品表,这个时候就需要分库了,解决单库并发访问压力, 一个不行,多来几个。

相关文章

  • 谈一谈分表设计

    [toc] 谈一谈分表设计 在一个可预见的,能运行比较长,数据量可能比较大的业务场景中,经常需要分库分表,因为单表...

  • 【Hive】优化

    分区表的设计和优化 普通表结构问题 使用分区表可以优化上述查询问题 分桶表的设计和优化 Join问题 分桶表设计 ...

  • 为什么要分库分表?

    面试题 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间...

  • 为什么要分库分表?

    面试题 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间...

  • 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?

    面试题 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间...

  • 42、如何进行分库分表?

    1、面试题 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表...

  • 分库分表

    面试题 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间...

  • 一个关于 MySQL 分库分表的面试 3 连炮

    1、面试题 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表...

  • 设计原则

    表设计 1.动静分表的使用场合? 动静分表核心在于锁竞争,如何分表后不会显著改善缓解锁竞争,分表后效果不会好。分开...

  • 高并发下数据库分库分表面试题整理

    1. 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件...

网友评论

    本文标题:谈一谈分表设计

    本文链接:https://www.haomeiwen.com/subject/ihkgmctx.html