NoSQL dan RDBMS
NoSQL (Not Only SQL)
NoSQL adalah sebuah konsep mengenai
penyimpanan data non-relasional. Berbeda dengan model basis data relasional
yang selama ini digunakan, NoSQL menggunakan beberapa metode yang berbeda-beda
( Wikipedia ). Metode ini bergantung dari
jenis database yang digunakan. Karena NoSQL sendiri merupakan konsep database,
dan pada implementasinya, banyak jenis-jenis dari NoSQL ini.
NoSQL sangat berguna pada data-data yang
terus-menerus berkembang, dimana data tersebut sangat kompleks sehingga
sebuah database relational tidak lagi bisa mengakomodir. Salah satu bentuknya
adalah ketika suatu data saling berhubungan satu sama lain, maka akan muncul
proses duplikasi data. Dimana data saling memanggil ke beberapa permintaan,
tambahan data baru, perubahan data, dan lain-lain dengan key yang sama. Karena
faktor hubungan antar data yang sama terjadi terus-menerus, mendorong faktor
redudansi data, data menjadi berlipat-lipat, dan pada akhirnya akan menyebabkan
crash pada database berkonsep RDBMS.
Harus ada cara lain untuk menanggulangi
masalah ini, dan NoSQL lah solusinya. NoSQL menyederhanakan proses
yang terjadi dalam sistem basis data relasional. Dimana hal-hal yang
menyebabkan redudansi, dihilangkan sehingga trafik server akan
seimbang. Penyederhanaan proses ini memungkinkan data direplikasi di
banyak server secara mudah dan menjamin ketersediaan data.
Contoh nyata penjelasan diatas bisa
teman-teman lihat pada situs jejaring sosial, FACEBOOK.COM.
Pernahkah berfikir sebesar apa server penyimpanan facebook dengan anggota
ribuan orang tersebut ?. Apabila teman-teman alim, mungkin tidak jadi masalah,
tapi bagaimana jika ada yang narsis lalu sering upload foto setiap hari ?,
bagaimana kalau setengah dari member facebook adalah orang-orang yang narsis ?,
berapa besar ukuran yang dibutuhkan facebook pada servernya ?
RDBMS(Relational Database Management System)
Sebuah sistem manajemen basisdata
relasional atau dalam bahasa Inggrisnya dikenal sebagai relational database
management system (RDBMS) adalah sebuah program komputer (atau secara lebih
tipikal adalah seperangkat program komputer) yang didisain untuk
mengatur/memanajemen sebuah basisdata sebagai sekumpulan data yang disimpan
secara terstruktur, dan melakukan operasi-operasi atas data atas permintaan
penggunanya.
Contoh penggunaan DBMS ada banyak sekali
dan dalam berbagai bidang kerja, misalnya akuntansi, manajemen sumber daya
manusia, dan lain sebagainya. Meskipun pada awalnya DBMS hanya dimiliki oleh
perusahaan-perusahaan berskala besar yang memiliki perangkat komputer yang
sesuai dengan spesifikasi standar yang dibutuhkan (pada saat itu standar yang
diminta dapat dikatakan sangat tinggi) untuk mendukung jumlah data yang besar,
saat ini implementasinya sudah sangat banyak dan adaptatif dengan kebutuhan
spesifikasi data yang rasional sehinggal dapat dimiliki dan diimplementasikan
oleh segala kalangan sebagai bagian dari investasi perusahaan.
Tiga prinsip dalam RDBMS :
Data definition
Mendefinisikan jenis data yang akan
dibuat (dapat berupa angka atau huruf), cara relasi data, validasi data dan
lainnya.
Data Manipulation
Data yang telah dibuat dan didefinisikan
tersebut akan dilakukan beberapa pengerjaan, seperti menyaring data, melakukan
proses query, dsb.
Data Control
Bagian ini berkenaan dengan cara
mengendalikan data, seperti siapa saja yang bisa melihat isi data, bagaimana
data bisa digunakan oleh banyak user, dsb.
Implementasi
NoSql (CRUD)
Alasan penggunaan model basis data NOSQL
didasari oleh berbagai kebutuhan akan beberapa hal yaitu :
1. Data
Store (Penyimpanan Data) : Dimana data disimpan dalam ukuran dalam ukuran
Exabyte. Sebuah Exabyte sama dengan satu milyar Gigabytes (GB) data. Menurut
internet.com , jumlah tambahan data yang disimpan pada tahun 2010 adalah 1.000
exabyte hanya 4 tahun kemudian pada tahun 2014, jumlah data yang disimpan
hampir mencapai 50.000 exabyte ,itu artinya terjadi peningkatan yang sangat
luar biasa. Dengan kata lain, ada banyak data yang disimpan di dunian dan akan
terus tumbuh.
2. Interconnected
Data (Data yang saling berhungan) : sehingga data diseluruh dunia menjadi
terhubung. Pembuatan web didukung dengan adanya hyperlink, blog memiliki
pingbacks dan setian system jaringan utama social memiliki tag yang mengaitkan
sesuatu dengan yang lainya. System utama yang dibangun untuk saling
berhubungan.
3. Complex
Data structure (struktur data yang rumit) : dalam hal ini berarti NoSQL dapat
dengan mudah menangani struktur hierarkis data bersarang . sedangkan SQL pada
RDBMS, hal ini rumit dan sulit dilakukan, karena butuh beberapa table
relasional dengan berbagai macam kunci. Selain itu, ada hubungan antara kinerja
dengan kompleksitas data.
NoSQL memiliki banyak kelebihan ,
diantaranya adalah :
1. Mudah
digunakan pada convensional load-balanced cluster
2. Data
yang tetap (Persitent data) , tidak sekedar cache yang selalu diupdate
3. Dapat
dilakukan pengukuran terhadap ketersediaan memory
4. Tidak
ada skema tetap dan memungkinkan migrasi skema tanpa downtime
5. Memiliki
system query sendiri
6. Bersifat
ACID (Atomicity, Consistency, Isolation, Durability)
Basis data NoSQL dapat dibagi menjadi 4
kategori dasar yaitu :
1). Key Values stores :
adalah suatu hash table yang memiliki key unik dan pointer ke item tertentu
data. Pemetaan ini biasanya diikuti oleh mekanisme cache untuk memaksimalkan
kinerja. Contohnya pada Tokyo Cabinet, Redis, Voldemort, Oracle BDB. Jenis
aplikasi yang dapat menggunakannya adalah Aplikasi Content Caching, sedangkan
contoh penerapanya apikasinya adalah pada pembuatan forum software, dimana
terdapat sebuah home profile page yang memiliki statistic apa
yang telah dilakukan oleh user / penggunanya.
2). Column Family stores :
adalah tempat yang digunakan untuk menyimpan dan memproses jumlah data yang
sangat besar, yang tersebar di berbagai lokasi. Disini masih terdapat beberapa
key, tapi untuk mengacu ke multiple column. Dalam hal ini BigTable (model dari
Column Family NoSQL milik Google), baris diidentifikasikan oleh suatu baris key
dengan data yang terurut dan disimpan oleh key tersebut.
3). Document Databases :
diinpirasikan oleh Lotus Notes dan mirip dengan Key-Values Stores, model ini
pada dasarnya merupakan dokumen yang menyimpan kumpulan Key-Values
Collections. Dokumen yang semi terstruktur disimpan dalam format seperti
JSON, contohnya adalah CouchDB dan MongoDB. Jenis aplikasi yang menggunakanya
adalah Aplikasi Web.
4). Graph Databases :
adalah suatu baris data yang dibangun oleh kumpulan node , relasi antara notes
dan karakteristik node. Pada basis data ini tidak digunakan table yang terdiri
dari baris dan kolom serta SQL yang kaku, tetapi memakai model graf yang dapat
diterapkan di berbagai mesin. Contoh dari basis data graf (Graph Databases)
adalah Neo4J, InfoGrid dan InfiniteGraph. Aplikasi yang menggunakannya biasanya
aplikasi yang bersifat Social Networking seperti facebook dan
twitter (Tim Perdue, 2013).
Gambar berikut adalah perbedaan cara kerja
NoSQL dengan RDBMS dalam hal pendistribusian data :
Pada gambar diatas terlihat bahwa dengan
menggunakan NoSQL , data dapat didistribusikan dan secara otomatis melalui database
nodes , sekaligus juga dapat mencatat data tersebut. Jika kita ingin
mencatat dan menyimpan data ke 20 entitas pada suatu database cluster dengan 3
nodes maka mungkin saja data tersebut dicatat di semua nodes. Database tidak
perlu melakukan singkronisasi antar node terlebih dahulu, juga tidak memerlukan
2 fase commit, dan client 1 dapat melihat perubahan pada node 1 sebelum client
2 selesai menulis ke 20 entias. Sedangkan pada RDBMS hal tersebut tidak dapat
dilakukan.
Selain kemudahan dalam proses pendistribusian
data , pada basis data NoSQL juga terdapat beberapa kelemahan – kelemahan ,
diantaranya :
1. Pada
basis data NoSQL sering terjadi data yang tidak konsisten , karena pada
mayoritas basis data No SQL digunakan pada aplikasi yang harus menyimpan dan
memproses banyak data dengan cepat seperti website jejaring social, mesin
pencari dan lain sebagainya. Sebagai konsekuensi dari pilihan tersebut, NoSQL
mengorbankan kemudahan untuk konsistensi data. Ketidakkonsistenan sebuah basis
data dapat menyebabkan kesalahan yang sangat fatal dalam beberapa kasus.
Sebagai contoh dalam sebuah aplikasi penjualan online seperti Amazon saat
ada dua atau lebih pembeli yang melakukan transaksi pembelian pada barang yang
sama, pada system basis data yang tidak konsisten akan mengijinkan kedua
transaksi tersebut. Akibatnya, apabila stok barang yang bersangkutan hanya
satu, maka salah satu pembeli akan dirugikan karena validasi transaksi dan
pembayaran tetap berhasil, namun barang tidak tersedia. Meskipun aplikasi yang
menggunakan basis data NoSQL dapat merekayasa konsistensi data melalui
pemrograman, dengan cara membuat middleware layer ( solusi xiang [25] ) yang
menggunakan algoritma hash untuk mempartisi dan mereplikasi data. Algoritma
yang digunakan dapat memastikan konsistensi pada basis data NoSQL yang
terpartisi pada beberapa node, bahkan mampu mengidentifikasi jika ada salah
satu node server yang hilag (rusak atau tidak terhubung). Sayangnya solusi
semacam ini juga mengakibatkan menurunnya performa server dan meningkatnya
waktu pemrosesan query.
2. NoSQL
merupakan sebuah implementasi sub-optimal , karena menggunakan paradikma brute
force untuk pemrosesan data, bukan menggunakan indexing yang
lebih baik.
3. Tidak
menyediakan fitur yang sudah banyak digunakan oleh pengembang yang menggunakan
basis data relasional.
4. Tidak
kompatibel dengan perangkat – perangkat yang sudah biasa digunakan oleh
pengguna.
5. Masih
sedikitnya tenaga professional yang benar – benar memahami konsep basis data
NoSQL (non relasional) , karena konsep basis data ini relative masih baru jika
dibandingkan dengan basis data relasional yang sudah berjalan berpuluh – puluh
tahun.
Konsep utama dari penerapan NoSQL adalah
bagaimana mengatasi jumlah data yang sangat besar dan ledakan data dalam
aplikasi web sebagai paradikma baru dalam penerapan basis data. Permasalahan
dalam RDBMS mengenai skalabilitas dan partisi data , dapat diatasi menggunakan
NoSQL , NoSQL memiliki beberapa keunggulan seperti basis data non-relasional
(meliputi hierarki, graph dan basis data object oriented) , mapreduce yang
diambil dari fungsi pemrograman diterapkan untuk menghasilkan data set yang
besar, schema free yang memungkinkan dimana tidak terdapat table, kolom, kunci
primer dan sekunder, join dan relasi. Horizontal scallingyang
memungkinkan basis data untuk dijalankan di beberapa server untuk meningkatkan
penyimpanan dan peningkatan waktu akses untuk mengatasi permasalahan banyaknya
data.
NoSQL merupakan alternatif dari RDBMS
dalam hal pendistribusian data , bukan penanganan masalah secara keseluruhan
terutama transaksi yang tinggi dan bersifat sensitif, NoSQL tidak menerapkan
konsistensi dan integritas data , hal ini membuat programmer harus bekerja
ekstra untuk mengatasinya dari sisi pemrograman.
Mengenal
MongoDB
MongoDB merupakan sebuah sistem basis
data yang berbasis dokumen (Document Oriented Database). Konsep ini
sangat membingungkan kalo kita terbiasa dengan RDMS.MongoDB tidak ada yang
namanya tabel, kolom dan baris. Dalam MongoDB yang ada hanyalah koleksi
(collection – bisa dianggap Table) dan dokumen (document – bisa dianggap row).
Koleksi dalam MongoDB bisa kita anggap sebuah Folder (Directory) dan Dokumen
bisa kita anggap berkas (File) dalam Folder (Koleksi) tersebut.
Pada MongoDb kita tidak mengenal
istilah RELASI karena kita befikir dalam kerangka dokumen.
semua yang kita butuhkan diletakkan didalam sebuah dokumen.
KELEBIHAN MongoDB
MongoDB merupakan sistem basis data yang
menggunakan konsep key-value, artinya setiap dokumen dalam MongoDB pasti
memiliki key. Hal ini berbeda dalam RDMBS yang kita bisa tidak menggunakan
primary key ketika membuat sebuah tabel. Sehingga walaupun kita membuat sebuah
dokumen tanpa menggunakan primary key, tapi secara otomatis MongoDB memberinya
sebuah key. Penggunaan konsep key-value sangat berperan penting, karena hal ini
membuat MongoDB menjadi sistem basis data yang sangat cepat jika dibandingkan
dengan non key-value seperti RDBMS.
MongoDB mendukung replikasi, selain itu
konfigurasi replikasi pada MongoDB sangatlah mudah jika dibandingkan sistem
basis data RDBMS (IMHO). Hal ini membuat pemilik sistem yang memiliki traffic
membaca tinggi (seperti portal berita, forum dan blog) akan sangat terbantu
ketika sistemnya akan menggunakan replikasi.
Selain replikasi, MongoDB juga mendukung
sharding. Jika Anda pernah melakukan sharding di RDBMS yang sangat
berdarah-darah , maka akan
sangat kagum dengan sharding di MongoDB. Kapan kita menggunakan sharding? Saat
Anda memiliki website yang sudah sangat besar jumlah penggunanya, datanya
mencapat jutaan giga byte. Anda dapat menggunakan sharding, misal membasis
basis data Anda menjadi per regional.
Salah satu kelebihan MongoDB lainnya
adalah, MongoDB mendukung model pemrograman MapReduce, sebuah konsep yang
sangat fenomenal yang pernah dikeluarkan oleh Google dan saat ini banyak
diimplementasikan seperti pada Apache Hadoop.
MongoDB memiliki banyak sekali kelebihan
yang diantaranya, yaitu:
1. Sangat bagus untuk data list produk, karena MongoDB bisa melakukan searching lebih cepat ketimbang MySql
2. Kita tidak perlu membuat struktur tabel, kita hanya perlu melakukan proses insert maka MongoDB akan otomatis membuatkan struktur tabelnya
3. Proses CRUD (Create, Update, Delete) terasa sangat ringan (waktu saya mencobanya menggunakan PHP)
1. Sangat bagus untuk data list produk, karena MongoDB bisa melakukan searching lebih cepat ketimbang MySql
2. Kita tidak perlu membuat struktur tabel, kita hanya perlu melakukan proses insert maka MongoDB akan otomatis membuatkan struktur tabelnya
3. Proses CRUD (Create, Update, Delete) terasa sangat ringan (waktu saya mencobanya menggunakan PHP)
Bahasa MongoDb
MongoDB tidak menggunakan bahasa yang
biasa digunakan RDBMS (SQL atau PL/SQL). MongoDB menggunakan bahasa BSON,
dimana BSON merupakan singkatan dari Binary JSON. Jika Anda terbiasa
menggunakan JavaScript, pasti tidak akan terlalu sulit menggunakan MongoDB.