之前已經介紹過了schema的作用了,這篇會把rule和server一起介紹~
首先是rule,而這個文件裡面會詳細的製定多種分片的規則,這次只抽出一些使用率比較高的方法,先上檔案的內容
## 截圖的上半部分描述的是rule的定義,在下半部分,是rule對應的實際切分規則,這裡總工介紹下面四種切分方式~murmur已坑~
- -------------------------------------------------- ----------------------------------------Hash-int------- -------------------------------------------------- --------------------------------
先看hash-int,在這條切分規則的下面,有一個mapfile,這代表著,這個切分規則是根據partition-hash-int的內容來決定的,那麼看一下這個文本檔
#很簡單的內容,這代表著切分使用的基準列裡面,值為10000的時候,放在第一個DN裡面(dn1),值為10010的時候,放在第二個DN裡面(dn2)
可以看一下實際效果
Debug日誌,這兩個語句被分配到了dn1和dn2上面,資料庫裡面也插入了相對應的資料
(挖土機滾粗~),如果插入的資料中,基準列的取值不是這個文件裡面寫明的值,會是什麼效果?
對上了當的錯誤回報了~## ,大體上可以理解為枚舉分區
,會比較適合於取值固定的場合,比如說性別(0,1),省份(固定值,短時間不會收復日本省吧~),通路商
or 各種平台的ID
而且,用逗號分隔可以把多個值放在一個分區裡面,所以可以根據實際的資料量/流量/訪問量來綜合製定切分策略;
不是全能戰士╮(╯_╰)╭
#---------------------- -------------------------------------------------- -------------------range-long---------------------------- -------------------------------------------------- ---
第二種切分方式,range-long,仔細一看的話,和hash-int是比較像的,也是由特定的文件來決定切分策略,所以還是去看一下文件的內容
從文件內容中看出,這是一種範圍切分的方式,制定基準列的值範圍,然後將此範圍的所有資料都放到一個DN上面,這上面種方式和hash-int基本上一致,就不截圖了(懶癌晚期,時間不夠了!)
這種切分策略,個人感覺在業務資料庫裡面的使用場景會少一些,因為這種切分方式需要預定好整體的數量,這就決定了那種無限增長的數據不能用這個,畢竟要改動這個切分策略會很麻煩
真要用起來,感覺也就對自增主鍵用,然後依照一定的數量來均勻切分,例如那種一天固定X條資料的業務(溫度採集?資料收集?之類的情況),然後提前建好多個DN(庫)。
當然,且有一個潛在的問題,如果在短時間發生海量的順序插入操作,而每一個DN(分庫)設定的數量比較高(比如說一個DN設定的放1000W條資料),那麼在這個時候,會出現某一個DN(分庫)IO壓力非常高,而其他幾個DN(分庫)完全沒有IO操作,就會出現類似DB中常見的熱塊/熱盤的現象,而MySQL常用自增主鍵,所以使得MySQL的表出現大量「順序」插入的機會會多很多 。
-------------------------------------------- ------------------------------------------------mod- long------------------------------------------------- ----------------------------------
mod-long,從mod來看這應該是取餘數的方法,來看看特定配置的資訊
count=4,這是代表著總共將資料切分成四份,一般是和特定的DN數量對應,從而將對應達到把資料均勻的分佈在四個DN上(當然,count
如何處理的
以這種取餘數的方式時,這四個資料分別插入了四個DN(資料庫),並且可以看到,當順序插入時,資料是被分割在多個DN(庫)上面相比較於上面的range的方法,這種切分策略會更好的分散資料庫寫的壓力,但是問題也很明顯,一旦出現了範圍查詢,就需要MyCAT去合併結果,當資料量偏高的時候,這種跨庫查詢+合併結果消耗的時間有可能會增加很多,尤其是還出現了order
by的時候。
所以這種切分策略會比較適合單點查詢的情景,比如說.....我也不知道......真的不知道,也許在銀行,查詢個人帳戶資訊的時候,一些和用戶資訊的表可以做好冗餘,然後利用這種方式來提供更為高效的查詢(畢竟銀行的用戶數量多,恩恩~)
#----------------------------------------- ---------------------------------------partition-by-long------ -------------------------------------------------- --------------------------
partition-by-long,處於range-long和mod -長之間的一個略微折中的分割策略,具體切分形勢依如下說明:
以1024為一個單位,每個DN存放partitionLength數量的資料,且,partitionCount x partitionLengthCount x partitionLength =1024
看起來有點難以理解,形象點描述的話,以partitionCount(4) x partitionLength(256)為例,sid%1024=0-255的放在11256-DN51的放在DN2,以此類推
試著以128為偏移值插入了八條數據,直接看MyCAT的日誌
#卷個DN裡面~ 值得一提的是,這種切分策略也支持非均勻分佈~實在是測不動了,盜圖兩張~
兩張圖基本上也說明白了這個非均勻分佈的分割策略,重點還是在2x256+1x512=1024上面
此分割策略在
range-long和mod-long之間取了一個折中點,同時,也算是比較靈活,可以根據不同的情況進行非均勻劃分,實際上能應用的場景會稍微多一點吧,或者說,不少場景都能用一用,相對減少了跨DN的情形,又把資料比較均勻的切分開來了,單點查詢也不會太慢。
----------------------------- -------------------------------------------------- ----寫在最後------------------------------------------------- ------------------------------------------其實MyCAT支援的切分方式還有不少,比如說按照時間的切分策略,可以按月,按天切分等,在這裡也沒辦法把所有的策略都放上來,見諒了o( ̄ヘ ̄o#)實際上從個人的觀點來看,時間的切分依照資料庫本身的分區策略來分也沒什麼問題,半年度,季度的數據也還是會需要查詢的....PS: _(:з”∠)_真不是懶... 可以說,MyCAT的分庫分錶的重點,基本上全部都在這個rule裡面體現了,表要不要分,表的數據怎麼切分,都是需要根據實際業務來決定,充分根據業務的特徵去決定最合適的劃分策略~
以上是MySQL分散式叢集之MyCAT(三)rule的詳細分析(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

要優化MySQL慢查詢,需使用slowquerylog和performance_schema:1.啟用slowquerylog並設置閾值,記錄慢查詢;2.利用performance_schema分析查詢執行細節,找出性能瓶頸並優化。

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

MySQL異步主從復制通過binlog實現數據同步,提升讀性能和高可用性。 1)主服務器記錄變更到binlog;2)從服務器通過I/O線程讀取binlog;3)從服務器的SQL線程應用binlog同步數據。

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL的安裝和基本操作包括:1.下載並安裝MySQL,設置根用戶密碼;2.使用SQL命令創建數據庫和表,如CREATEDATABASE和CREATETABLE;3.執行CRUD操作,使用INSERT,SELECT,UPDATE,DELETE命令;4.創建索引和存儲過程以優化性能和實現複雜邏輯。通過這些步驟,你可以從零開始構建和管理MySQL數據庫。

InnoDBBufferPool通過將數據和索引頁加載到內存中來提升MySQL數據庫的性能。 1)數據頁加載到BufferPool中,減少磁盤I/O。 2)臟頁被標記並定期刷新到磁盤。 3)LRU算法管理數據頁淘汰。 4)預讀機制提前加載可能需要的數據頁。

MySQL適合初學者使用,因為它安裝簡單、功能強大且易於管理數據。 1.安裝和配置簡單,適用於多種操作系統。 2.支持基本操作如創建數據庫和表、插入、查詢、更新和刪除數據。 3.提供高級功能如JOIN操作和子查詢。 4.可以通過索引、查詢優化和分錶分區來提升性能。 5.支持備份、恢復和安全措施,確保數據的安全和一致性。

全表掃描在MySQL中可能比使用索引更快,具體情況包括:1)數據量較小時;2)查詢返回大量數據時;3)索引列不具備高選擇性時;4)複雜查詢時。通過分析查詢計劃、優化索引、避免過度索引和定期維護表,可以在實際應用中做出最優選擇。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

禪工作室 13.0.1
強大的PHP整合開發環境

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境