MySQL Cluster 使用小測小結(3)
繼續OneCoder之前提出的要驗證的問題,為了方便測試MySQL Cluster的資料分片功能,我們設定叢集節點配置如下:
NoOfReplicas=1
DataMemory=50M
IndexMemory=10M
初始化重啟節點:
開始寫入80w資料。觀察寫入過程,可以看到資料是大致均勻寫入兩個節點之中:
跟之前不同的事,這次不會雙節點都保持完全 一樣的記憶體佔用了。這說明,這不是由於資料複製造成的,而是正常的資料分片導致。最終80w資料成功寫入了容量均為50m的兩個資料節點中。這說明MySQL Cluster是可以自動將資料分片儲存的。
Begin to prepare statement.
It's up to batch count: 100000
Batch data commit finished. Time cost: 90128
It's up to batch count: 100000
Batch data commit finished. Time cost: 87141
It's up to batch count: 100000
Batch data commit finished. Time cost: 86353
It's up to batch count: 100000
Batch data commit finished. Time cost: 86775
It's up to batch count: 100000
Batch data commit finished. Time cost: 89635
It's up to batch count: 100000
Batch data commit finished. Time cost: 87782
It's up to batch count: 100000
Batch data commit finished. Time cost: 89180
It's up to batch count: 100000
Batch data commit finished. Time cost: 89021
All data insert finished. Total time cost: 706041
那麼,如果是在叢集已有儲存容量不足的情況下,擴充新節點進來,會是怎樣的情況呢。我們再測試一下。先去掉一個節點,將容量再調小。然後寫入資料直到寫滿,再加入第二個節點,繼續寫入資料。看是否可以成功,並且觀察資料的分配情況。
在寫入的過程,也觀察到另外一個現象,就是在一次批量寫入沒有提交的情況下,記憶體的佔用大於儲存需要的空間容量,在提交以後,這部分記憶體會釋放,記憶體的佔用量會降低。因此調整每批次寫入的資料量,可在現有的空間中存入更多的資料。這裡採用單批次1w輸入寫入。
注:在單批次20w的情況下。根本無法成功寫入任何資料,10w的時候只能寫入20w資料。
加入新節點:
目前資料並沒有自動調配。我們先繼續寫入資料測試,看看叢集容量是否真的擴容了,並觀察後續空間使用狀況。資料庫現有資料23w。直接繼續寫入資料,仍然提示空間不足。
觀察到,新加入的節點是no nodegroup 狀態。所以我們通過:
ndb_mgm>create nodegroup 3;
來建立nodegroup。然後再調整分割槽資料:
mysql> alter online table data_house reorganize partition;
發現分割槽果然有變化了。再次繼續寫入資料,成功!
新加入的節點已經可以寫入資料了。
通過工具也可看到,資料庫裡已經有42w資料了。最終兩個節點共寫入50w資料。查詢效率仍然是20ms左右。至此,MySQL Cluster的一些基本的功能特性,都驗證完成了。不過想用於生產環境還需要更多的考量,目前網上也有很多改造過的開源和商業版本,如果有需要可以具體考察一下。