利用MyCAT實現資料分片

2021-08-07 05:36:39 字數 2540 閱讀 9510

先從schema.xml中擷取一段示例:

1、邏輯表名:goods,type:global,全域性表 。資料來源:dn1、dn2上

2、邏輯表名:hotnews,所屬分片:dn1、dn2、dn3;

分片規則:mod-long,注意按實際情況修改分片規則檔案(conf目錄下的rule.xml檔案)

primarykey為分片字段,sql語句按primarykey查詢可以快速定位到具體分片,(primarykey在配置檔案中指定,可以不是主鍵)

常用分片規則如下:

一、連續分片規則:

1)範圍分片:

autopartition-long.txt

0

mapfile定義如下:

# range start-end ,data node index

# k=1000,m=10000.

0-500m=0

500m-1000m=1

1000m-1500m=2

分片字段取值:0~500m,劃分到datanode1

分片字段取值:500m~1000m,劃分到datanode2

分片字段取值:1000m~1500m,劃分到datanode3

上述定義的範圍外的分片字段,劃分劃分到datanode1

注:0,適用於每個分片規則,當遇到無法識別的值,指定預設的路由規則

2)按月分片:

二、離散分片規則:

1)列舉

partition-hash-int.txt

#vim partition-hash-int.txt
10000=0

10010=1

2)取模

3

3)一致性hash分片(遠期mycat可能放棄該演算法)

0

2160

用於測試時觀察各物理節點與虛擬節點的分布情況,如果指定了這個屬性

,會把虛擬節點的murmur hash值與物理節點的對映按行輸出到這個檔案,沒有預設值,如果不指定》,就不會輸出任何東西 -->

優點是擴容時遷移資料量小

三、綜合分片規則

1)先範圍後取模

partition-range-mod.txt

# vim partition-range-mod.txt

# range start-end ,data node group size

0-200m=5

200m1-400m=1

400m1-600m=4

600m1-800m=4

800m1-1000m=6

分片字段取值0~200m,分在5個分片上,以此類推

2)先日期後hash

切分的一些思路:

1、涉及複雜查詢的,可以根據原表的資料量大小估算切分後的單個分片表的資料量在1000萬左右(無複雜查詢的資料量可大到5000萬)。

2、根據最頻繁的、最重要的查詢條件來選擇合適的分片字段。謹慎選擇,分片字段一經選擇無法修改。

3、範圍類不需要考慮擴容資料遷移問題,雜湊類、取模類需要遷移。

4、根據er分片,有關聯關係的表配置相同分片規則可以優化join操作。

5、配置類的資料、或更新頻率較少的表,考慮採用全域性表。

6、活躍資料優先採用離散分片規則。

7、歷史非活躍資料優先採用連續分片規則。

跨分片資料聚合機制

當後端分片返回資料給mycat的時,特別是遇到報表統計類查詢時,會使得在mycat內完成分頁、排序、分組、統計操作,嚴重消耗記憶體資源。

分頁:假設客戶端傳送給mycat:select * from table_1 limit 100;

mycat:將該sql推送到下屬的分片

分片分別計算結果返回給mycat,由於每次分片返回資料的速度不盡相同,故可能存在隨機結果集的問題。

(堆)排序:

跨分片join機制:

mysql端實現join,mycat端進行合併

需要在每個分片中,參與join的多個表符合可以進行join

每個分片各自進行join操作,作為部分結果集,傳送到mycat進行整合。

具體可以實現上述操作的表有以下4種:

1)不分片的表之間進行join

2)採用相同分片規則、且用分片欄位做join的表

3)er分片表

4)分片表+全域性表

其餘表的join,需要下推到mycat實現,否則會導致資料不全。

catlet存在的問題:需要實時計算結果資源消耗必然很大、無法支援大表join

mycat分片規則

mycat 分片規則 mycat全域性表 如果你的業務中有些資料類似於資料字典,比如配置檔案的配置,常用業務的配置或者資料量不大很少變動的表,這些表往往不 是特別大,而且大部分的業務場景都會用到,那麼這種表適合於mycat全域性表,無須對資料進行切分,只要在所有的分片上儲存一 份資料即可,mycat...

Mycat三 資料庫分片

schemas.xml,主要在於中table標籤的rule屬性 newsrule對應 rule.xml中的newrule select user select user rule.xml tablerule中name對應sechema table rule屬性 tablerule rule colu...

mycat做資料庫分片的分片規則

schema.xml配置檔案中rule的規則為auto sharding long 此分片適用於,提前規劃好分片字段某個範圍屬於哪個分片。檢視rule.xml的具體規則 rule.xml下的columns 標籤配置的id一定要與將要分片的 id名一致 rule.xml裡面的會顯示具體的txt文字檔案...