分库分表

127 阅读2分钟

规划分库分表

原则:能不拆就不拆,能少拆不多拆。 原因很简单,你把数据拆分得越散,开发和维护起来就越麻烦,系统出问题的概率就越大。

解决查询慢,需要分表。 解决高并发,需要分库。

针对订单表:使用用户id进行分片,可以把用户id的一部分放到订单id中,这样按订单 ID 查询的时候,就可以根据订单 ID 中的用户 ID 找到分片。

如果要用店铺Id查询,一般的做法是,把订单数据同步到其他的存储系统中去,在其他的存储系统里面解决问题。比如说,我们可以再构建一个以店铺 ID 作为 Sharding Key 的只读订单库,专门供商家来使用。或者,把订单数据同步到 HDFS 中,然后用一些大数据技术来生成订单相关的报表。

分库分表一定是,数据量和并发大到所有招数都不好使了,我们才拿出来的最后一招。

分片算法

  1. 范围分片:按范围分片,比如时间,容易产生热点分片。
  2. 哈希:能够分得足够均匀的前提条件是,用户 ID 后几位数字必须是均匀分布的。
  3. 查表法:决定某个 Sharding Key 落在哪个分片上,全靠人为来分配,分配的结果记录在一张表里面。每次执行查询的时候,先去表里查一下要找的数据在哪个分片中。分片映射表可以通过缓存来加速查询,实际性能并不会慢很多。
image.png

此文章为3月Day15学习笔记,内容来源于极客时间《后端存储实战课》