mycat分片规则

概念:

  1. 一个大表被分成若干个分片表,就需要一定的规则,这样按照某种业务规则把数据分到某个分片的规则就是
    分片规则,数据切分选择合适的分片规则非常重要,将极大的避免后续数据处理的难度。

  2. 拆分数据就需要定义分片规则。关系型数据库是行列的二维模型,拆分的第一原则是找到拆分维度。比如:从会员的角度来分
    析,商户订单交易类系统中查询会员某天某月某个订单,那么就需要按照会员结合日期来拆分,不同的数据按照会员ID做分组,
    这样所有的数据查询join都会在单库内解决;如果从商户的角度来讲,要查询某个商家某天所有的订单数,就需要按照商户ID做
    拆分;但是如果系统既想按会员拆分,又想按商家数据,则会有一定的困难。如何找到合适的分片规则需要综合考虑衡量。

  3. 几种典型的分片规则包括:
    按照用户ID求模,将数据分散到不同的数据库,具有相同数据用户的数据都被分散到一个库中。
    按照日期,将不同月甚至日的数据分散到不同的库中。
    按照某个特定的字段求摸,或者根据特定范围段分散到不同的库中。

  4. 分片规则重点注意事项
    由于数据切分后数据Join的难度在此也分享一下数据切分的经验:
    第一原则:能不切分尽量不要切分。
    第二原则:如果要切分一定要选择合适的切分规则,提前规划好。
    第三原则:数据切分尽量通过数据冗余或表分组(Table Group)来降低跨库Join的可能。
    第四原则:由于数据库中间件对数据Join实现的优劣难以把握,而且实现高性能难度极大,业务读取尽量少使用多表Join。

  5. 解释部分:
    (1)全局表(字典表)冗余。
    在分片的情况下,当业务表因为规模而进行分片以后,业务表与这些附属的字典表之间的关联,就成了比较棘手的问题,所以Mycat中通过数据冗余来解决这类表的join,即所有的分片都有一份数据的拷贝,所有将字典表或者符合字典表特性的一些表定义为全局表。
    数据冗余是解决跨分片数据join的一种很好的思路,也是数据切分规划的另外一条重要规则。
    (2)表分组
    表分组(Table Group)是解决跨分片数据join的一种很好的思路,也是数据切分规划的重要一条规则。

你可能感兴趣的:(数据库,数据库)