Beyond NoSQL: Kasus untuk SQL terdistribusi

Awalnya, ada file. Kemudian ada database navigasi berdasarkan file terstruktur. Lalu ada IMS dan CODASYL, dan sekitar 40 tahun yang lalu kami memiliki beberapa database relasional pertama. Sepanjang tahun 1980-an dan 1990-an, "database" secara ketat berarti "database relasional". SQL menguasai. 

Kemudian dengan semakin populernya bahasa pemrograman berorientasi objek, beberapa orang berpikir bahwa solusi untuk "ketidaksesuaian impedansi" dari bahasa berorientasi objek dan database relasional adalah dengan memetakan objek dalam database. Jadi kami berakhir dengan "database berorientasi objek." Hal yang lucu tentang database objek adalah bahwa dalam banyak kasus database tersebut pada dasarnya adalah database normal dengan mapper objek bawaan. Ini menyusut dalam popularitas dan upaya pasar massal nyata berikutnya adalah "NoSQL" di tahun 2010-an.

Serangan terhadap SQL

NoSQL menyerang database relasional dan SQL dalam nada yang sama. Masalah utama kali ini adalah bahwa Internet telah menghancurkan premis yang mendasari arsitektur sistem manajemen basis data relasional (RDBMS) berusia 40 tahun. Basis data ini dirancang untuk menghemat ruang disk yang berharga dan menskalakan secara vertikal. Sekarang ada terlalu banyak pengguna dan terlalu banyak untuk ditangani oleh satu server gemuk. Database NoSQL mengatakan bahwa jika Anda memiliki database tanpa gabungan, tidak ada bahasa kueri standar (karena menerapkan SQL membutuhkan waktu), dan tidak ada integritas data maka Anda dapat menskalakan secara horizontal dan menangani volume tersebut. Ini memecahkan masalah skala vertikal tetapi memperkenalkan masalah baru.

Dikembangkan secara paralel dengan sistem pemrosesan transaksi online (OLTP) ini adalah jenis lain dari basis data relasional yang disebut sistem pemrosesan analitik online (OLAP). Basis data ini mendukung struktur relasional tetapi menjalankan kueri dengan pemahaman bahwa mereka akan mengembalikan data dalam jumlah besar. Bisnis pada 1980-an dan 1990-an sebagian besar masih didorong oleh pemrosesan batch. Selain itu, sistem OLAP mengembangkan kemampuan bagi pengembang dan analis untuk membayangkan dan menyimpan data sebagai kubus berdimensi-n. Jika Anda membayangkan array dua dimensi dan pencarian berdasarkan dua indeks sehingga Anda pada dasarnya seefisien waktu konstan tetapi kemudian mengambilnya dan menambahkan dimensi lain atau lainnya sehingga Anda dapat melakukan apa yang pada dasarnya adalah pencarian dari tiga faktor atau lebih (katakanlah permintaan persediaan,dan jumlah pesaing) —Anda dapat menganalisis dan memperkirakan berbagai hal dengan lebih efisien. Namun, membuat ini melelahkan dan merupakan upaya yang sangat berorientasi batch.

Sekitar waktu yang sama dengan NoSQL skala, database grafik muncul. Banyak hal yang tidak "relasional" itu sendiri, atau tidak berdasarkan teori himpunan dan aljabar relasional, melainkan pada hubungan orang tua-anak atau teman-dari-teman. Contoh klasik adalah lini produk ke merek produk untuk dimodelkan ke komponen dalam model. Jika Anda ingin mengetahui "motherboard apa yang ada di laptop saya", Anda mengetahui bahwa produsen memiliki sumber yang rumit dan merek atau nomor model mungkin tidak cukup. Jika Anda ingin mengetahui motherboard apa saja yang digunakan di lini produk, dalam SQL klasik (non-CTE atau Common Table Expression), Anda harus menjalankan tabel dan mengeluarkan kueri dalam beberapa langkah. Awalnya, sebagian besar database grafik tidak pecah sama sekali. Sebenarnya, banyak jenis analisis grafik dapat dilakukan tanpa benar-benar menyimpan data sebagai grafik.

Janji NoSQL ditepati dan janji dilanggar

Database NoSQL memiliki skala yang jauh lebih baik daripada Oracle Database, DB2, atau SQL Server, yang semuanya didasarkan pada desain berusia 40 tahun. Namun, setiap jenis database NoSQL memiliki batasan baru:

  • Penyimpanan nilai-kunci: Tidak ada pencarian yang lebih sederhana daripada db.get (key). Namun, banyak data dan kasus penggunaan dunia tidak dapat disusun dengan cara ini. Selain itu, kami benar-benar berbicara tentang strategi caching. Pencarian kunci primer cepat dalam database apa pun; hanya apa yang ada dalam ingatan yang penting. Dalam kasus terbaik, skala ini seperti peta hash. Namun, jika Anda harus melakukan 30 perjalanan database untuk menyatukan kembali data Anda atau melakukan kueri rumit apa pun - ini tidak akan berhasil. Ini sekarang lebih sering diimplementasikan sebagai cache di depan database lain. (Contoh: Redis.)
  • Database dokumen: Ini mencapai popularitas mereka karena mereka menggunakan JSON dan objek mudah untuk diserialkan ke JSON. Versi pertama dari database ini tidak memiliki gabungan, dan memasukkan seluruh "entitas" Anda ke dalam satu dokumen raksasa memiliki kekurangannya sendiri. Tanpa jaminan transaksional, Anda juga mengalami masalah integritas data. Saat ini, beberapa basis data dokumen mendukung bentuk transaksi yang kurang kuat, tetapi ini bukan tingkat jaminan yang biasa digunakan kebanyakan orang. Selain itu, bahkan untuk kueri sederhana, ini sering kali lambat dalam hal latensi - bahkan jika skalanya lebih baik dalam hal keseluruhan. (Contoh: MongoDB, Amazon DocumentDB.)
  • Penyimpanan kolom: Ini secepat penyimpanan nilai kunci untuk pencarian dan dapat menyimpan struktur data yang lebih rumit. Namun, melakukan sesuatu yang tampak seperti gabungan di tiga tabel (dalam bahasa RDBMS) atau tiga koleksi (dalam bahasa MongoDB) paling menyakitkan. Ini sangat bagus untuk data deret waktu (beri tahu saya semua yang terjadi antara jam 1 siang dan 2 siang).

Dan ada database NoSQL lain yang lebih esoterik. Namun, kesamaan dari semua database ini adalah kurangnya dukungan untuk idiom database umum dan kecenderungan untuk fokus pada "tujuan khusus". Beberapa database NoSQL yang populer (misalnya, MongoDB) menulis front-end database yang hebat dan alat ekosistem yang membuatnya sangat mudah bagi pengembang untuk mengadopsi, tetapi merekayasa batasan serius dalam mesin penyimpanan mereka - belum lagi batasan dalam ketahanan dan skalabilitas.

Standar database masih penting

Salah satu hal yang membuat basis data relasional dominan adalah bahwa mereka memiliki ekosistem alat yang sama. Pertama, ada SQL. Meskipun dialek bisa berbeda - sebagai pengembang atau analis jika Anda beralih dari SQL Server 6.5 ke Oracle 7, Anda mungkin harus memperbaiki kueri Anda dan menggunakan "(+)" untuk gabungan luar - tetapi hal-hal sederhana berhasil dan hal-hal yang sulit cukup mudah untuk menerjemahkan.

Kedua, Anda memiliki ODBC dan, kemudian, JDBC, antara lain. Hampir semua alat yang dapat terhubung ke satu RDBMS (kecuali jika dibuat secara khusus untuk mengelola RDBMS tersebut) dapat terhubung ke RDBMS lainnya. Ada banyak orang yang terhubung ke RDBMS setiap hari, dan menyedot data ke dalam Excel untuk menganalisisnya. Saya tidak mengacu pada Tableau atau ratusan alat lainnya; Saya berbicara tentang "kapal induk", Excel.

NoSQL menyingkirkan standar. MongoDB tidak menggunakan SQL sebagai bahasa utama. Ketika pesaing terdekat MongoDB, Couchbase, sedang mencari bahasa kueri untuk menggantikan kerangka kerja mapreduce berbasis Java mereka, mereka membuat dialek SQL mereka sendiri.

Standar penting apakah itu untuk mendukung ekosistem alat, atau karena banyak orang yang meminta basis data bukanlah pengembang - dan mereka tahu SQL.

GraphQL dan kebangkitan manajemen negara

Anda tahu siapa yang memiliki dua jempol dan hanya ingin status aplikasinya masuk ke database dan tidak peduli bagaimana caranya? Orang ini. Dan ternyata seluruh generasi pengembang. GraphQL - yang tidak ada hubungannya dengan database grafik - menyimpan grafik objek Anda di datastore yang mendasarinya. Ini membebaskan pengembang dari kekhawatiran tentang masalah ini.

Upaya sebelumnya dalam hal ini adalah alat pemetaan relasional objek, atau ORM, seperti Hibernate. Mereka mengambil sebuah objek dan pada dasarnya mengubahnya menjadi SQL berdasarkan pengaturan pemetaan objek-ke-tabel. Banyak dari beberapa generasi pertama ini sulit dikonfigurasi. Selain itu, kami berada di kurva belajar.

Sebagian besar implementasi GraphQL bekerja dengan alat pemetaan relasional objek seperti Sequelize atau TypeORM. Alih-alih membocorkan masalah manajemen status di seluruh kode Anda, implementasi GraphQL dan API yang terstruktur dengan baik akan menulis dan mengembalikan data yang relevan saat perubahan terjadi pada grafik objek Anda. Siapa, di tingkat aplikasi, yang benar-benar peduli bagaimana data disimpan?

Salah satu dasar dari basis data berorientasi objek dan NoSQL adalah bahwa pengembang aplikasi harus mengetahui seluk-beluk bagaimana data disimpan dalam basis data. Secara alami ini sulit bagi pengembang untuk menguasai dengan teknologi yang lebih baru, tetapi sekarang tidak lagi sulit. Karena GraphQL menghilangkan kekhawatiran ini sama sekali.

Masukkan NewSQL atau SQL terdistribusi

Google memiliki masalah database dan menulis makalah dan kemudian implementasi yang disebut "Spanner," yang menjelaskan cara kerja database relasional yang didistribusikan secara global. Spanner memicu gelombang baru inovasi dalam teknologi database relasional. Anda sebenarnya dapat memiliki database relasional dan membuatnya berskala tidak hanya dengan pecahan tetapi juga di seluruh dunia jika diperlukan. Dan kita berbicara tentang skala dalam pengertian modern, bukan cara RAC / Streams / GoldenGate yang sering mengecewakan dan selalu rumit.

Jadi premis "menyimpan objek" dalam sistem relasional salah. Bagaimana jika masalah utama dengan database relasional adalah back end dan bukan front end? Ini adalah ide di balik apa yang disebut database "NewSQL" atau lebih tepat "SQL terdistribusi". Idenya adalah untuk menggabungkan pembelajaran penyimpanan NoSQL dan ide Google Spanner dengan front end RDBMS yang matang dan open source seperti PostgreSQL atau MySQL / MariaDB.

Apa artinya? Artinya, Anda bisa mendapatkan kue dan memakannya juga. Artinya Anda dapat memiliki banyak node dan menskalakan secara horizontal - termasuk di seluruh zona ketersediaan cloud. Artinya, Anda dapat memiliki beberapa pusat data atau wilayah geografis cloud - dengan satu database. Ini berarti Anda dapat memiliki keandalan sejati, cluster database yang tidak pernah turun sejauh menyangkut pengguna.

Sementara itu, seluruh ekosistem SQL masih berfungsi! Anda dapat melakukannya tanpa membangun kembali seluruh infrastruktur TI Anda. Meskipun Anda mungkin bukan game untuk "merobek dan mengganti" RDBMS tradisional Anda, sebagian besar perusahaan tidak mencoba menggunakan lebih banyak Oracle. Dan yang terbaik dari semuanya, Anda masih dapat menggunakan SQL dan semua alat Anda baik di cloud maupun di seluruh dunia.