Saya telah menemukan banyak database NoSQL dan database SQL. Ada berbagai parameter untuk mengukur kekuatan dan kelemahan database ini dan skalabilitas adalah salah satunya. Apa perbedaan antara penskalaan database ini secara horizontal dan vertikal?
Penskalaan horizontal berarti Anda menskalakan dengan menambahkan lebih banyak mesin ke dalam kumpulan sumber daya Anda, sedangkan Penskalaan vertikal berarti Anda menskalakan dengan menambahkan lebih banyak daya (CPU, RAM) ke mesin yang ada.
Cara mudah untuk mengingat ini adalah dengan memikirkan mesin di rak server, kita menambahkan lebih banyak mesin di arah horizontal dan menambahkan lebih banyak sumber daya ke mesin di arah vertikal.
Dalam dunia basis data, penskalaan horizontal sering kali didasarkan pada partisi data, yaitu setiap simpul hanya berisi sebagian dari data, dalam penskalaan vertikal data berada pada satu simpul dan penskalaan dilakukan melalui multi-core, yaitu menyebarkan beban antara CPU dan sumber daya RAM dari mesin itu.
Dengan penskalaan horizontal, seringkali lebih mudah untuk menskalakan secara dinamis dengan menambahkan lebih banyak mesin ke dalam pool yang ada - Penskalaan vertikal sering kali terbatas pada kapasitas satu mesin, penskalaan di luar kapasitas itu sering kali melibatkan waktu henti dan disertai dengan batas atas.
Contoh yang baik dari penskalaan horizontal adalah Cassandra, MongoDB, Google Cloud Spanner ... dan contoh yang baik dari penskalaan vertikal adalah MySQL - Amazon RDS (Versi cloud dari MySQL). Ini menyediakan cara mudah untuk menskalakan secara vertikal dengan beralih dari mesin kecil ke mesin yang lebih besar. Proses ini sering kali melibatkan downtime.
In-Memory Data Grids seperti GigaSpaces XAP, Coherence dll... sering kali dioptimalkan untuk penskalaan horizontal dan vertikal hanya karena mereka tidak terikat pada disk. Penskalaan horizontal melalui partisi dan penskalaan vertikal melalui dukungan multi-core.
Anda dapat membaca lebih lanjut tentang subjek ini di posting saya sebelumnya: Scale-out vs Scale-up dan Prinsip Umum di Balik Alternatif NOSQL
Let's mulai dengan kebutuhan untuk skala yang lebih meningkatkan sumber daya sehingga sistem anda sekarang dapat menangani permintaan lebih banyak dari yang sebelumnya bisa.
Ketika anda menyadari sistem anda semakin lambat dan tidak mampu menangani saat ini jumlah permintaan, anda perlu untuk skala sistem.
Ini menyediakan anda dengan dua pilihan. Baik anda meningkatkan sumber daya server yang anda gunakan saat ini, saya.e, meningkatkan jumlah RAM, CPU, GPU dan sumber daya lainnya. Hal ini dikenal sebagai skala vertikal.
Skala vertikal biasanya mahal. Itu tidak membuat sistem yang fault tolerant, saya.e jika anda scaling aplikasi yang berjalan dengan single server, jika server mati, sistem anda akan turun. Juga jumlah benang tetap sama dalam skala vertikal. Skala vertikal mungkin memerlukan sistem anda untuk pergi untuk beberapa saat ketika proses berlangsung. Meningkatkan sumber daya pada server membutuhkan restart dan menempatkan sistem anda turun.
Solusi lain untuk masalah ini adalah meningkatkan jumlah server ada dalam sistem. Solusi ini sangat digunakan dalam industri teknologi. Hal ini pada akhirnya akan menurunkan permintaan per detik di setiap server. Jika anda perlu untuk skala sistem, hanya menambahkan server lain, dan anda selesai. Anda tidak akan diminta untuk me-restart sistem. Jumlah thread dalam sistem masing-masing menurun terkemuka untuk throughput yang tinggi. Untuk memisahkan permintaan, sama-sama untuk masing-masing dari server aplikasi, anda perlu menambahkan load balancer yang akan bertindak sebagai reverse proxy untuk web server. Keseluruhan sistem ini dapat disebut sebagai satu cluster. Sistem anda mungkin mengandung sejumlah besar permintaan yang akan membutuhkan jumlah yang lebih dari kelompok seperti ini.
Berharap anda mendapatkan seluruh konsep memperkenalkan skala sistem.
Ada arsitektur tambahan yang tidak disebutkan - layanan basis data berbasis SQL yang memungkinkan penskalaan horizontal tanpa kerumitan sharding manual. Layanan-layanan ini melakukan sharding di latar belakang, sehingga memungkinkan Anda untuk menjalankan basis data SQL tradisional dan meningkatkan skala seperti yang Anda lakukan dengan mesin NoSQL seperti MongoDB atau CouchDB. Dua layanan yang saya kenal adalah EnterpriseDB untuk PostgreSQL dan Xeround untuk MySQL. Saya melihat sebuah post yang mendalam oleh Xeround yang menjelaskan mengapa scale-out pada database SQL sulit dan bagaimana mereka melakukannya secara berbeda - perlakukan ini dengan sebutir garam karena ini adalah postingan vendor. Lihat juga Wikipedia Entri Cloud Database, ada penjelasan yang bagus tentang SQL vs NoSQL dan layanan vs self-hosted, daftar vendor dan opsi penskalaan untuk setiap kombinasi. ;)
Ya, menskalakan secara horizontal berarti menambahkan lebih banyak mesin, tetapi juga menyiratkan bahwa mesin-mesin tersebut sama dalam cluster. MySQL dapat menskalakan secara horizontal dalam hal Membaca data, melalui penggunaan replika, tetapi begitu mencapai kapasitas mem/disk server, Anda harus mulai melakukan sharding data di seluruh server. Ini menjadi semakin kompleks. Sering kali menjaga data tetap konsisten di seluruh replika menjadi masalah karena tingkat replikasi sering kali terlalu lambat untuk mengimbangi tingkat perubahan data.
Couchbase juga merupakan basis data NoSQL Horizontal Scaling yang fantastis, digunakan di banyak aplikasi dan game ketersediaan tinggi komersial dan bisa dibilang berkinerja tertinggi dalam kategori ini. Ini mempartisi data secara otomatis di seluruh cluster, menambahkan node sederhana, dan Anda dapat menggunakan perangkat keras komoditas, instance vm yang lebih murah (menggunakan Large daripada High Mem, mesin High Disk di AWS misalnya). Ini dibangun dari Membase (Memcached) tetapi menambahkan ketekunan. Juga, dalam kasus Couchbase, setiap node dapat melakukan pembacaan dan penulisan, dan sama dalam cluster, dengan hanya replikasi failover (bukan replikasi dataset penuh di semua server seperti di mySQL).
Dari segi kinerja, Anda dapat melihat tolok ukur Cisco yang sangat baik: http://blog.couchbase.com/understanding-performance-benchmark-published-cisco-and-solarflare-using-couchbase-server
Berikut ini adalah posting blog yang bagus tentang Arsitektur Couchbase: http://horicky.blogspot.com/2012/07/couchbase-architecture.html
Tradisional database relasional yang dirancang sebagai client/server database sistem. Mereka dapat ditingkatkan secara horizontal tetapi proses untuk melakukannya cenderung kompleks dan rawan kesalahan. NewSQL database seperti NuoDB memori-sentris database terdistribusi sistem yang dirancang untuk skala horizontal sambil mempertahankan SQL/ASAM sifat-sifat tradisional RDBMS.
Untuk informasi lebih lanjut tentang NuoDB, baca mereka teknis kertas putih.
SQL database seperti Oracle, db2 juga mendukung skala Horisontal melalui Shared disk cluster. Misalnya Oracle RAC, IBM DB2 purescale atau Sybase ASE Cluster edition. Node baru dapat ditambahkan ke Oracle RAC sistem atau DB2 purescale sistem untuk mencapai skala horisontal.
Tetapi pendekatan yang berbeda dari database noSQL (seperti mongodb, CouchDB atau IBM Cloudant) adalah bahwa data sharding ini bukan bagian dari skala Horisontal. Dalam database noSQL data shraded selama skala horisontal.
Anda memiliki sebuah perusahaan dan hanya ada 1 pekerja tetapi anda punya 1 proyek baru pada saat itu anda sewa kandidat baru -- ini adalah skala horisontal. di mana calon baru adalah mesin-mesin baru dan proyek baru lalu lintas/panggilan ke api's.
Dimana 1 proyek dengan IIT/NIT orang menangani semua permintaan untuk api anda/lalu lintas. Jika ada waktu lebih banyak permintaan untuk api anda's kemudian memecatnya dan menggantikannya dengan IQ tinggi NIT/IIT pria -- ini adalah skala vertikal.
Menambahkan banyak balancers beban menciptakan tambahan overhead dan latency dan itu adalah kelemahan untuk scaling out horizontal dalam database nosql. Hal ini seperti pertanyaan mengapa orang-orang mengatakan RPC tidak dianjurkan karena tidak kuat.
Saya pikir dalam sistem nyata kita harus menggunakan sql dan database nosql untuk memanfaatkan kedua multicore dan cloud computing kemampuan dari hari ini's sistem.
Di sisi lain, kompleks transaksional pertanyaan memiliki kinerja tinggi jika sql database seperti oracle yang digunakan. NoSql bisa digunakan untuk bigdata dan horizontal scalability oleh sharding.
Jawaban yang diterima adalah tempat di dasar definisi horizontal vs vertikal scaling. Tapi tidak seperti keyakinan umum bahwa skala horisontal dari database hanya mungkin dengan Cassandra, MongoDB, dll saya ingin menambahkan bahwa skala horisontal juga sangat mungkin dengan tradisional RDMS; itu juga tanpa menggunakan pihak ketiga solusi.
Saya tahu banyak perusahaan, khususnya SaaS berbasis perusahaan yang melakukan ini. Hal ini dilakukan dengan menggunakan aplikasi sederhana logika. Pada dasarnya anda mengambil satu set pengguna dan membagi mereka ke dalam beberapa DB server. Jadi misalnya, anda biasanya akan memiliki "meta" database/tabel yang akan menyimpan klien, DB server/koneksi string, dll dan tabel yang menyimpan client/server pemetaan.
Kemudian hanya permintaan langsung dari masing-masing klien ke DB server mereka dipetakan ke.
Sekarang beberapa mungkin mengatakan ini adalah mirip dengan horizontal partitioning dan tidak "benar" skala horisontal dan mereka akan benar dalam beberapa hal. Tapi hasil akhirnya adalah bahwa anda memiliki skala DB selama beberapa Db server.
Satu-satunya perbedaan antara dua pendekatan untuk skala horisontal adalah bahwa salah satu pendekatan (MongoDB, dll) scaling dilakukan oleh DB perangkat lunak itu sendiri. Dalam arti bahwa anda adalah "beli" scaling. Dalam pendekatan lain (untuk RDBMS skala horisontal), scaling dibangun oleh kode aplikasi/logika.