Pengungkapan: Saya seorang karyawan MySQL, bekerja pada MySQL Cluster.
Saya akan mengatakan bahwa MySQL Cluster dapat mencapai throughput / host yang lebih tinggi daripada MySQL + InnoDB asalkan:
- Pertanyaannya sederhana
- Semua data masuk dalam memori
Dalam hal latensi, MySQL Cluster harus memiliki latensi yang lebih stabil daripada MySQL sharded. Latensi aktual untuk data murni dalam memori bisa serupa.
Ketika kueri menjadi lebih kompleks, dan data disimpan dalam disk, perbandingan kinerja menjadi lebih membingungkan. Untuk mendapatkan jawaban yang lebih spesifik, Anda perlu menjabarkan lebih lanjut tentang aplikasi Anda dan kueri yang Anda lakukan, serta jumlah host dan volume data. MySQL Cluster baru-baru ini memperoleh eksekusi query paralel lokal (AQL) yang berarti dapat bersaing dengan MySQLD mandiri meskipun memiliki data yang didistribusikan di beberapa host.
MySQL Cluster saat ini terbatas pada 'sharding' lebih dari 48 host. Secara teori, Sharded MySQL tidak memiliki batas. Namun, untuk throughput target yang diberikan, lebih sedikit host MySQL Cluster mungkin diperlukan daripada host MySQL yang di-shard.
Perbedaan yang lebih menarik adalah ketika Anda melihat bidang selain kinerja:
- MySQL Cluster mendukung permintaan acak di semua pecahan
- MySQL Cluster mendukung transaksi sewenang-wenang di semua pecahan
- MySQL Cluster mendukung replikasi pecahan serpihan dengan failover dan pemulihan otomatis
- MySQL Cluster mendukung penambahan simpul online (ekspansi cluster)
- MySQL Sharded lebih 'roll milik Anda'
Memiliki pecahan bawaan pada aplikasi Anda memberi Anda potensi penskalaan maksimum, tetapi menambah kompleksitas dan membatasi fleksibilitas Anda dalam hal kueri dan operasi lintas-beling. Jika sharding Anda terlalu dini maka itu mungkin menjadi akar beberapa masalah bagi Anda. MySQL Cluster memungkinkan Anda mendapatkan beberapa manfaat dari sharding tanpa harus membatasi aplikasi Anda menjadi single-shard saja.
Mengenai jawaban sebelumnya, beberapa klarifikasi:
"Meskipun MySQL Cluster adalah keluhan ACID, ia tidak menyediakan mesin penyimpanan yang cocok untuk data dengan kunci majemuk."
MySQL Cluster mendukung kunci primer dan sekunder gabungan. Tidak yakin apa yang tidak 'cocok' tentang itu. Mungkin poster sebelumnya bisa menjelaskan?
"Untuk memiliki data dengan karakteristik kunci yang sama disimpan dalam satu set node data tertentu, Anda dapat melakukan hal berikut:
- Ambil semua simpul data offline, hanya menyisakan simpul data yang Anda inginkan untuk menyimpan data dengan karakteristik kunci yang sama.
- Memuat data Anda ke dalam MySQL Cluster, yang mengisi hanya node data pilih Anda
- Bawa semua node data kembali online "
Ini salah. Distribusi data tidak tergantung pada node mana yang sedang online setiap saat. MySQL Cluster mendukung berbagai skema distribusi data untuk mendukung optimisasi yang Anda jelaskan. Saya menggambarkan distribusi data di MySQL Cluster dalam posting blog di sini: Distribusi data di MySQL Cluster