Baru-baru ini saya banyak membaca tentang DBMS noSQL. Saya mengerti teorema CAP , aturan ACID , aturan BASE dan teori dasar. Tetapi tidak menemukan sumber daya tentang mengapa noSQL scalable lebih mudah daripada RDBMS (misalnya dalam kasus sistem yang membutuhkan banyak server DB)?
Saya kira menjaga batasan dan kunci sumber daya asing biaya dan ketika DBMS didistribusikan, itu jauh lebih rumit. Tapi saya berharap ada lebih dari ini.
Bisakah seseorang tolong jelaskan bagaimana noSQL / SQL mempengaruhi skalabilitas?
sql
nosql
scalability
Ducin
sumber
sumber
Jawaban:
database noSQL memberikan sejumlah besar fungsi yang diberikan oleh database SQL pada dasarnya.
Hal-hal seperti penegakan otomatis integritas referensial, transaksi, dll. Ini semua adalah hal yang sangat berguna untuk beberapa masalah, dan yang memerlukan beberapa teknik menarik untuk mengukur di luar server tunggal (pikirkan apa yang terjadi jika Anda perlu mengunci dua tabel untuk transaksi atom, dan mereka berada di server yang berbeda!).
database noSQL tidak memiliki semua itu. Jika Anda membutuhkan barang-barang itu, Anda harus melakukannya sendiri, tetapi jika Anda TIDAK membutuhkannya (dan ada banyak aplikasi yang tidak), maka bagaimana mungkin Anda beruntung? DB tidak harus melakukan semua operasi rumit ini dan mengunci banyak dataset, sehingga sangat mudah untuk mempartisi hal tersebut di banyak server / disk / apa pun dan membuatnya bekerja sangat cepat.
sumber
Ini bukan tentang NoSQL vs SQL, ini tentang BASE vs ACID.
Scalable harus dipecah menjadi konstituennya:
Basis data ACID-compliant (seperti RDBMS tradisional) dapat membaca skala. Mereka tidak secara inheren kurang efisien daripada database NoSQL karena (kemungkinan) bottleneck kinerja diperkenalkan oleh hal-hal yang tidak dimiliki NoSQL (kadang-kadang) kurang (seperti bergabung dan di mana batasan) yang Anda dapat memilih untuk tidak menggunakan. Clustered SQL RDBMS's dapat membaca skala dengan memperkenalkan node tambahan di cluster. Ada kendala sejauh mana operasi baca dapat ditingkatkan, tetapi ini dipaksakan oleh kesulitan meningkatkan penulisan saat Anda memperkenalkan lebih banyak node ke dalam cluster.
Menulis kerak adalah tempat segala hal menjadi berbulu. Ada berbagai kendala yang diberlakukan oleh prinsip ACID yang tidak Anda lihat dalam arsitektur yang akhirnya konsisten (BASE):
Untuk meningkatkan operasi penulisan atau jumlah node dalam sebuah cluster di luar titik tertentu Anda harus dapat melonggarkan beberapa persyaratan ACID:
Database NoSQL biasanya mengikuti model BASE dan bukan model ACID. Mereka melepaskan persyaratan A, C dan / atau D, dan sebagai imbalannya mereka meningkatkan skalabilitas. Beberapa, seperti Cassandra, membiarkan Anda ikut serta dalam jaminan ACID saat Anda membutuhkannya. Namun, tidak semua database NoSQL lebih terukur sepanjang waktu.
SQL API tidak memiliki mekanisme untuk menjelaskan kueri di mana persyaratan ACID dilonggarkan. Inilah sebabnya mengapa basis data BASE semuanya NoSQL.
Catatan pribadi: satu poin terakhir yang ingin saya sampaikan adalah bahwa sebagian besar kasus di mana NoSQL saat ini sedang digunakan untuk meningkatkan kinerja, solusi akan dimungkinkan pada RDBMS yang tepat dengan menggunakan skema yang dinormalisasi dengan benar dengan indeks yang tepat. Sebagaimana dibuktikan oleh situs ini (diberdayakan oleh MS SQL Server) RDBMS dapat mengubah ke beban kerja yang tinggi, jika Anda menggunakannya dengan tepat. Orang yang tidak mengerti cara mengoptimalkan RDBMS harus menjauh dari NoSQL, karena mereka tidak mengerti risiko apa yang mereka ambil dengan data mereka.
Pembaruan (2019-09-17):
Lansekap basis data telah berkembang sejak memposting jawaban ini. Meskipun masih ada dikotomi antara dunia RDBMS ACID dan dunia BASE NoSQL, garis telah menjadi lebih fuzzier. Database NoSQL telah menambahkan fitur dari dunia RDBMS seperti SQL API dan dukungan transaksi. Sekarang bahkan ada database yang menjanjikan SQL, ACID dan penulisan skala, seperti Google Cloud Spanner, YugabyteDB atau CockroachDB. Biasanya iblis ada dalam perinciannya, tetapi untuk sebagian besar tujuan ini "cukup ASAM". Untuk menyelam lebih dalam ke teknologi basis data dan bagaimana perkembangannya, Anda bisa melihat slide ini (catatan slide memiliki penjelasan yang menyertainya).
sumber
Memang benar bahwa basis data NoSQL (MongoDB, Redis, Riak, Memcached, dll.) Tidak mempertahankan batasan kunci asing, dan operasi atom harus lebih eksplisit ditentukan. Juga benar bahwa basis data SQL (SQL Server, Oracle, PostgreSQL, dll.) Dapat ditingkatkan untuk menangani persyaratan kinerja yang sangat besar dengan DBA berpengalaman.
Database NoSQL memungkinkan pemrogram berpengalaman, yang sangat mengetahui kondisi ras dan operasi atom, untuk melepaskan sejumlah besar pemrosesan hanya diperlukan dalam persentase kecil dari kode aplikasi web saat ini. Database NoSQL tentu memiliki operasi atom dan sebagian besar semua persyaratan transaksional hadir dalam database SQL juga dapat diperoleh database NoSQL. Perbedaannya adalah tingkat abstraksi. Basis data NoSQL menghapus tingkat abstraksi yang lebih tinggi dan memberikan kemampuan kepada pemrogram aplikasi, sehingga menghasilkan kode yang lebih cepat secara keseluruhan dengan meningkatnya kemungkinan korupsi data oleh pemrogram yang tidak menggunakan musim.
Akibatnya, kita jauh lebih mungkin melihat basis data NoSQL yang semakin banyak digunakan di ruang aplikasi web, di mana waktu dan kinerja pengembangan sangat penting. Perangkat lunak finansial dan korporat cenderung mempertahankan warisan SQL-nya karena kinerja perangkat keras relatif murah, mereka telah berpengalaman menangani DBA, dan peningkatan risiko yang disebabkan oleh pemrogram yang tidak musiman tidak cocok.
sumber
Dari IBM developerWorks: Menyediakan skalabilitas data tingkat cloud dengan basis data NoSQL
Skalabilitas adalah sistem yang harus dapat mendukung database yang sangat besar dengan tingkat permintaan yang sangat tinggi pada latensi yang sangat rendah.
Sistem NoSQL memiliki sejumlah fitur desain yang sama:
Mengapa basis data relasional mungkin tidak optimal untuk Penskalaan
Secara umum, sistem manajemen basis data relasional telah dianggap sebagai "solusi satu ukuran untuk semua untuk persistensi dan pengambilan data" selama beberapa dekade. Mereka telah matang setelah upaya penelitian dan pengembangan yang luas dan sangat berhasil menciptakan pasar dan solusi besar dalam domain bisnis yang berbeda.
Kebutuhan yang semakin meningkat untuk skalabilitas dan persyaratan aplikasi baru telah menciptakan tantangan baru untuk RDBMS tradisional, termasuk beberapa ketidakpuasan dengan pendekatan satu ukuran untuk semua dalam beberapa aplikasi skala web. Jawaban untuk ini adalah generasi baru dari perangkat lunak database berkinerja tinggi dan berkinerja tinggi yang dirancang untuk menantang dominasi sistem manajemen basis data relasional. Alasan utama untuk pergerakan NoSQL adalah bahwa implementasi yang berbeda dari aplikasi web, perusahaan, dan cloud computing memiliki persyaratan yang berbeda dari basis datanya - tidak setiap aplikasi memerlukan konsistensi data yang kaku, misalnya.
Contoh lain: Untuk situs web bervolume tinggi seperti eBay, Amazon, Twitter, atau Facebook, skalabilitas dan ketersediaan tinggi adalah persyaratan penting yang tidak dapat dikompromikan. Untuk aplikasi ini, bahkan pemadaman sekecil apa pun dapat memiliki konsekuensi keuangan yang signifikan dan berdampak pada kepercayaan pelanggan.
Lebih dari pada DBA.SE: Apa arti penskalaan horizontal?
Penskalaan Horizontal pada dasarnya adalah membangun bukan ke atas. Anda tidak pergi dan membeli server yang lebih besar dan memindahkan semua beban Anda ke server itu, sebaliknya Anda membeli 1+ server tambahan dan mendistribusikan beban Anda ke mereka.
Penskalaan horizontal digunakan ketika Anda memiliki kemampuan untuk menjalankan beberapa instance pada server secara bersamaan. Biasanya jauh lebih sulit untuk beralih dari 1 server ke 2 server maka dari 2 menjadi 5, 10, 50, dll.
Setelah Anda mengatasi masalah menjalankan mesin virtual paralel, Anda dapat mengambil keuntungan besar dari lingkungan seperti Amazon EC2, Layanan Cloud Rackspace, GoGrid, dll karena Anda dapat membuat mesin virtual naik dan turun berdasarkan permintaan, mengurangi kebutuhan untuk membayar daya server Anda tidak menggunakan hanya untuk menutupi beban puncak itu.
Database relasional adalah salah satu item yang lebih sulit untuk menjalankan baca / tulis penuh secara paralel.
sumber