1. 程式人生 > >Mycat分片規則 一致性雜湊

Mycat分片規則 一致性雜湊

這個分片規則是我比較喜歡的,他通過演算法將資料平均分在幾個分割槽中,需要使用一致性hash規則

只需要找到mycat檔案下的conf下的rule.xml檔案進行配置修改

<function name="murmur"
		class="org.opencloudb.route.function.PartitionByMurmurHash">
		<property name="seed">0</property><!-- 預設是0 -->
		<property name="count">3</property><!-- 要分片的資料庫節點數量,必須指定,否則沒法分片 -->
		<property name="virtualBucketTimes">160</property><!-- 一個實際的資料庫節點被對映為這麼多虛擬節點,預設是160倍,也就是虛擬節點數是物理節點數的160倍 -->
		<!-- <property name="weightMapFile">weightMapFile</property> 節點的權重,沒有指定權重的節點預設是1。以properties檔案的格式填寫,以從0開始到count-1的整數值也就是節點索引為key,以節點權重值為值。所有權重值必須是正整數,否則以1代替 -->
		<!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property> 
			用於測試時觀察各物理節點與虛擬節點的分佈情況,如果指定了這個屬性,會把虛擬節點的murmur hash值與物理節點的對映按行輸出到這個檔案,沒有預設值,如果不指定,就不會輸出任何東西 -->
	</function>

我只修改了個count屬性,代表我有多少個數據庫節點 我建立了三個節點所以定義了3

我們再配置檔案中可以找到表規則定義

<tableRule name="sharding-by-murmur">
		<rule>
			<columns>id</columns>
			<algorithm>murmur</algorithm>
		</rule>
	</tableRule>

但是這個規則指定的列是id ,如果我們的表主鍵不是id ,而是order_id ,那麼我們應該重新定義一個tableRule:

<tableRule name="sharding-by-murmur-order">
		<rule>
			<columns>order_id</columns>
			<algorithm>murmur</algorithm>
		</rule>
	</tableRule>

在schema.xml中配置邏輯表時,指定規則為sharding-by-murmur-order

<table name="tb_order" dataNode="dn1,dn2,dn3" rule="sharding-by-murmur-order" />

快去試試吧!!!!