Sunday, March 18, 2018

Using MongoDB in spring-boot


Why mongo?
Teknologi akan terus berkembang, sampai kapan? Saya rasa tidak akan ada habisnya. Begitu juga dengan teknologi “basis data”, MongoDB. Si mongo merupakan varian basis data NoSQL yang lahir untuk menjawab kebutuhan teknologi big data. Beberapa fitur unggulan yang ditawarkan mongoDB sebagai berikut:
  • Big Data (untuk data volume besar, variatif dan proses set get yang sangat cepat)
  • Fast feature development (high transaction rate dan scalability)
  • Flexible deployment dan ready for cloud

Selain itu fitur yag tidak disentuh oleh RDBMS yang kini dikembangkan NoSQL yaitu kemampuan horizontal scalability tanpa kehilangan performa dan masih dalam keluaga query language. Perbandingan antara RDBMS dan NoSQL khususnya mongoDB antara lain:
  • NoSQL membuat kita berfikir tidak hanya tentang table dan relasi, tetapi bagaimana keselurah struktur data tanpa sebuah relasi.
  • NoSQL tidak untuk transaksi data yang kompleks. 
  • RDBMS mempunyai Functionality yang lengkap sedangkan NoSQL mempunyai Performa yang cepat.
  • Tidak ada yang lebih baik antara RDBMS dan NoSQL
Beberapa point diatas menimbulkan rasa penasaran bagaimana jika diimplementasikan pada Spring-boot.

Gambar 1. Contoh JSON
Jenis-jenis basis data NoSQL ada 4 :
  1. Key-Value Store {key,value}
  2. Document-based Store {all}
  3. Column-based Store
  4. Graph-based
Gambar 1 ditunjukan menunjukan bagaimana bagaimana merepresentasikan database pada NoSQL, pada object “key-value”, di dalam nya terdapat variable key dan value dimana key harus unique supaya tidak terjadi objek ganda. Untuk yang document based, merujuk pada object “document-based” yang mirip dengan bagaimana sebuah dokumen disimpan. Sedangkan pada “column-based”, baik “key-value” dan “document-based” dapat disimpan pada column yang kita kehendaki. Graph based dijelaskan pada  gambar 2, sebelah kiri merupakan skema bagaimana struktur database RDBMS dan gambar 2 kanan adalah graph based pada noSQL yang mengadopsi sifat graph dimana terdapat node dan edges untuk menyimpan dan merepresentasikan data. Kita bebas menyimpan data dimanapun kita mau bahkan kita dapat menyimpan D1 pada data D2.

Gambar 2. Graph based
Cukup jelas kan? Sekarang kita akan masuk ke init eh maksud saya inti dari penulisan ini yaitu bagaimana jika MongoDB digunakan pada Spring-boot….. langkah selanjutnya yaitu memasang mongoDB nya dulu guys, untuk langkah dan penjelasan detailnya bisa di-intip di website resminya mongo : https://docs.mongodb.com/manual/installation/ tetapi untuk yang nggak mau ribet(khusus mac user) ada alternatifnya lhooo, cukup pasang “homebrew” dan update, setelah itu jalankan command “brew install mongodb” maka si mongo akan terinstall. Jangan lupa tambahken folder mkdir -p /data/db beserta permission read writenya.

Langkah selanjutnya adalah
1.         Install java IDE
2.         Install maven
3.         Download basic spring-boot project
Basic project dapat di download di https://spring.io/guides/gs/rest-service kemudian tambahkan dependency di file pomnya seperti dibawah:

<dependency>          
      <groupId>org.springframework.boot</groupId>         
      <artifactId>spring-boot-starter-data-mongodb</artifactId> 
</dependency>

nah, untuk mencoba apakah database sudah work fine, kita jalankan servernya dulu dengan perintah mongod pada terminal sampai mengeluarkan output seperti gambar 3a. Setelah itu cek bahwa client juga work fine, via terminal kita eksekusi perintah mongo –host (gembar 3b), karena kita menjalankan client di localhost maka cukup masukan perintah mongo.

Gambar 3a. Output server mongo
Gambar 3b. Client db mongoDB

Jika sudah seperti diatas maka si mongo sudah aktif, selanjutnya , setting spring-boot. Tambahkan di application.properties code dibawah:

# mongodb configuration
spring.data.mongodb.repositories.enabled=true
spring.data.mongodb.uri
=mongodb://localhost/nostra
spring.data.mongodb.database=nostra

Dan jika dijalankan tidak ada error, maka spring-boot sudah menggunakan mongoDB. untuk GUI mongoDB bisa menggunakan https://robomongo.org/
Gambar 4a. Implementasi tabel hibernate dengan mongoDB
Gambar 4b. Repository mongo
Gambar 4c. Tabel si mongoDB

Spring-boot menggunakan hibernate untuk akses ke databasenya, anotasi @Document digunakan untuk menbuat table(Gambar 5a) dan hasil pada database ditampilkan pada Gambar 5b. Anatosi @Id akan menghasilkan nilai unik 12 buah karacter hexadecimal(4 timestamp, 3 machine id, 2 proccess id, 3 simple increment). Untuk repository yang digunakan(Gambar 5c) menggunakan mongorepository, sayangnya repository belum lengkap, baru tersedia untuk insert dan select, sehingga untuk operasi lain masih membutuhkan tenaga ekstra.

Kesimpulan
Spring-boot bisa menggunakan mongoDB meskipun fitur-fitur yang tersedia di hibernate belum lengkap diimplementasikan. Kekurangan lain yaitu, sifat mongoDB yang fleksibel dalam penyimpanan, harus mematuhi sifat hibernate dimana setiap objek harus di-deklarasikan secara lengkap, sehingga kelebihan si mongoDB tidak terbawa pada spring-boot.

Reference:
•https://www.3pillarglobal.com/insights/exploring-the-different-types-of-nosql-databases
•http://www.channelfutures.com/cloud-services/limitations-nosql-database-storage-why-nosqls-not-perfect
•https://www.mongodb.com/


No comments:

Post a Comment