Single All 4 Desember 2018 5 min

Berkenalan Dengan JSON di RDBMS MySQL

Salah satu opsi untuk menghindarkan aplikasi dari join table.

Berkenalan Dengan JSON di RDBMS MySQL

Salah satu opsi untuk menghindarkan aplikasi dari join table.

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 mutlakBENARya, 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.

Image 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 yangSALAH.

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 likesINNER JOIN artikel ON likes.artikel_id = artikel.idORDER BY artikel.id DESCLIMIT 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 tuhDenormalization? Ribet bat dah bahasanye. Nih saya kutip daritechopedia.com

Denormalizationisa strategy thatdatabasemanagers use to increase the performance of adatabaseinfrastructure. It involves adding redundant data to a normalizeddatabaseto reduce certain types of problems withdatabasequeries 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

Image Mau dibuat seperti gambar diatas? oh bisa banget cuy, atau mau yang lebih simplify?

Image Gamau ribet-ribet pake JSON Object terus maunya pake JSON Array langsung? bisa banget boss quh.

Image 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:

  1. Dokumentasi asli MySQL
  2. Scotch.io Sekian! Semoga bermanfaat ya ^^

Artikel ini merupakan konten legacy dari blog Medium (Tahun 2018). Beberapa konsep atau sintaks mungkin sudah mengalami perubahan pada versi terbaru.