一、两种方案分库分表
一般业界,对订单数据的分库分表,有两类思路:按照订单号来切分、按照用户id来切分。
方案一、按照订单号来做hash分散订单数据
把订单号看作是一个字符串,做hash,分散到多个服务器去。
具体到哪个库、哪个表存储数据呢?订单号里面的数字来记录着。
如果要查询某用户的所有订单呢?
由于是根据订单号来分散数据的。他的订单分散在了多个库、多个表中。
总不能去所有的库,所有的表扫描吧。这样效率很低。(解决:维护uid和oid的关系表, 此表可以作为缓存,当数据量增大时此关系表也要进行分表)
一般使用方案二的比较多,一个用户的所有订单,都在一张表里面,那么做分页展示的时候,就容易。
方案二、按照用户id打散订单数据
以uid来切分数据,有两种思路:
第一种是,某个范围的uid订单到哪些库。0到2千万uid,对应的订单数据到a库、a表。2千万到4千万对应的订单到b库。
为什么这种方案用得比较少呢?
容易出现瓶颈吗。某个范围内的用户,下单量比较多,那么造成这个库的压力特别大。其他库却没什么压力。
第二种是,使用uid取模运算。第二种方案业界用得比较多。
一方面、处理简单,程序上做取模运算就好了。
另一方面、使用取模的方式,数据比较均匀分散到多个库去了。不容易出现单个库性能瓶颈。
但是不好处也有:即要扩容的时候,比较麻烦。就需要