Sunday, September 22, 2013

MongoDB Part 1: Pengenalan Document-Oriented MongoDB


Berbeda dengan MySQL, SQL Server atau PostgreSQL yang merupakan database bertipe relational database, MongoDB ini bukanlah termasuk itu. MongoDB adalah salah satu dari database NoSQL, yaitu sebuah konsep penyimpanan data non-relational. Istilah NoSQL ini juga bukan berarti “No SQL”, tapi merupakan kepanjangan dari “Not Only SQL”. Ada beberapa metode berbeda yang dipakai oleh database-database jenis ini untuk stored data, salah satunya adalah metode document-oriented yang digunakan oleh MongoDB.

Beberapa poin penting dari document-oriented dari MongoDB ini adalah:
  • Data unit dari MongoDB dikatakan sebagai document, ini sama dengan row dalam relational database.
  • Koleksi beberapa dokumen disimpan dalam collection, ini sama dengan table dalam relational database.
  • Database merupakan kumpulan dari beberapa collection. MongoDB dapat menerima lebih dari satu database secara independen.
  • MongoDB memiliki javascript shell yang sangat berguna untuk urusan administrasi dan manipulasi data. (ulasan akan saya sambung pada bagian 2 )
  • Data-data document akan dipisah dan kemudian di store ke beberapa komputer cluster (ulasan lengkap mengenai ini akan ada di artikel ini bagian 3)

Document

Diawal dikatakan bahwa unit utama dari database ini adalah document. Document disini merupakan data dengan beberapa key dan value. Struktur data seperti map, hash dan distionary merupakan beberapa bentuk representasi dari document yang kita bicarakan ini. Setiap bahasa pemrograman merepresentasikan dokumen ini berbeda-beda. Namun, di Javascript kita bisa menuliskan sebuah document seperti ini:
{
"title": "Mongodb part II",
"last_modifikasi": "Sat Jul 14 2012 11:30:02 GMT+0700 (WIT)";
"content": "Lorem ipsum dolor sit amet", "pageviews":1
}
Ini tampak seperti kita menulis data dengan format JSON, tapi format penulisan pada MongoDB lebih dikenal dengan nama BSON (Binary JSON). Ada beberapa keuntungan BSON daripada JSON, diantaranya adalah JSON tidak dapat menerima data dengan tipe date, sedangkan BSON dapat. JSON tidak dapat membedakan data integer, double dan float, dia hanya memiliki data dengan tipe data number (Double-precision floating-point format) sedangkan BSON dapat membedakannya, selain itu juga ada beberapa tipe data seperti symbol, regex, dan code yang tidak ada dalam JSON tapi ada di BSON.

Berikut adalah beberapa tipe data yang di support oleh MongoDB:
null: Tipe data ini untuk merepresentasikan null value atau ketidaksediaan key sebuah data
{
"email": "mustofa@mimicreative.net",
"website": null
}
boolean: Hanya ada dua nilai dari boolean, true atau false
{
"username":"mustofa",
"isAktif": true
}
32-bit integer: Tipe data ini tidak dapat digunakan pada javascript shell mongodb, hal ini karena javascript hanya support 64-bit floating point number. Memanipulasi data 32-bit integer pada shell akan di ubah ke bentuk 64-bit floating-point.
64-bit integer: Tipe data ini juga tidak dapat digunakan pada shell mongodb.
64-bit floating point number: Pada shell mongodb, semua number akan di ubah ke bentuk ini 64-bit floating point number
{"x" : 3.14, ”y”: 3}
string: String mongodb sudah menggunakan encoding unicode atau UTF8 (http://en.wikipedia.org/wiki/Unicode)
{"x" : "foobar"}
object id: Objek id yang pasti ada pada tiap document, berukuran 12-byte dan akan digenerate otomatis saat pembuatan document
{"x" : ObjectId()}
date
{"x" : new Date()}
regular expression: Sebuah key document juga bisa berisi regular expression (regex).
{"x" : /foobar/i}
code: Sebuah key document juga dapat menyimpan kode-kode javascript
{"x" : function() { /* ... */ }}
binary data: Tipe data ini tidak dapat dimanipulasi oleh javascript shell.
array: Ini merupakan kumpulan dari beberapa value, tapi yang harus diketahui disini bahwa tiap value dalam satu array boleh berbeda tipe datanya, contoh seperti
{"things" : ["pie", 3.14]}
embedded document: Tipe data ini memiliki arti dokumen yang memiliki atau embbed document lain. Contoh kasus, saya memiliki sebuah dokumen blog post seperti ini
{
"title":"Pengenalan MongoDB Part I",
"author":"Mustofa","content":"Lorem ipsum dolor sit amet"
}
Kalau pada RDBMS kita biasa memisahkan antara tabel post dengan komentarnya. Namun, untuk MongoDB document komentar dapat kita jadikan satu pada document post nya. Hal seperti inilah yang dimaksud dengan embedded document itu.
{
"title":"Pengenalan MongoDB Part I",
"author":"Mustofa",
"comment":
{
"author": "Didik",
"content":"Lorem ipsum dolor sit amet",
"date": new Date(),
}
}
Post document pastinya memiliki lebih dari satu komentar. Sehingga key “comment” seharusnya berbentuk array seperti ini

{ "title":"Pengenalan MongoDB Part I", "author":"Mustofa", "content":"Lorem ipsum dolor sit amet", "comment":[{"author":"John Doe","content”:"Dolor sit amet"},{"author":"Josh","content":"..."}] }

Collections

Jika document dianalogikan sebagai row, maka collection bisa dianalogikan seperti tabel. Analogi lain, collection sebuah folder dengan banyak file sebagai document-nya. Dari dua analogi itu, sudah sangat jelas bahwa collection ini terdiri dari satu atau banyak document independent.

Perlu kita ketahui adalah collection pada MongoDB bersifat schema-free. Ini bertolak belakang dengan RDBMS yang schema-full. Kalau pada MySQL tabel itu harus diinisialisasi dulu seperti jumlah kolom, nama kolom, primary key dan constrain-nya, maka schema-free berarti semua inisialisasi seperti itu tidak ada. Karena sifat schema-free inilah yang disebut sebut mempercepat performa mongodb daripada database jenis relational seperti SQL Server, MySQL ataupun PostgreSQL.

Database

Kumpulan satu atau lebih collection membentuk database. MongoDB bisa memiliki lebih dari satu database yang masing-masing memiliki permission dan masing-masing bisa disimpan pada sebuah file disk yang berbeda. Ini sangat bermanfaat saat anda memiliki beberapa aplikasi dengan banyak user tapi hanya satu server mongodb.

Mengapa harus memakai MongoDB?

Alasan utamanya karena mudahnya mengatur scale database. Scaling database bisa dilakukan dengan dua cara yang pertama scaling up (memperbesar kualitas mesin) dan yang kedua scaling out (partisi data ke beberapa mesin). Untuk sebuah web application yang besar akan sangat tidak efektif jika ditanggung oleh satu mesin. Terlebih lagi kebutuhan akan mesin dengan spesifikasi tinggi juga mahal, maka pilihan yang efektif untuk scaling database adalah dengan mem-partisi data ke beberapa mesin untuk menambah optimalisasi pemrosesan data. Mongodb telah dirancang sejak awal untuk urusan itu. Document-oriented yang dimiliki oleh MongoDB akan secara otomatis membagi data ke beberapa mesin. Penambahan mesin baru bisa dilakukan dengan mudah, cukup memasukkannya ke cluster dan biarkan MongoDB yang mengatur semuanya. Untuk ulasan lengkap tentang scale out ini akan saya tulis pada bagian tiga dari artikel ini.

Kesimpulan

MongoDB adalah salah satu jenis database NoSQL dengan model document-oriented. Mudahnya scaling out menjadikan pilihan tepat untuk web aplikasi yang memiliki traffic tinggi dan memiliki data besar. Tapi perlu dipahami juga adalah database jenis ini tidak menggantikan relational database. Mudahnya scaling out tidak mengartikan bahwa semua data aplikasi cocok memakai mongodb. Diawal dikatakan bahwa model database mongodb bersifat schema-free. Model ini dibangun tanpa relasi, constrain dan transactional process, sehingga sangat tidak tepat memakai mongodb pada aplikasi-aplikasi yang sarat dengan proses transaksi seperti perbankan, pergudangan, atau akunting.

Artikel ini pernah pernah dimuat oleh BisaKomputer.com tertanggal 15 Juli 2012

No comments:

Post a Comment