Pencarian global tidak diaktifkan.
Lewati ke konten utama
Halaman

Database NewSQL

Syarat penyelesaian

basis data SQL

basis data SQL

Basis data seperti PostgreSQL, MySQL, Oracle, dan lainnya dikembangkan mulai tahun 1990-an. Pada saat itu, jaminan konsistensi dan dukungan transaksi sangat penting. Layanan biasanya mengoperasikan satu instans basis data yang menyimpan semua data untuk layanan atau organisasi dan diakses oleh sejumlah pengguna terbatas. Jenis basis data ini paling cocok untuk skenario ini.

Komponen tingkat tinggi dari database SQL

  • API : Lapisan komunikasi antara klien dan basis data.
  • Query Processor : Lapisan yang mengurai dan mengeksekusi query SQL. SQL kaya akan sintaksis, dan lapisan ini mampu memahami query, membuat rencana eksekusi, mengoptimalkan, dan mengeksekusinya.
  • Manajer Transaksi : Memelihara semua logika yang terkait dengan transaksi dan konsistensi.
  • File Data B-tree : Struktur penyimpanan basis data yang menampung semua data tabel. Biasanya berupa B-tree, yang menyediakan kinerja logN untuk operasi baca.
  • WAL (Write-Ahead Logging) : Ini seperti berkas yang hanya menambahkan informasi baru, seperti operasi penyisipan, pembaruan, dan penghapusan dalam basis data. Sifatnya yang hanya menambahkan membuatnya sangat cepat, dan sangat penting untuk integritas data jika basis data mogok sebelum berkas data diperbarui.

Keuntungan dari database SQL yang umum

  • Transaksi : Ini mengacu pada bagaimana data diubah dalam basis data. Basis data SQL mendukung properti ACID (Atomicity, Consistency, Isolation, Durability) yang memastikan bahwa perubahan tidak hilang dan tidak membahayakan integritas basis data.
  • Konsistensi : Menjamin bahwa data kita akan memiliki nilai yang dapat diprediksi saat kita membaca data dan melakukan transaksi. Secara default, database SQL menyediakan jaminan konsistensi yang baik. Semakin rendah tingkat konsistensi, semakin hati-hati kita saat bekerja dengan data.
  • Kecepatan : Basis data SQL cukup cepat untuk penggunaan umum dan utama. Struktur B-tree memberikan kinerja rata-rata yang baik untuk operasi baca dan tulis. Tentu saja, ada basis data tertentu yang jauh lebih cepat untuk penggunaan tertentu seperti analitik atau caching. Namun, untuk layanan standar, basis data SQL sudah cukup baik.
  • Kesederhanaan : Basis data jenis ini lebih sederhana dari perspektif infrastruktur. Selain itu, transaksi dan konsistensi menyederhanakan pengembangan sistem.

Mayoritas keuntungan dari basis data SQL berasal dari fakta bahwa kita memiliki satu contoh basis data, yang menghilangkan kebutuhan untuk memikirkan cara menyinkronkan data di berbagai server.

Kekurangan Database SQL Umum

  • Keterbatasan dalam Penskalaan : Memiliki satu instans basis data dapat menjadi tantangan dalam integrasi dan penskalaan dengan instans tambahan. Misalnya, PostgreSQL tidak memiliki fungsionalitas untuk berkomunikasi dengan instans PostgreSQL lainnya. Untuk melakukan penskalaan, kita perlu menulis, membeli, atau memasang perkakas tambahan. Ada banyak perusahaan yang menyediakan perkakas untuk melakukan penskalaan PostgreSQL.
  • Penskalaan yang Mahal : Jika kita menerapkan semua perkakas dan layanan yang diperlukan di atas PostgreSQL, kita mungkin mengalami kinerja yang lebih rendah per CPU daripada dalam kasus yang ideal. Ini karena penggunaan CPU akan lebih rendah dalam skenario di mana beberapa instans tidak menangani permintaan jika kita bertujuan untuk mencapai konsistensi yang tinggi.

Di dunia nyata, mengandalkan hanya satu instans basis data tidaklah tepat karena pentingnya ketersediaan dan skalabilitas. Oleh karena itu, kita sering memilih pola di mana kita memiliki satu simpul Utama yang mendukung operasi baca dan tulis, dan simpul Sekunder cadangan yang menggunakan strategi sinkron dan asinkron. Pendekatan ini meningkatkan ketersediaan basis data; jika server mati, kita tidak akan kehilangan data dan dapat memulihkannya dengan cepat. Selain itu, kita dapat menggunakan simpul Utama untuk operasi tulis dan beberapa simpul Sekunder untuk operasi baca guna meningkatkan jumlah operasi baca, meskipun hal ini mengurangi tingkat konsistensi operasi baca ke tingkat konsistensi akhir.

Sharding

basis data SQL

Tantangan lainnya adalah Sharding. Sharding adalah proses mendistribusikan data ke berbagai instans basis data. Misalnya, kita mungkin memiliki lima instans shard, masing-masing dengan satu Instans Utama dan satu atau beberapa instans Sekunder yang menyimpan sebagian data tabel berdasarkan logika sharding. Ini adalah proses rumit yang memerlukan banyak alat, dan masalah utamanya adalah sharding menimbulkan banyak masalah yang terkait dengan sistem terdistribusi yang tidak ditangani dalam basis data umum seperti PostgreSQL atau MySQL. Akibatnya, kita kehilangan jaminan konsistensi, transaksi, dan indeks yang sudah ada dan perlu menerapkannya menggunakan alat dan layanan tambahan.

Basis data SQL adalah yang terbaik jika sesuai dengan kebutuhan Anda, atau jika Anda memiliki perangkat untuk mengatasi keterbatasan ini. Namun, untuk mengatasi masalah skalabilitas, jenis basis data baru diperkenalkan: basis data NoSQL.

Basis data NoSQL

Basis data NoSQL

NoSQL dapat dibandingkan dengan merek pemasaran yang diciptakan untuk menandakan diperkenalkannya jenis database baru yang berbeda dari generasi SQL sebelumnya. Diperkenalkan sekitar tahun 2009, istilah ini mencakup berbagai jenis database seperti Key-Value, Document, Column, dan Graph, yang masing-masing ideal untuk aplikasi yang berbeda. Contohnya termasuk Cassandra, MongoDB, HBase, dan DynamoDB.

Perbedaan utama antara database SQL dan NoSQL adalah skalabilitasnya yang lebih baik dengan jaminan konsistensi yang lebih rendah. Biasanya, database NoSQL diperkenalkan di era ketika perusahaan mengelola banyak data di berbagai instans database. Jadi, NoSQL secara inheren menyediakan alat untuk memfasilitasi pembuatan kluster database dengan beberapa instans untuk penyimpanan data.

Komponen Tingkat Tinggi Basis Data NoSQL (Menggunakan Cassandra sebagai Contoh)

Pengaturan ini terdiri dari sejumlah instans yang saling terhubung. Pada dasarnya, hanya sedikit yang berubah dari SQL ke NoSQL. Masih ada instans basis data, dan data disimpan secara lokal. Namun, ada pengurangan fungsionalitas dengan lebih banyak fokus pada jenis basis data. Setiap instans meliputi:

  • API : Mirip dengan API basis data SQL, tetapi dengan logika tambahan untuk mengelola koneksi antara instans dan klien basis data cerdas, atau lapisan proksi tambahan yang disertakan secara bawaan.
  • Log Komit : Dapat dibandingkan dengan log tulis-depan dalam basis data SQL, log ini berfungsi untuk mencegah hilangnya data jika terjadi kerusakan.
  • Pohon LSM Berkas Data : Ini bisa berupa pohon LSM atau pohon B (seperti dalam MongoDB, DynamoDB), yang pada dasarnya mencerminkan basis data SQL. Basis data menyimpan dan membaca data dari penyimpanan lokal server.
  • Proses Latar Belakang : Bertanggung jawab atas tugas-tugas seperti pemadatan, perbaikan, dan sinkronisasi antar instansi.

Keuntungan dari Database NoSQL Umum

  • Skalabilitas : Basis data NoSQL dirancang untuk skalabilitas. Basis data ini biasanya mendukung sharding dan replikasi langsung. Misalnya, dengan Cassandra, Anda dapat membuat kluster yang terdiri dari 100+ instans basis data yang mengelola data tabel dan memberikan kinerja yang tangguh untuk operasi baca dan tulis. Hal ini dapat dicapai karena logika bawaan basis data untuk koneksi antar instans, klien basis data cerdas, atau lapisan proksi bawaan.
  • Pemanfaatan Sumber Daya : Arsitektur basis data NoSQL dioptimalkan untuk sistem terdistribusi, yang mendorong pemanfaatan sumber daya yang efisien melalui operasi baca/tulis simultan di beberapa instans.

Kekurangan Database NoSQL Umum

  • Konsistensi : Basis data ini sering kali hanya menyediakan konsistensi kausal atau akhir atau konsistensi yang dapat disesuaikan (seperti Cassandra) dengan keterbatasan. Insinyur harus berupaya ekstra untuk mengadaptasi arsitektur dengan batasan ini.

  • Kompleksitas : Kompleksitas ada dalam dua aspek. Pertama, sistem itu sendiri lebih kompleks karena berupaya mengatasi tantangan umum sistem terdistribusi. Kedua, sistem ini menghadirkan kompleksitas bagi pengguna yang harus mempertimbangkan keterbatasan ini. Misalnya, dalam Cassandra, desain data sangat penting; desain yang salah dapat menyebabkan masalah kinerja dan konsistensi yang signifikan, lebih parah daripada dengan basis data SQL.

  • Keterbatasan Fungsional : Basis data SQL dilengkapi dengan serangkaian fitur lengkap seperti transaksi, indeks, gabungan, pemicu, dll. Sebaliknya, basis data NoSQL sering kali tidak memiliki fitur-fitur ini atau kesulitan menerapkannya secara efektif.

Hasilnya, meskipun basis data NoSQL menawarkan skalabilitas yang mengesankan, basis data tersebut menghadapi tantangan terkait konsistensi. Untuk mengatasi masalah konsistensi ini, basis data NewSQL diperkenalkan.

Basis data NewSQL

Ikhtisar database NeSQL

Basis data NewSQL memadukan keunggulan basis data SQL dan NoSQL tetapi menambah kompleksitas dan meningkatkan latensi, dengan operasi penulisan melebihi 40 ms. Basis data ini berkisar dari Serializable hingga Strict Consistency , yang menawarkan tingkat konsistensi yang lebih tinggi daripada sistem SQL pada umumnya, beserta skalabilitas yang sangat baik. Contoh basis data NewSQL meliputi Google Spanner, FaunaDB, YDB, dan lainnya.

Basis Data sebagai Sistem yang Kompleks

Database NewSQL adalah sistem kompleks yang terdiri dari:

  • Lapisan Perutean : Mengarahkan permintaan ke replika yang sesuai. Data dibagi ke beberapa replika, diperlukan mekanisme untuk mengidentifikasi replika yang benar untuk setiap permintaan. Hal ini biasanya dicapai melalui sharding berbasis rentang.
  • Compute Layer : Berfungsi mirip dengan API sebelumnya, tetapi merupakan proses terpisah yang dapat diskalakan secara independen. Jumlah instans bervariasi berdasarkan beban permintaan.
  • Transaction Manager : Layanan unik yang mengimplementasikan logika inti basis data. Operasi tulis dan baca harus konsisten dan mengembalikan data terkini. Untuk memastikan hal ini, basis data menggunakan protokol konsensus seperti Raft atau Multi-Paxos. Protokol ini memfasilitasi kesepakatan di berbagai replika untuk menjamin konsistensi data. Konsensus juga diperlukan untuk operasi baca guna memastikan pengambilan data terkini.
  • Lapisan Penyimpanan : Dengan kemampuan untuk menskalakan lapisan komputasi secara independen, penting untuk memisahkan instans basis data dari penyimpanan. Basis data tradisional menyimpan data pada disk lokal, tetapi pendekatan modern memanfaatkan sistem penyimpanan terdistribusi seperti Google Colossus, DFS, atau SeaweedFS, yang menangani replikasi dan penskalaan data secara independen. Pada tingkat file, dapat berupa pohon LSM atau pohon B yang sama.
  • Log transaksi - Mirip dengan database SQL, database NewSQL memerlukan pelacakan semua perubahan status. Hal ini dilakukan dengan menggunakan log terdistribusi yang berisi data dari algoritma konsensus. Hasilnya, semua instans mempertahankan urutan perubahan yang sama, yang kemudian dapat diterapkan ke lapisan penyimpanan.
  • Pekerjaan Latar Belakang - Layanan NewSQL menjalankan banyak tugas latar belakang. Tugas-tugas ini meliputi pemadatan, pemisahan shard menjadi shard yang lebih kecil, dan penskalaan otomatis shard 'panas', di seluruh aktivitas pemeliharaan lainnya.

Skalabilitas dengan Jaminan

Aspek paling menarik dari basis data NewSQL adalah pendekatannya terhadap transaksi terdistribusi dan konsistensi tinggi. Hal ini memerlukan metode baru yang dirancang untuk sistem terdistribusi.

Protokol Konsensus

Protokol konsensus

Protokol seperti Raft dan Multi-Paxos memungkinkan perubahan yang konsisten di berbagai server. Protokol tersebut merupakan komponen inti bagi banyak sistem terdistribusi yang memerlukan konsistensi.

Komponen Inti Protokol Konsensus:

  • Node : Biasanya, ada lebih dari lima node yang dihosting di berbagai Zona Ketersediaan.
  • Kepemimpinan : Pada waktu tertentu, ada satu simpul pemimpin atau tidak ada sama sekali, dengan sistem dalam proses memilih pemimpin baru.
  • Raft Log : Raft menggunakan log yang beroperasi pada prinsip State Machine Replication (SMR), memastikan setiap node memiliki data identik dalam urutan yang sama.
  • Komunikasi : Pemimpin berkomunikasi dengan pengikut kira-kira setiap 50 ms, yang mengakibatkan banyaknya permintaan antar node.
  • Persetujuan Mayoritas : Untuk menulis data, pemimpin memerlukan persetujuan dari mayoritas (lebih dari 50%) node pengikut.
  • Pemilihan Pemimpin : Jika pemimpin gagal mengirim pesan ping ke pengikut, mereka memulai pemilihan pemimpin baru setelah batas waktu (150 * acak) ms.

Jika disederhanakan, ini serupa dengan contoh tunggal dari database SQL di mana hanya perubahan yang diterapkan, dan perubahan ini disertai dengan jaminan ketersediaan yang kuat, bahkan jika node pemimpin mengalami kegagalan.

Keuntungan Database NewSQL

  • Konsistensi Tinggi : Basis data NewSQL memberikan jaminan konsistensi yang kuat karena penggunaan protokol konsensus dan transaksi terdistribusi.
  • Skalabilitas : Basis data ini secara inheren mendukung sharding dan replikasi. Desainnya juga memungkinkan penskalaan independen, yang meningkatkan skalabilitas secara keseluruhan.

Kekurangan Database NewSQL

  • Latensi Tinggi : Sementara database NoSQL seperti Cassandra dapat mencapai latensi 1 ms untuk operasi tulis/baca dalam satu zona ketersediaan, solusi NewSQL sering kali memiliki latensi yang lebih tinggi. Hal ini karena mereka memerlukan penggunaan protokol konsensus, yang membutuhkan waktu tambahan.
  • Teknologi Kompleks : Cara kerja internal basis data NewSQL melibatkan konsep-konsep kompleks seperti protokol konsensus, transaksi terdistribusi, penyimpanan terdistribusi, dan log terdistribusi. Semua ini memerlukan pengetahuan dan keahlian tambahan.
  • Kurang Populer : Basis data sumber terbuka seperti TiDB, YDB, dan CockroachDB kurang populer dibandingkan basis data SQL atau NoSQL tradisional. Basis data papan atas seperti Google Spanner atau FaunaDB bukan sumber terbuka dan memerlukan pembayaran untuk penggunaannya. Akibatnya, sulit untuk menemukan teknisi terampil yang familier dengan jenis basis data ini.

Kami memperoleh jaminan dan skalabilitas, tetapi dengan mengorbankan latensi dan kompleksitas yang meningkat. Setiap perubahan memerlukan konsensus, yang memerlukan waktu lebih lama dibandingkan dengan basis data NoSQL.

Kesimpulan

Basis data SQL menawarkan jaminan yang kuat tetapi memerlukan alat tambahan untuk penskalaan. Basis data NoSQL bagus dalam hal skalabilitas tetapi memberikan lebih sedikit jaminan. Basis data NewSQL menawarkan jaminan dan skalabilitas tetapi dengan mengorbankan peningkatan waktu dan kompleksitas sistem.

Tidak ada solusi yang cocok untuk semua; masing-masing memiliki kelebihan dan kekurangan. Oleh karena itu, kita harus memilih sesuai dengan masalah yang dihadapi. Tidak semua sistem memerlukan konsistensi global yang tinggi, sehingga database NewSQL menjadi berlebihan dalam banyak skenario, yang berpotensi menimbulkan masalah dengan latensi dan biaya.



ref

https://amarchenko.dev/blog/2024-03-13-new-sql/


Terakhir diubah: Minggu, 17 November 2024, 17:35