Mycat2 分片算法簡介

2021-09-09 14:32 更新

簡介

Mycat2支持常用的(自動(dòng))HASH型分片算法也兼容1.6的內(nèi)置的(cobar)分片算法.

HASH型分片算法默認(rèn)要求集群名字以c為前綴,數(shù)字為后綴,c0就是分片表第一個(gè)節(jié)點(diǎn),c1就是第二個(gè)節(jié)點(diǎn).該命名規(guī)則允許用戶手動(dòng)改變.

區(qū)別

Mycat2 Hash型分片算法多數(shù)基于MOD_HASH(MOD對應(yīng)JAVA%運(yùn)算,實(shí)際上是取余運(yùn)算,而且abs(n)/count等價(jià)于abs(n/count)

Mycat2 Hash型分片算法對于值的處理,總是把分片值轉(zhuǎn)換到列屬性的數(shù)據(jù)類型再運(yùn)算,而1.x系列的分片算法統(tǒng)一轉(zhuǎn)換到字符串類型再運(yùn)算且只能根據(jù)一個(gè)分片字段計(jì)算出存儲(chǔ)節(jié)點(diǎn)下標(biāo)。

Mycat2 Hash型分片算法適用于等價(jià)條件查詢,而1.x系列由于含有用戶經(jīng)驗(yàn)的路由規(guī)則。

分片算法 描述 分庫 分表 數(shù)值類型
MOD_HASH 取模哈希 數(shù)值,字符串
UNI_HASH 取模哈希 數(shù)值,字符串
RIGHT_SHIFT 右移哈希 數(shù)值
RANGE_HASH 兩字段其一取模 數(shù)值,字符串
YYYYMM 按年月哈希 DATE,DATETIME
YYYYDD 按年月哈希 DATE,DATETIME
YYYYWEEK 按年周哈希 DATE,DATETIME
HASH 取模哈希 數(shù)值,字符串,如果不是,則轉(zhuǎn)換成字符串
MM 按月哈希 DATE,DATETIME
DD 按日期哈希 DATE,DATETIME
MMDD 按月日哈希 DATE,DATETIME
WEEK 按周哈希 DATE,DATETIME
STR_HASH 字符串哈希 字符串

所有分片算法都可以用于分表,但是涉及單獨(dú)按周、月的HASH算法不能用于分庫

 /*+ mycat:createTable{
    "schemaName":"db1",
    "shadingTable":{

  
"createTableSQL":"create table travelrecord(id int)",

    
"function":{
                "properties":{
                    "dbNum":2,
                    "mappingFormat":"c${targetIndex}/db1_${dbIndex}/travelrecord_${tableIndex}",
                    "tableNum":2,
                    "tableMethod":"mod_hash(id)",
                    "storeNum":2,
                    "dbMethod":"mod_hash(id)"
                }
            }
    },
    "tableName":"travelrecord"
} */;

mappingFormat使用樣例(文件配置)

    "shardingTables":{
        "log":{
            "createTableSQL":"CREATE TABLE cloud.log (\n\t`id` BIGINT(20) DEFAULT NULL,\n\t`user_id` BIGINT(20) DEFAULT NULL,\n\t`service_id` INT(11) DEFAULT NULL,\n\t`submit_time` DATETIME DEFAULT NULL\n) ENGINE = INNODB CHARSET = utf8\nDBPARTITION BY YYYYDD(submit_time) DBPARTITIONS 2\nTBPARTITION BY MOD_HASH(id) TBPARTITIONS 8",
            "function":{
                "properties":{
                    "dbNum":"2",
                    "mappingFormat":"c${targetIndex}/cloud_${java.time.LocalDate.now().plus(dbIndex.toInteger()).toString().replace(\"-\",\"\")}/log_${tableIndex}",
                    "tableNum":"8",
                    "tableMethod":"MOD_HASH(id)",
                    "storeNum":2,
                    "dbMethod":"YYYYDD(submit_time)"
                }
            }
        }
    }

  • targetIndex是目標(biāo)下標(biāo)
  • tableIndex是物理分表下標(biāo)
  • dbIndex是物理分庫下標(biāo)
  • index是總物理分表下標(biāo)
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)