Monday, August 1, 2016

MongoDB : Database NoSQL Berbasis Dokumen yang sedang Naik Daun di Era Big Data

Apa itu MongoDB?
MongoDB adalah database NoSQL yang berbasis dokumen yang bersifat cross-platform, open-source, dan dapat digunakan secara gratis. MongoDB telah hadir sebagai salah satu database NoSQL yang sedang naik daun seiring dengan makin populernya penggunaan database NoSQL pada era Big Data sekarang ini. Adapun perusahaan-perusahaan besar yang telah menggunakan MongoDB diantaranya: Adobe, Facebook, eBay, video game FIFA, Foursquare, LinkedIn, McAfee, MetLife dan masih banya lagi.

MongoDB adalah database multi-fungsi yang kuat, fleksibel, dan skalabel. MongoDB menggabungkan kemampuan bekerja dalam berbagai skala dengan fitur-fitur seperti secondary indexes (indeks tambahan selain indeks utama), range queries (penelisikan dalam suatu rentang tertentu), sorting (pengurutan data), aggregations (penggabungan dataset), dan geospatial indexes (indeks geospasial).

Database berbasis Dokumen "Document Oriented Database"
Sebagai database NoSQL yang berbasis dokumen atau berorientasi pada dokumen (document oriented), MongoDB tidak menggunakan model relasional database. Alasan utama untuk meninggalkan database model relasional dan menggunakan database NoSQL layaknya MongoDB adalah demi kemudahan dalam meningkatkan skala database secara horisontal (scale out). Namun, tentu saja bukan hanya itu yang dijadikan alasan.

Database yang berorientasi pada dokumen menggantikan konsep "row" (baris) seperti pada database relasional dengan model yang lebih fleksibel, yaitu model "document" (dokumen) dengan format mirip JSON. Format dokumen ini dikenal dengan sebutan BSON. Dengan adanya konsep embedded documents (dokumen dalam dokumen) dan arrays (susunan dokumen) telah memungkinkan merepresentasikan model relasional dengan hierarki (hierarchical relationships) yang kompleks dalam satu "record" saja.


Model document-oriented ini secara alami sesuai dengan model data yang dipakai oleh para developer yang menggunakan bahasa program object oriented modern. Dalam document-oriented database, tidak ada keharusan untuk menentukan skema tertentu seperti halnya dalam database relasional. Data disimpan dalam bentuk dokumen yang terdiri atas key dan value dengan type dan ukuran yang bersifat variabel (tidak ditetapkan sebelumnya). Karena tidak ada skema yang harus ditetapkan, berdampak pada kemudahan dalam menghapus dan menambah field kapan saja diperlukan. Hal ini memungkinkan para developer untuk lebih mudah melakukan eksperimen-eksperimen dalam memilih model data yang akan digunakan hingga menemukan model yang terbaik.



Didesain untuk "scale out", Data Sharding Otomatis
Ketika jumlah data yang harus disimpan terus tumbuh, seorang developer akan menemui sebuah kesulitan untuk memutuskan bagaimana dia harus meningkatkan skala database-nya? Dalam hal ini ada 2 opsi yang bisa dipilih, yaitu: 1) scaling up (meningkatkan skala secara vertikal) dengan menggunakan mesin / server yang lebih besar, 2) scaling out (meningkatkan skala secara horisontal) dengan mempartisi data dan menyimpannya dalam beberapa mesin / server.

Scaling up adalah upaya yang biasanya lebih mudah dilakukan, tetapi juga memiliki kelemahan, yaitu: mesin/server yang lebih besar biasanya berharga mahal, dan ketika itu juga penuh, kita harus membeli lagi yang lebih besar lagi sehingga akhirnya tak mampu membayar harga yang terlalu mahal.

Scaling out adalah upaya peningkatan kapasitas dengan menambah jumlah server/mesin dalam suatu cluster. Upaya ini bisa dilakukan dengan biaya lebih murah dan kapasitas dapat ditingkatkan terus menerus dengan menambah jumlah server. Namun demikian, tentu saja akan jauh lebih sulit dalam menangani ratusan atau ribuan server dalam satu kluster dibanding dengan hanya menangani satu server bersar.

Dalam hal ini, MongoDB memang didesain untuk scale out. Model data document-oriented telah memberikan kemudahan dalam membelah data besar dan mendistribusikannya ke sejumlah server. MongoDB secara otomatis mengurus pendistribusian data dan beban secara seimbang dalam keseluruhan cluster, serta secara otomatis mengarahkan permintaan pengguna / klien ke server yang tepat. Ini memungkinkan para developer untuk fokus pada pemrograman aplikasi yang sedang dibuat, bukan mengurus skala data. Ketika kluster memerlukan kapasitas yang lebih besar, tinggal tambahkan server baru dan MongoDB akan mengatur bagaimana data yang ada mesti didistribusikan ke server baru itu.

Tiga Element Inti pada MongoDB
Agar dapat memahami kapabilitas MongoDB, kita perlu mempelajari elemen inti yang menyusun suatu database dalam MongoDB. Sebenarnya, model penyimpanan data dalam MongoDB diorganisasikan dalam sekelompok komponen yang terdiri atas:
1. Database: adalah elemen pada top level. Pada database relasional, suatu database umumnya terdiri atas table dan views. Dalam MongoDB, suatu database adalah wadah secara fisik yang memuat suatu struktur yang disebut collection. Setiap database memiliki sekelompok file tersendiri di dalam filesystem media penyimpanan. Umumnya, satu server MongoDB terdiri atas sejumlah database.

2. Collection: adalah sekelompok document MongoDB. Collection dapat dipadankan dengan table dalam RDBMS. Sejumlah collection dapat berada dalam satu database tapi harus memiliki nama yang berbeda-beda. Wajarnya, collection-collection yang tergabung dalam satu database memiliki hubungan tertentu meskipun tidak dituntut harus dibuat dengan suatu skema tertentu sperti halnya table dalam RDBMS.

3. Documents: adalah satuan/unit data terkecil dalam MongoDB. Pada dasarnya tersusun atas sekelompok pasangan key-value. Tak seperti record pada RDBMS, document memiliki skema yang dinamis, artinya: document yang berada dalam satu collection tidak harus memiliki sekelompok field yang sama. Bandingkan dengan table dalam RDBMS, setiap record (baris) akan memiliki field(kolom) yang sama. Satu lagi, field yang berada dalam suatu document dapat memuat data dengan type yang berbeda-beda.


Demikian pengenalan singkat tentang MongoDB, database NoSQL yang berbasis dokumen dengan format penyimpanan data yang disebut BSON, sebuah format yang sangat mirip dengan JSON. MongoDB bersifat open-source dan bebas digunakan tanpa harus membayar alias gratis. MongoDB memiliki fitur data sharding otomatis, sehingga memiliki keunggulan dalam hal scaling out database. Dengan fitur ini, kita hanya perlu menambahkan server baru pada cluster database yang kita gunakan saat kita butuh kapasitas yang lebih besar. MongoDB juga dapat diakses dengan berbagai bahasa program modern seperti halnya Javascript dan Java.


Ref:
MongoDB.com
"MongoDB: The Definitive Guide, second Edition", Kristina Chodorow, O'Reilly 2013.
"MongoDB for Java Developers", Francesco Marchioni, Packt Publishing 2015.

No comments: