Design Skema Database MongoDB — Bagian 2

Best Praktis Membuat Skema Database yang Benar pada MongoDB — (advance relation)

D. Husni Fahri Rizal
The Legend
4 min readJun 9, 2020

--

Pada Design Skema Database MongoDB bagian satu, telah dijelaskan bahwa pendekatan pemodelan dari relasi satu ke N dapat didekati dengan pemodelan satu ke sedikit (embended), satu ke banyak (referensi), atau satu ke squallion (parent referensi). Selanjutnya, kita akan membahas relasi dan pemodelan yang lebih advance yaitu, referensi dua arah dan teknik denormalisasi.

Referensi Dua Arah

Untuk kasus-kasus tertentu, kita terkadang membutuhkan relasi dari dua sisi. Baik itu dari sisi satu ke N ataupun dari sisi N ke satu. Untuk dapat melalukanya maka kita harus mengunakan teknik referensi dari dua arah.

Misalkan, pada Obeject Person memiliki sekumpulan data Task yang dimiliki salah satu object dalam dokumen Person. Dengan pemodelan satu ke banyak yang telah dijelaskan, ketika kita get person kita akan mendapatkan data orang berserta kumpulan task id. Apabila kita ingin mencari suatu task dimiliki oleh object person tertentu maka kita harus membuat referesi balik dengan menambahkan object Task pada dokumen Person. Dengan demikian, dokumen person dan task skemanya menjadi sebagai berikut.

Satu data pada person memiliki banyak id dari task
Pada object task terdapat object id dari person atau kita sebut sebagai owner

Dengan design seperti ini, kita akan mendapatkan semua kelebihan dan kekurangan dari relasi serta pemodelan satu ke banyak. Dengan tambahan kita mendapatkan data owner pemilik dari suatu task.

Tapi perlu sangat diperhatikan kemudahan yang terjadi ini yaitu dapat mengetahui pemilik dari saatu task, dibayar dengan proses update yang tidak sedehana !!! Kita harus melakukan dua kali proses updet pada sisi Task dan pada sisi Person sekaligus.

Jika kita telili lebih dalam dengan design ini tidak dimungkinkan untuk melakukan reasign atau penugasan ulang suatu task dari satau orang ke orang lain dalam satu atomic update. Untuk dapat melakukan ini kita harus melakukan serangkaian proses yang dijaga konsistensi datanya.

Pertama, kita harus mengupdate data pada dokumen Task. Kedua, kita mengupdate data Person pemilik awal task tadi (daftar task-task pada person dikurangi). Ketiga, melakukan update pada Person pemilik baru task tersebut.

Untuk menjaga konsistensi data maka ada pada proses update di atas terdapat dua pendekatan yang dapat kita lakukan, yaitu mengaktifkan transaksional pada mongodb seperti pada penjelasan Transaksional pada MongoDB. Kedua yaitu dengan menggunakan pendekatan Saga Pattern.

Transactional MongoDB dengan Java

Denormalisasi Pada Relasi Satu ke Banyak

Pada penjelasan pemodelan satu ke banyak kita mendapatkankan problem atau lebih tepatnya perkerjaan tambahan ketika melakukan pencarain data part detail dari suatu produk. Kita harus melakuakn query dua kali.

Untuk membantu hal di atas kita dapat melakukan denormalisasi dengan menambahkan data-data yang diperlukan misalkan nama part sebagai berikut.

Sebelum denormalisasi
Setelah denormalisasi

Dengan demikian, sekarang kita akan mendapatkan data detil dalam hal ini nama part, dkita dapatkan sekaligus ketika kita melakukan pencarian produk tertentu dalam satu query.

Denormalisasi akan menghemat proses query, tetapi hal ini dibayar dengan proses update yang sangat banyak dan mahal. Apabila kita melakukan upate terhadap nama part pada dokument Part, maka pada semua dokumen Product yang memiliki part tersebut harus diupdate pula.

Denormalisasi hanya masuk akal jika proses yang terjadi lebih banyak read dari pada write. Jika kita sangat sering membaca data yang didenormalisasi dan proses update jarang maka masuk akal kita melakukan denormalisasi dan membayarnya dengan proses update yang agak lama.

Kita juga dapat melakukan pendekatan dengan memilih-milih data yang jarang di udpate untuk di lakukan denormalisasi sedangkan data-data yang sangat sering diupate maka kita tidak melakukan denormalisasi.

Perlu di perhatikan pula dengan teknik denormalisasi ini kita akan medapat kan jeda waktu yang cukup lama ketika proses udpate terjadi tergantung jumlah data yang kita update. Biasanya pendektan update secara asyncronous sangat tepat dilakukan. Jadi kita sudah musti memahami dan memperhatikan akan ada jeda waktu untuk semua data terupdate.Proses denormalikasi ini dapat kita lakukan untukk semua jenis pemodelan yang telah kita basas pada pembahasan sebelumnya.

Perbandingan Mongodb dan RDBMS Atribute

Berikut adalah perbandingan atribute dari database mongodb terhadap rdbms

References

  1. https://docs.huihoo.com/mongodb/mongodb-3.2-data-models-guide.pdf
  2. https://docs.huihoo.com/mongodb/10gen-mongodb-operations-best-practices.pdf

--

--

D. Husni Fahri Rizal
The Legend

Engineering Leader | Start-Up Advisor | Agile Coach | Microservices Expert | Professional Trainer | Investor Pemula