关于DRDS的数据拆分策略问题
看了下最佳实践里面的数据拆分策略,跟我原来的预想不太一致。
1、原先我是打算根据主健进行拆分,比如用户信息,根据用户ID进行拆分,同时用户信息表相关联的表,一对一和一对多的表都可以按照这个字段进行拆分,这样该用户相关的信息都会分到同一个库里面。但是最佳实践却不建议按主健拆分,那么按什么字段拆分比较好呢?
最佳实践里面可能表达的意思有点问题,其实我们常常碰到用户为了数据分布均衡,直接采用主键进行拆分,这个导致的问题是如果你要性能,就带上主键,不带,所有表进行扫描,耗费资源比较大。所以最佳实践在表述的时候关注了这个情况,没有关注你类似业务id即主键的情况。这个我们fix下。 你的思路是对的。
2、对于多对多关系的表,比如用户和群组(一个用户可以属于多个群组,一个群组可以有多个用户)关系表,应该怎么拆分?
第一个要考虑的是这两个实体是否有强一致事务关系,按照我的理解用户和群组是可以做成非强一致事务关系(用户创建,加入退出群组,群组创建,群组删除),然后考虑是否有大结果集的join关系,按照普通理解,有查看用户加入的群组,以及一个群组有哪些用户这种需求,所以多对多关系很可能中间有张关系表,用户和群组表可以考虑数据均衡以及sql带字段的情况分别用用户id和群组id进行拆分(群组不多也可以不拆),关系表怎么拆主要看哪种查询比较多,当然关系表在用户和群组变更时会有事务问题,其中一个直接可以用强一致事务(比如按用户id拆,删除一个用户),另外一个需要使用最终一致事务(比如按用户拆,删除群组)。所以最终最复杂的问题落到一个群组表和关系表的一致性问题上,DRDS支持最终一致事务,不过现在需要工单申请开启,可以尝试。
另外,DRDS的论坛板块已经开通,后续问题可以到那个板块提下。
赞0
踩0