如题:如何均匀的把订单数据均匀的拆分到各个表中。
我开始的想法是根据用户id 哈希来分表,这样可以保证一个用户的所有订单都在一个表中,但是会出现一些问题。
问题1:每个表的数据会存在一定差异。
问题2:如果商户要查询商品的所有订单,用以上的方法还是会去扫描所有的表。
问:应该根据什么字段和规则来进行订单表的分表来解决上面两个问题?
如题:如何均匀的把订单数据均匀的拆分到各个表中。
我开始的想法是根据用户id 哈希来分表,这样可以保证一个用户的所有订单都在一个表中,但是会出现一些问题。
问题1:每个表的数据会存在一定差异。
问题2:如果商户要查询商品的所有订单,用以上的方法还是会去扫描所有的表。
问:应该根据什么字段和规则来进行订单表的分表来解决上面两个问题?
引用来自“阳光test”的评论
分成买家库和卖家库,因为买家和卖家关心的维度不一样。你想分表。要垂直分表或者是水平分表?
垂直分表:拆分订单的属性,把数据量大的属性拆分出去。具体根据你的业务分析和订单属性来看,比如:你的业务需要先从订单列表跳转到订单详情,就可以将订单列表涉及到的属性单独建表,订单详情的属性对应补充建表。这样可以快速查询订单列表的简单信息。
水平分表:根据一定的规则分表,防止单表数据量过大。可以根据表的数据量,如:达到1M条数据即分表;可以根据日期分表,比如:根据月份分表,每月生成新订单表。
(亦可混合分表,将上诉两总分表方式一起使用,但实现较复杂。)
你说要均匀分表,那就选择水平根据数据量分表。
你说用户要查找订单?那就建索引,定位表名和表内位置。
你说商户要查找订单?那就建索引,定位表名和表内位置。
分表必须有索引。