MySQL Cluster นั้นมีการจัดเก็บข้อมูลอยู่ 2 แบบ คือแบบเก็บข้อมูลในหน่วยความจำชั่วคราว (In-Memory Database) หรือที่รู้จักกับในนามว่าแรม (RAM) และแบบเก็บข้อมูลบนดิสก์ (Disk Base) ในเนื้อที่ผ่านมาถ้าเราไม่ได้กำหนดให้ระบบเก็บข้อมูลบนดิสก์ระบบจะเก็บข้อมูลในแรม การเก็บข้อมูลที่กล่าวเป็นเพียงการเก็บข้อมูลในระหว่างที่ระบบทำงานเท่านั้น แท้จริงแล้วระบบก็ยังคงบันทึกข้อมูลลงในฮาร์ดดิสก์อยู่ดี ทำให้เวลาเราปิดเครื่องแล้วเปิดขึ้นมาใหม่ยังคงมีข้อมูลอยู่ เพียงแต่ว่าเวลาที่ระบบ MySQL Cluster เริ่มทำงานนั้น ระบบจะยกข้อมูลที่เป็นแบบ In-Memory ขึ้นมาไว้ในแรมทั้งหมด ซึ่งเท่ากับว่าเราต้องมีแรมเพียงพอที่สำหรับข้อมูลทั้งหมดที่เราใช้งาน
1. หลักการของDisk-Bases Tables
ก่อนจะรู้จักกับ Disk-Bases Tables นั้น เรามาทำความเข้าใจกันก่อนว่า การที่ระบบจะเลือกใช้ MySQL Cluster นั้น เพราะเนื่องมาจากความสามารถของ Single Server ไม่เพียงพอต่อความต้องการแล้ว ถ้าเป็นเรื่องของมีจำนวนผู้ใช้งานพร้อมกันมาก ๆ แต่ฐานข้อมูลไม่ใหญ่ แบบ In-memory คงเป็น คำตอบที่ดี แต่ถ้ามีปริมาณข้อมูลมาก ๆ ด้วยแล้ว Disk-Bases Tables ก็จะเป็นทางเลือกที่ประหยัดกว่า และเมื่อเรามองถึงปริมาณข้อมูลจำนวนมาก นั่นก็หมายความว่าระบบไม่สามารถจับเก็บลงบน Data file ไฟล์เดียวแบบเดิมได้แล้ว เพราะติดข้อจำกัดของไฟล์ซิสเต็ม (File System) ระบบจัดการฐานข้อมูลทั่วไปจึงใช้เทคนิคในการจัดเก็บลงบน Data file หลาย ๆ ไฟล์ร่วมกัน เทคนิคแบบนี้เราเรียกว่า TABLESPACE
การสร้างตารางเพื่อให้จัดเก็บข้อมูลลงบนดิสก์นั้น MySQL Cluster จะจัดเก็บทั้งข้อมูลที่ใช้งานลงบนไฟล์ที่จะเรียกว่า Data File ซึ่งปรกติจะใช้ไฟล์เดียว ในกรณีที่ฐานข้อมูลที่คาดว่าจะมีข้อมูลเยอะมาก ๆ ก็นิยมจะสร้างพื้นที่ในการจัดเก็บข้อมูลโดยใช้หลาย ๆ ไฟล์รวมกัน เทคนิคนี้เราเรียกกว่าการสร้าง Tablespace และเช่นเดียวกันข้อมูลของระบบอย่าง Logfile ต่าง ๆ ซึ่งจะมีปริมาณใหญ่ตามกัน ก็นิยมสร้างพื้นที่จัดเก็บจากไฟล์หลาย ๆ ไฟล์เช่นเดียวกัน แต่เรียกว่า Logfile group ดังจะเห็นตามรูปข้างต้น
สำหรับระบบ Disk-Bases หรือบางครั้งเรียกว่า Cluster Disk Data นี้ เราจะพบว่าเราต้องรู้จักกับ
2. การสร้างตารางแบบ Disk-Bases Tables
การสร้างตารางในแบบ Disk-Bases นี้ มีลำดับการสร้างที่เรียงกันตามลำดับ เพราะต้องมีการอ้างอิงถึงกันอยู่ ดังต่อไปนี้
ตรงจุดนี้มีสิ่งที่หนึ่งต้องแจ้งให้ทราบไว้ก่อนคือ ไฟล์ที่จะใช้เก็บ data files และ undo log files ห้ามมิให้ตั้งชื่อซ้ำกัน
3. ตัวอย่างการสร้าง log file group (ทำผ่าน mysql client)
create logfile group lg_1
add undofile 'undo_1.log'
initial_size 20m //ปรกติค่ามาตรฐาน (Default) เป็น 128M
undo_buffer_size 2m //ปรกติค่ามาตรฐาน (Default) เป็น 8M
engine ndbcluster;
ประโยคข้างต้นเป็นการสร้าง logfile groupที่ชื่อ lg_1 โดยให้บันทึกข้อมูลลงบนไฟล์ undo_1.log โดยกำหนดขนาดไฟล์ให้เท่ากับ 20 เมกะไบต์ (MB) และใช้แรม 2 เมกะไบต์เป็นบัฟเฟอร์ การระบุขนาดในรุ่นที่ 7.0.6 นี้พบว่าไม่สามารถใช้หน่วยเป็นตัวอักษรใหญ่ เช่น M ได้ แต่สามารถใช้เป็นตัวอักษรเล็ก หากไม่ระบุหน่วยจะถือเป็นหน่วยไบต์ (Byte) ได้ เช่นundo_buffer_size 2000000 เป็นต้น
4. สร้าง log files เพิ่มให้กับ logfile group
จากรูปในตอนต้นจะเห็นว่า logfile group ประกอบด้วย log file จำนวนมาก แต่ประโยคคำสั่งก่อนหน้ากลับระบุ logfile เพียงไฟล์เดียวคือ undo_1.log
การเพิ่มไฟล์เข้าไปใน logfile group ใช้ประโยค ALTER เพื่อเพิ่มไฟล์เข้าไปในกลุ่ม ดังตัวอย่างต่อไปนี้
ALTER LOGFILE GROUP lg_1
ADD UNDOFILE 'undo_2.log'
INITIAL_SIZE 12m
ENGINE NDBCLUSTER;
ตัวอย่างข้างต้น เป็นการเพิ่ม log file ชื่อ undo_2.log เข้าไปใน Logfile group ที่ชื่อ lg_1
Tip “.log ใส่เพื่อให้สื่อความหมายเท่านั้น ระบบไม่ได้บังคับให้ใส่นามสกุลของไฟล์ ”
5. การเรียกดูรายละเอียดของ logfile group
เราสามารถใช้คำสั่งต่อไปนี้เพื่อดูสกีมา (schema) ของระบบได้
select * from information_schema.files;
ถ้าต้องการจะดูเฉพาะ Logfile group ให้ใช้คำสั่งต่อไปนี้
SELECT LOGFILE_GROUP_NAME, FILE_NAME, EXTRA
FROM INFORMATION_SCHEMA.FILES