OneProxy :: 应用户要求增加MyCAT不带权重的MurmurHash分片算法支持

应中间件用户测试需要(Java内存管理还真心不容易搞稳定),在OneProxy里增加了对开源中间件不带权重的PartitionByMurmurHash分片算法的支持,在研发过程中我们觉得一个Hash算法可以不设计成这么复杂,不过存在即合理,只能辛苦一下自己了。首先需要在OneProxy配置文件里配置一张分片表,内容如下所示:

[
  {
        "table"        : "mycat",
        "mycat_seed"   : 0,
        "mycat_count"  : 128,
        "mycat_scale"  : 160,
        "pkey"         : "mycat:id",
        "type"         : "int",
        "method"       : "hash",
        "partitions"   : 128,
        "groups"       : [ "server1" ]
  }
]

就这样添加三行就行了,并在分区键的定义上加上“mycat:”就行(表示先对分区键做函数计算,返回值类型是整数)。接下来可以在OneProxy中进行验证,使用“SHOW PARTITION <table> <part_key> <value>”命令即可。如下所示:

mysql> show partition mycat id '0000566EEEC84D3DB61099F1C844ABA5';
+------------+
| Partitions |
+------------+
| mycat_29   |
+------------+
1 row in set (0.00 sec)

mysql> show partition mycat id '0000566EEEC84D3DB61099F1C844ABA6';
+------------+
| Partitions |
+------------+
| mycat_2    |
+------------+
1 row in set (0.00 sec)

当然MyCAT也可以来兼容OneProxy的Hash算法,如果是数字类型则是数值本身,如果是字符类型则用标准的CRC32函数(和MySQL数据库中的crc函数运算结果一致)去计算就行了。