Berkenalan dan Belajar MongoDB pada Windows 8 | M Reza Faisal

reza

full-time(software-developer,lecturer); part-time(traveller, food-tester);

Berkenalan dan Belajar MongoDB pada Windows 8

May 4, 2014 by     4 Comments    Posted under: I am Software Developer

Sudah pernah mendenger atau menggunakan MySQL, PostgreSQL, Oracle atau Microsoft SQL Server? Sudah pernah mendengar, belajar atau memakai SQL (Structure Query Language) ? Sebagaimana yang telah kita ketahui, secara sederhana MySQL, PostgreSQL, Oracle dan Microsoft SQL Server sering disebut sebagai database engine atau database server atau RDBMS. Dan kita juga telah mengetahui untuk mengakses data yang disimpan data database engine tersebut biasanya digunakan SQL seperti untuk menampilkan data, insert data, update data dan menghapus data.

Dan tentunya sudah tidak asing lagi jika melihat baris-baris di bawah ini :

SELECT *

FROM  Book

WHERE price > 100.00

ORDER BY title;

atau :

INSERT INTO example (field1, field2, field3) VALUES ('test', 'N', NULL);

 

UPDATE example SET field1 = 'updated value' WHERE field2 = 'N';

 

DELETE FROM example WHERE field2 = 'N';

{MongoDB}

Mungkin akhir-akhir ini sebagian kita sudah sering mendengar MongoDB. Apakah ini RDBMS baru? Apakah untuk akses datanya juga menggunakan SQL? Untuk menjawab semua itu sebaiknya kita langsung praktek saja, yang terlebih dahulu dimulai dengan proses installasi.

Untuk file installasi MongoDB dapat diunduh di : http://www.mongodb.org/downloads.

blog1

Terdapat pilihan antara file bertipe zip atau msi yang dapat langsung dijalankan sebagai installer. 

blog2

Dan lingkungan OS yang digunakakan adalah Windows 8 Pro 64-bit.  Proses instalasi dapat dipilih tiga tipe yaitu typical, custom dan complete (kalau tidak salah itu saat install pertama, maaf tidak ada screenshot karena sudah keburu install sebelum menulis blog) setelah mengikuti petunjuk installasi maka source installer sebesar 135an mb ini selesai diinstall dengan kebutuhan space setelah installasi kurang lebih 250an (ini menurut perhitungan folder installasi di windows explorer). 

Setelah proses installasi selesai jangan repot-repot untuk mencari shortcut ya…karena kemungkinan “BESAR” tidak ada. Untuk menjalankan perlu dilakukan pada command prompt untuk menjalankan file-file pada folder bin yang berada di dalam folder hasil installasi.  Pada contoh di bawah ini berada pada folder : C:\Program Files\MongoDB 2.6 Standard\bin. Untuk kasus 32-bit kemungkinan akan disimpan pada folder C:\Program Files (x86)\MongoDB 2.6 Standard\bin

blog3

Ada dua file utama dan penting dari daftar file tersebut di atas, yaitu :

  1. mongod.exe, bagi pengguna linux pasti sering melihat file-file seperti httpd, ftpd atau mysqld yang biasanya adalah file yang berfungsi sebagai daemon atau service. Begitu juga dengan file mongod.exe ini adalah aplikasi daemon atau service yang ketika dijalankan maka mongodb server akan aktif dan siap melayangi permintaan client.
  2. mongo.exe, adalah aplikasi client mongodb.

Selain folder bin, juga terdapat folder data yang berfungsi sebagai folder untuk menyimpan file data, walau kita dapat secara bebas menentukan folder untuk menyimpan data saat menjalankan service mongod.exe.

blog4

{Service mongod}

Untuk menjalankan service terlebih dahulu kita menjalankan Command Prompt (cmd) dengan mode “Run as administrator”.

blog5

Karena saya ingin file data akan disimpan pada c:\mongodb\data maka terlebih dahulu bisa dibuat folder tersebut.  Setelah itu pada command prompt dapat diketikan perintah untuk menuju folder C:\Program Files\MongoDB 2.6 Standard\bin. Kemudian ketik perintah :

 

mongod.exe --dbpath c:\mongodb\data

 

Perhatikan opsi –dbpath sesuai dengan folder yang telah dibuat sebelumnya. Setelah proses menjalankan selesai, kemungkinan akan dapat dilihat windows dialog confirmasi untuk mengijinkan pengaktifan service ini. Berikut adalah hasil pada layar cmd ketika service telah dijalankan.

blog6

Untuk menjalakankan service ini diperlukan sekitar 3GB space di HD di drive path db tersebut berada.  Hal ini dapat dilihat akan dibuat folder journal yang berisi file tiga file sebesar masing-masing 1GB. Journal ini secara sederhana dapat dijelaskan sebagai media untuk logging dan juga dapat berfungsi untuk “mengamankan” operasi akses database oleh user. 

Kemudian kita dapat menjalan satu window cmd lagi untuk menjalankan aplikasi client mongo.exe.

blog7

Pada gambar di atas dapat dilihat kita sudah masuk ke shell mongodb dan sudah terkoneksi ke “database” dengan nama “test”.

{Database & Collection}

Setelah menjalankan aplikasi client mongo.exe, maka kita memiliki shell mongodb dan dapat mengetikkan perintah untuk akses data ataupun untuk administrasi.

Bagi yang telah terbiasa akses mysql atau postgresql via shell, maka setelah kita memiliki akses ke shell mongodb seperti pada gambar di atas maka yang ingin dilakukan pertama kali adalah  membuat atau menggunakan “database”. Perintah yang dapat digunakan untuk itu adalah :

 

use [nama_db]

 

contoh :

MongoDB shell version: 2.6.

connecting to: test

> use IlkomUnlamDB

switched to db IlkomUnlamDB

Hmm….padahal belum ada database dengan nama IlkomUnlamDB, tapi terlihat pada output perintah tersebut adalah berhasil dilakukan. Apakah database IlkomUnlamDB secara otomatis dibuat? Jika kita cek ke folder c:\mongodb\data maka kita “belum” melihat ada tanda-tanda keberadaan database dengan nama IlkomUnlamDB tersebut.

Bagaimana jika kita coba masukkan beberapa data baru dengan cara seperti berikut :

   1: > a = { name : "mongo"}

   2: { "name" : "mongo" }

   3: > b = { type : "db"}

   4: { "type" : "db" }

   5: > db.IlkomUnlamDB.insert(a)

   6: WriteResult({ "nInserted" : 1 })

   7: > db.IlkomUnlamDB.insert(b)

   8: WriteResult({ "nInserted" : 1 })

Pada baris ke-1 dan ke-3, secara sederhana dapat dijelaskan seperti membuat objek dengan nama a dan b dengan property dan nilai seperti yang terlihat pada kedua baris tersebut.  Sedangkan pada baris ke-5 dan ke-7 adalah secara sederhana dapat dijelaskan sebagai cara untuk menambah data a dan b ke dalam suatu collection.  Dimana nama collection yang akan menyimpan data tersebut adalah “IlkomUnlamDB”. Jika pada shell tersebut ditambahkan data dengan cara berikut di bawah ini :

> m1 = { "nim" : "123", "nama" : "reza"}

{ "nim" : "123", "nama" : "reza" }

> m2 = { "nim" : "234", "nama" : "faisal"}

{ "nim" : "234", "nama" : "faisal" }

> db.Mahasiswa.insert(m1)

WriteResult({ "nInserted" : 1 })

> db.Mahasiswa.insert(m2)

WriteResult({ "nInserted" : 1 })

Cara di atas ini adalah cara untuk memasukkan data m1 dan m2 ke dalam collection dengan nama “Mahasiswa”.  Sehingga jika dijalakan perintah di bawah ini, dapat dilihat terdapat dua collection yaitu IlkomUnlamDB dan Mahasiswa.

> show collections

IlkomUnlamDB

Mahasiswa

system.indexes

>

Selanjutnya setelah proses tersebut di atas baru dapat kita lihat penampakan file IlkomUnlamDB pada folder c:\mongodb\data.

blog8

Perintah-perintah dasar lain yang dapat digunakan pada shell ini adalah :

   1: > help

   2:         db.help()                    help on db methods

   3:         db.mycoll.help()             help on collection methods

   4:         sh.help()                    sharding helpers

   5:         rs.help()                    replica set helpers

   6:         help admin                   administrative help

   7:         help connect                 connecting to a db help

   8:         help keys                    key shortcuts

   9:         help misc                    misc things to know

  10:         help mr                      mapreduce

  11:  

  12:         show dbs                     show database names

  13:         show collections             show collections in current database

  14:         show users                   show users in current database

  15:         show profile                 show most recent system.profile entries with time >= 1ms

  16:         show logs                    show the accessible logger names

  17:         show log [name]              prints out the last segment of log in memory, 'global' is default

  18:         use <db_name>                set current database

  19:         db.foo.find()                list objects in collection foo

  20:         db.foo.find( { a : 1 } )     list objects in foo where a == 1

  21:         it                           result of the last line evaluated; use to further iterate

  22:         DBQuery.shellBatchSize = x   set default number of items to display on shell

  23:         exit                         quit the mongo shell

contoh perintah lain adalah perintah berikut untuk menampilkan database.

> show dbs

IlkomUnlamDB  0.078GB

admin         (empty)

local         0.078GB

mydb          0.078GB

test          0.078GB

Dari contoh di atas telah telah diketahui cara untuk membuat database dan collection, dimana database dan collection dapat dibuat secara otomatis jika telah ada data yang disimpan pada collection.  Tetapi juga tersedia perintah untuk membuat collection dengan menggunakan perintah dengan sintaks berikut ini :

 

db.createCollection(nama_collection, opsi)

 

Opsi yang dapat digunakan dalam perintah itu adalah :

  1. capped (boolean).
  2. autoIndexId (boolean).
  3. size (number).
  4. max (number).

Yang lebih lengkapnya dapat dilihat pada halaman berikut http://docs.mongodb.org/manual/reference/method/db.createCollection/.

Sedangkan untuk menghapus collection dapat menggunakan cara seperti berikut ini :

 

db.getCollection("nama_collection").drop()

 

Catatan :

Hati-hati terjebak dengan pola pikir relation database yang telah kita kenal sebelumnya ya. Jangan berpikir jika kita harus selalu membuat collection untuk menyimpan data yang “sejenis” dan jangan juga berpikir nanti antar data pada masing-masing collection harus direlasikan. Tidak harus seperti itu! Pola pikir kita mesti diubah sedikit dan agak menjauh dari pola pikir yang tertanam ketika menggunakan SQL atau RDBMS. :)

Semoga pada bagian berikutnya di bawah ini, hal ini dapat lebih dimengerti.

Nah setelah melihat paparan di atas, maka kita sudah punya gambaran singkat mengenai mongodb, dan dipastikan kita akan punya kesimpulan awal bahwa mongodb berbeda dengan RDBMS yang telah kita kenal sebelumnya.  Untuk itu pada bagian ini akan dijelaskan secara singkat dan sederhana mengenai konsep yang berhubungan dengan mongodb ini.

Sebagai informasi, bagi yang sudah terbiasa dengan pemrograman berbasis objek dan sering bermain dengan penanganan collection mungkin hal itu akan menjadi modal untuk dapat mengerti dengan lebih mudah konsep data model dari mongodb.  Berikut ini adalah beberapa hal yang membedakan antara SQL pada RDBMS yang telah kita kenal dengan mongodb.

Konsep SQL Konsep MongoDB
database database
tabel (table) collection
row dokumen
kolom (column) field
index index
join tabel hubungan antar dokumen (embedded documents)
primary key, biasanya ditentukan oleh pembuat tabel primary key, secara otomatis diberikan dg nama field _id
aggregation, seperti where, count, limit, order by dan lain-lain aggregation pipeline, akan digunakan operator yang berfungsi untuk menggantikan aggregation yang telah kita kenal pada konsep SQL. Contoh operator tersebut adalah $match untuk pengganti where, $sort untuk pengganti order by, dan lain-lain.

{Document & Field}

Dari daftar di atas, maka kita dapat kita buat sedikit kesimpulan bahwa pada mongodb akan memiliki database dimana di dalamnya terdiri atas collection, dimana di dalam collection akan terdapat banyak dokumen.  Untuk menjelaskan hal itu maka bisa dilihat contoh dan gambar di bawah ini.

Sintaks :

{

   field1: value1,

   field2: value2,

   field3: value3,

   ...

   fieldN: valueN

}

Sebagai contoh dari sintaks di atas adalah dapat dilihat dari contoh dokumen sederhana di bawah ini.

blog11

Sedangkan pada contoh dokumen dibawah ini dapat dilihat bagaimana dokumen dapat saling terhubung (jika tidak bisa dibilang sebagai relasi :P)

Contoh Data 1:

   1: {

   2:    _id: "joe",

   3:    name: "Joe Bookreader"

   4: }

   5:  

   6: {

   7:    patron_id: "joe",

   8:    street: "123 Fake Street",

   9:    city: "Faketon",

  10:    state: "MA",

  11:    zip: "12345"

  12: }

Contoh Data 2 :

   1: {

   2:    _id: "joe",

   3:    name: "Joe Bookreader",

   4:    address: {

   5:               street: "123 Fake Street",

   6:               city: "Faketon",

   7:               state: "MA",

   8:               zip: "12345"

   9:             }

  10: }

Dari Contoh Data 1 dapat dilihat terdapat dua dokumen yang ada hubungan relasi secara data yang dapat dilihat dari nilai field _id dan patron_id.  Contoh Data 1 tersebut sebenarnya dapat disederhanakan seperti yang terlihat pada Contoh Data 2, dimana ada “relasi” disisipkan langsung kedalam dokumen seperti yang terlihat pada baris ke-4 sampai ke-9.

Atau dapat juga diilustrasikan seperti gambar di bawah ini.

blog9

 

blog10

Dari paparan di atas telah dikenalkan sedikit mengenai document, dimana jika diperhatikan format dokumen di atas seperti format JSON.  Dari contoh di atas telah di dapat pengetahuan dasar tentang dokumen dan field.  Dari contoh di atas, dokumen dapat langsung dimasukkan ke dalam collection TANPA terlebih dahulu membuat spesifikasi dokumen yang diinginkan (analogi RDBMS : menyiapkan tabel dan kolom kemudian input data).  Collection akan dapat menyimpan berbagai macam dokumen walaupun field-field dokumen tersebut berbeda-beda seperti pada contoh di bawah ini (berbeda dengan RDBMS : dimana data yang dimasukkan ke dalam tabel harus sesuai dengan spesifikasi yang telah ditentukan saat membuat tabel pertama kali).

   1: > db.IlkomUnlamDB.find()

   2: { "_id" : ObjectId("53647c8e219bb12e063dcba9"), "name" : "mongo" }

   3: { "_id" : ObjectId("53647c91219bb12e063dcbaa"), "type" : "db" }

   4: { "_id" : "joe", "name" : "Joe Bookreader" }

   5: { "_id" : ObjectId("5365bcf0d0892bc9d475be46"), "patron_id" : "joe", "street" : "123 Fake Street", "city" : "Faketon", "state" : "MA", "zip" : "12345" }

   6: { "_id" : "jhon", "name" : "Jhon Bookreader", "address" : { "street" : "123 Fake Street", "city" : "Faketon", "state" : "MA", "zip" : "12345" } }

   7: >

Dari contoh-contoh di atas dapat dilihat juga field _id yang berfungsi sebagai primary key dari data.  Jika saat menyimpan dokumen yang dimasukkan ke dalam collection tidak memiliki field _id maka secara otomatis field tersebut akan diberikan seperti pada contoh baris ke 2, 3 dan 5.  Sedangkan jika dokumen telah memiliki field _id maka nilai tersebut akan menjadi primary key seperti yang terlihat pada baris ke 4 dan 6.

{CRUD}

Pada bagian ini akan dijelaskan bagaimana cara dasar untuk melakukan hal dasar yaitu create, retrieve, update dan delete dokumen. Untuk CREATE atau insert dokumen dapat digunakan perintah dengan sintaks seperti berikut ini :

 

db.nama_collection.insert( dokumen )

 

Sebagai contoh perintah di bawah ini, yang berfungsi untuk menyimpan dokumen ke dalam collection Mahasiswa dengan _id yang ditentukan sendiri.

> db.Mahasiswa.insert( { _id: "123", nama : "adi", jurusan: "ilkom", umur: 20 })

WriteResult({ "nInserted" : 1 })

Untuk RETRIEVE / menampilkan dokumen yang ada di dalam collection dapat digunakan perintah dengan sintaks seperti berikut :

db.nama_collection.find()

Sebagai contoh untuk menampilkan dokumen yang ada di dalam collection Mahasiswa dapat dilakukan dengan perintah berikut ini :

> db.Mahasiswa.find()

{ "_id" : "123", "nama" : "adi", "jurusan" : "ilkom", "umur" : 20 }

Untuk UPDATE dokumen dapat digunakan sintaks perintah berikut ini :

db.nama_collection.save(dokumen)

Sebagai contoh untuk mengupdate dokumen yang telah dimasukkan sebelumnya bisa digunakan perintah berikut ini :

> db.Mahasiswa.save( { _id: "123", nama : "adi a", jurusan: "ilkom", umur: 20 })

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.Mahasiswa.find()

{ "_id" : "123", "nama" : "adi a", "jurusan" : "ilkom", "umur" : 20 }

Dengan perintah ini, walau hanya ingin mengupdate field nama saja tetapi field-field lain juga harus ditulis lengkap, jika misalnya hanya dituliskan field nama saja tanpa field-field yang lain maka hasilnya akan dapat dilihat pada contoh di bawah ini.

> db.Mahasiswa.save( { _id: "123", nama : "adi b"} )

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

> db.Mahasiswa.find()

{ "_id" : "123", "nama" : "adi b" }

>

Perintah lain yang dapat digunakan untuk UPDATE dengan sintaks seperti berikut :

db.nama_collection.update(query, update, options)

Sebagai contoh :

> db.Mahasiswa.update( { _id : "123" }, {nama : "adi s", jurusan : "ilkom", umur : 21}, { upset : false})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.Mahasiswa.find()

{ "_id" : "123", "nama" : "adi s", "jurusan" : "ilkom", "umur" : 21 }

>

Dengan perintah update ini dimungkinkan melakukan update terhadap lebih dari satu dokumen secara bersamaan, tergantung dengan nilai query yang diberikan.  Pada contoh di atas nilai query nya adalah berdasarkan nilai _id yang bersifat unik.  Jika nilai querynya adalah jurusan beserta nilainya misal { jurusan : “ilkom” } maka semua dokumen yang mempunyai field jurusan dengan nilai “ilkom” akan di update asal dibarengi dengan nilai option { multi : true}.  Berikut adalah contohnya :

> db.Mahasiswa.update( { jurusan : "ilkom" }, {nama : "adi s", jurusan : "ilkom", umur : 21}, { multi : true})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Perintah update dengan cara di atas juga mempunyai mempunyai prilaku yang serupa dengan perintah save sebelumnya, dimana jika semua field harus dituliskan pada bagian update.  Jika ingin proses update hanya untuk field tertentu saja tanpa harus menuliskan seluruh field yang ada pada dokumen maka dapat digunakan perintah berikut ini :

> db.Mahasiswa.update( { _id : "123" }, { $set : { nama : "adi sentosa" }}, {upset : false})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.Mahasiswa.find()

{ "_id" : "123", "nama" : "adi sentosa", "jurusan" : "ilkom", "umur" : 21 }

Untuk mengetahui perintah ini lebih lengkap dapat berkunjung ke : http://docs.mongodb.org/manual/reference/method/db.collection.update/#db.collection.update.

Selanjutnya adalah perintah DELETE yang mempunyai sintaks seperti berikut :

db.nama_collection.remove(query)

Sebagai contoh untuk menghapus seluruh data pada collection Mahasiswa dapat digunakan perintah ini :

db.Mahasiswa.remove({})

Untuk menghapus dokumen dengan query yang diinginkan dapat menggunakan perintah berikut ini :

   1: db.Mahasiswa.remove({ _id = "123"})

   2:  

   3: db.Mahasiswa.remove({ jurusan = "ilkom"})

   4:  

   5: db.Mahasiswa.remove({ jurusan = "ilkom"}, 1)

Terdapat kemiripan antara baris ke-3 dan ke-5, bedanya adalah pada baris ke-3 akan menghapus seluruh data yang nilai field jurusan adalah ilkom, sedangkan pada baris ke-5 hanya akan menghapus 1 dokumen saja.

{Kesimpulan}

Kesimpulannya singkat saja dan cukup 1 kata yaitu : NoSQL.

Pada mongodb tidak dilihat lagi SQL, yang ada hanya “seperti” bermain objek dan menggunakan method-method yang dimiliki oleh objek tersebut.  Posting ini hanya posting awal aja untuk jabat tangan untuk berkenalan dengan mongodb.  Masih banyak hal-hal yang masih bisa dibahas dan digali pada mongodb, sebagai contoh saja untuk proses RETRIEVE masih banyak yang perlu dibahas, selain itu juga ada bahasa topik lain seperti :

  1. Konsep.
  2. Administrasi.
  3. Index.
  4. Replication.
  5. dan lain-lain.

Dan mungkin bisa dijadikan sebuah buku misalnya :)

cover-resize

Seperti biasa yang penting bikin covernya dulu, nulisnya harus menunggu mood dulu. Tapi semoga ada waktu untuk menulis ini :)

{Referensi}

  1. http://docs.mongodb.org
  2. Manning – MongoDB in Action

4 Comments + Add Comment

  • […] : http://www.rezafaisal.net/?p=1253. Posted May 04 2014, 08:06 PM by reyza Filed under: MongoDB, Windows 8 MUGI | […]

  • gan untuk 32 bit downloadnya gimana yah? ane udah download untuk versi 32 bit pas dijalanin malah begini “This version of E:\mongodb\bin\mongod.exe is not compatible with the version of
    Windows you’re running. Check your computer’s system information and then contac
    t the software publisher.”

  • Saya sudah terlanjur memakai MySQL di dalam database Rumahb.com
    Lebih ringan mana MysQL dan MongoDB

    dan bagaimana caranya ngecek hosting saya support MonggoDB ?

    Terima kasih mohon penjelasannya

  • Thanks for your posting, its very usefull all people in Indonesia

Got anything to say? Go ahead and leave a comment!

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Fotolia

Fotolia

ShutterStock


Fotolia
© 2013 eSevens
%d bloggers like this: