NDB Clusterは勘違いされやすいですが
SSDにデータを保存できたり(性能は1/10)、
Memcache APIを使ってmemcachedでアクセスできたりします。
で今回は前者を行います。
実はディスクベースなNDB Clusterは10年仕様が変わってません。
そのためこちらの方の資料をなぞる形になります。
http://d.hatena.ne.jp/shibainu55/20081123/1225206847
性能が1/10としたのはHP社の資料からになります。
https://h50146.www5.hpe.com/services/ci/opensource/pdfs/HP_OpenServices.pdf
NVDIMMや3D XPoint(Optane SSD)がその性能を発揮すれば性能差は狭まるかもしれません。
SQLノードから実施します。
mysql> create logfile group lg_1 add undofile 'undo_1.dat' engine ndb;
Query OK, 0 rows affected (1.98 sec)
mysql> create tablespace ts_1 add datafile 'data_1.dat' \
-> use logfile group lg_1 engine ndb;
Query OK, 0 rows affected (1.93 sec)
後はcreate tableで
tablespace ts_1 storage disk ENGINE = ndbcluster;
と最後につけるだけになります。
保存先はデータノードのデータディレクトリ配下のディレクトリになります。
$cd /var/lib/mysql-cluster
ノード1
$ sudo ls ndb_4_fs
D1 D10 D11 D2 D8 D9 data_1.dat LCP undo_1.dat
ノード2
$ sudo ls ndb_5_fs
D1 D10 D11 D2 D8 D9 data_1.dat LCP undo_1.dat
標準では128MBのファイルが作成されるようです。
$ sudo ls -l ndb_4_fs
total 262236
drwxr-x--- 4 root root 4096 Dec 23 08:52 D1
drwxr-x--- 3 root root 4096 Dec 23 08:52 D10
drwxr-x--- 3 root root 4096 Dec 23 08:52 D11
drwxr-x--- 4 root root 4096 Dec 23 08:52 D2
drwxr-x--- 3 root root 4096 Dec 23 08:52 D8
drwxr-x--- 3 root root 4096 Dec 23 08:52 D9
-rw-r--r-- 1 root root 134283264 Dec 23 09:10 data_1.dat
drwxr-x--- 3 root root 4096 Dec 23 08:52 LCP
-rw-r--r-- 1 root root 134217728 Dec 23 09:05 undo_1.dat
memcache pluginをディスクベースで使えるようにします。
/usr/share/mysql/memcache-api/ndb_memcache_metadata.sqlを編集します。
sed -i -e "s/ENGINE/tablespace ts_1 storage disk ENGINE"
SQLノードから流し込みます。
cat /usr/share/mysql/memcache-api/ndb_memcache_metadata.sql | mysql -uroot -p
後はmemache pluginを起動させるだけです。
検証した感じでは全データノードが再起動すると
ディスクベースでも素のMySQL程簡単には使えないようではありました。
きちんと学んで挙動を説明できるようにしたいものです。
ディスクベースのmemcacheでも簡単に構築できますので
興味がある人は触って見て下さい。