Berkenalan Dengan JSON di RDBMS MySQL
Halo Dev-lo-pah! Kali ini saya mau ngebahas struktur database nih! Mohon dibaca dulu ya sebelum ngejudge saya… saya emang masih newbie juga kok ^^
Buat yang pernah ngoding, pasti gaakan asing sama database RDBMS. Yah elah gimana ga asing, orang tiap kampus pasti ngajarinnya kalo enggak pake MySQL atau pasti pake SQL Server HAHAHA. Nggak pernah saya lihat ada dosen yang bilang “Oke anak-anak kita akan pake NoSQL” atau mata kuliah kampus yang bertuliskan “Struktur Database Non Relasional”. Oke skip curhatnya.
Oke karena kita disini ngomongin struktur database yang baik, saya punya pandangan tersendiri ngomongin soal terstruktur, kalo ada yang punya pandangan yang berbeda monggo tulis saja di kolom komentar. Jadi jangan bilang hal yang saya tulis ini mutlak BENAR ya, karena kebenaran hanyalah milik Allah S.W.T HEHEHE.
Sekarang kita akan masuk ke sebuah kasus:
Kamu akan membuat sebuah database sebuah portal media. Sebagai programmer, kamu diminta untuk membuat sistem dimana pengguna dapat mendaftarkan diri, membaca artikel, melakukan bookmark artikel, dan memberikan sebuah like.
Tunggu jangan dibayangkan dulu, biar saya tebak. Struktur database yang kamu buat pasti akan seperti ini.
Bener gak perkiraan saya, menurut logika kamu, databasenya akan dibuat seperti ini kan, fergusso? Oke cool!
Saya tidak akan bilang struktur database diatas salah, sekali lagi saya tidak akan bilang struktur database diatas salah!
Struktur database pada gambar diatas benar menurut prinsip normalisasi, hal ini membuat database mudah dibaca oleh programmer lainnya, dan ini bukan hal yang SALAH.
KASUS
Setelah website kalian dibuat. Website berjalan selama 2 tahun, kalian sudah memiliki 800ribu baris artikel, 100ribu baris likes, 356ribu baris bookmark, dan 1juta pengguna.
Pertanyaan pertama saya adalah, bagaimana cara kalian mendapatkan data artikel apa saja yang sudah di like seluruh pengguna untuk ditampilkan pada sebuah bagian pada sebuah halaman dengan nama bagian “Artikel yang disukai pengguna lain”.
Biar saya tebak lagi, pasti kalian akan ngebuatnya gini:
SELECT artikel.* FROM likes
INNER JOIN artikel ON likes.artikel_id = artikel.id
ORDER BY artikel.id DESC
LIMIT 10;
Bener gak? lagi-lagi pasti saya benar 😎 hehehe. Apakah Query tersebut salah? saya bilang, TIDAK. Itu 100% benar, tidak ada cacat query.
DIMANA MASALAHNYA?
Perlu kalian perhatikan dengan jumlah baris yang kalian miliki. Dengan query tersebut masih ada kemungkinan slow query apabila kalian memiliki data dengan jumlah yang banyak. Ada kemungkinan saat-saat ‘lemot’ apabila pada saat jam tertentu banyak request yang masuk ke website kalian.
Kenapa saya bisa bilang gini? Karena saya udah pernah ngerasain database yang jumlahnya lebih dari 3juta baris pada salah satu table, lalu di table lainnya jumlahnya diatas 300ribu baris, sisa-sisa table lainnya yang kecil-kecil minimal 15ribu baris. Database dengan data yang banyak ini diakses terus-menerus oleh pengguna. Modar loh ane kalo strukturnya belum kokoh, efeknya lemot-lemot lucu gitu pada jam-jam tertentu.
BAGAIMANA CARA MENYELESAIKAN MASALAH DIATAS?
Pandangan saya adalah, hancurkan INNER JOIN kalian.
NAH LOH NAH LOH! Pasti kalian bakalan ngomong “EANJING GIMANA CARANYA GUE DAPET DATA USER YANG UDAH NGELIKE?”.
Jangan ngegas dong bruh, kalem aja. Yang perlu kalian lakukan adalah melakukan Denormalization. Apaan tuh Denormalization? Ribet bat dah bahasanye. Nih saya kutip dari techopedia.com
Denormalization is a strategy that database managers use to increase the performance of a database infrastructure. It involves adding redundant data to a normalized database to reduce certain types of problems with database queries that combine data from various tables into a single table.
Nah kalo diterjemahkan dengan bahasa inggris ala saya adalah
Denormalisasi adalah strategi penghoalahan database untuk meningkatkan performa dari database. Ini meliputi penambahan data redundan ke database yang lebih normal untuk mengurangi beberapa jenis masalah dengan kueri database yang mengkombinasikan banyak data dari table tertentu kedalam satu table.
Pasti tetep kaga mudeng, intinya adalah Denormalisasi ini adalah proses pengurangan table dengan memasukkan data dari table lain ke dalam satu table saja.
“LOH LOH LOH caranya gimana mas?” “Ini udah 2018 bro, Googling lah HUEHEHE.”
Jawabannya adalah menggunakan tipe kolom JSON. Yup JSON ini bisa dibilang sangat legendaris dikalangan developer, karena JSON ini tipe data yang enak banget buat dibaca, diolah, dan dilempar ketimbang sesepuhnya yaitu XML.
Nah dengan tipe kolom JSON kita akan memungkinkan ngebuat satu kolom yang dapat digunakan dengan berbagai bentuk seperti JSON Object
Mau dibuat seperti gambar diatas? oh bisa banget cuy, atau mau yang lebih simplify?
Gamau ribet-ribet pake JSON Object terus maunya pake JSON Array langsung? bisa banget boss quh.
Otomatis table kalian udah minify banget nih jadi berkurang dua table. Dengan struktur seperti ini kalian sudah menyelamatkan 100ribu baris di table likes dan 356k baris di bookmark dan dapat diselesaikan hanya dalam satu kolom!
Apa manfaat penyelamatan dengan data JSON ini? tentu saja kalian akan mengurangi waktu untuk melakukan JOIN dari table lain. Kalian juga mempercepat query karena hanya perlu select dari table artikel saja!
Bagaimana cara penggunaan JSON di MySQL beserta syntax-nya? Akan saya bahas di artikel yang akan datang ya ^^
Kalo udah kepo saya bisa saranin kalian langsung main ke:
Sekian! Semoga bermanfaat ya ^^