perlu melakukan query terhadap kedua atau lebih relasitabel. Sebagai contoh, perhatikan Gambar 2,
untuk mengetahui “siapa mengambil matakuliah apa beserta juga nilainya” lengkap dengan nama
yang mengambil matakuliah ditambah nama matakuliah yang diambil, kita mungkin perlu
melakukan
penggabungan tiga
relasitabel sekaligus menggunakan perintah SQL dialek
Oracle 10g
berikut [8, 12, 13]. SELECT
NIM, Nama, No_MK, Nama_MK, Nilai FROM
Mahasiswa NATURAL
JOIN Pengambilan_Matakuliah
NATURAL JOIN Matakuliah Meski penggabungan tabel join di atas bisa
berjalan dengan baik pada setiap sistem basis data relasional,
untuk data
yang jumlah
baris rowrecord-nya sangat banyak, prosesnya akan
berjalan dengan kinerja kecepatan yang relatif rendah, sebab server basis data relasional selalu
akan melakukan pencarian data lookup pada ketiga tabel yang terlibat pada query [1, 3].
NIM Nama
No_MK Nama_MK
Nilai Gambar 3 Struktur Tabel Denormalisasi
Tabel Mahasiswa_Mengambil_Matakuliah
Bagaimana menyelesaikan masalah kinerja di atas? Beberapa praktisi basis data relasional saat merasa
yakin bahwa query di atas dilakukan secara intensif sering melakukan suatu teknik yang
dinamakan
sebagai denormalisasi,
yaitu membentuk suatu tabel yang justru
„tidak normal‟ melanggar
aturan-aturan sistem
basis data
relasional dan mungkin akan mengakibatkan terjadinya
anomali-anomali CRUD
demi menghasilkan kinerja query yang lebih baik [1, 4,
12]. Sebagai contoh, jika query yang didefinisikan di atas dilakukan secara intensif, mungkin para
praktisi basis data akan membuat suatu tabel khusus yang struktur tabelnya seperti terlihat pada
Gambar 3, sehingga kinerja query akan meningkat karena pencarian data lookup hanya dilakukan
pada satu tabel saja.
2. Sistem Non-Relasional Cassandra
Secara ringkas Cassandra lengkapnya : Apache Cassandra
adalah sistem penyimpanan data Data Store
yang bersifat „kode terbuka‟ opensource kodenya dibuka untuk publik oleh
Facebook
pada tahun 2008 dan saat ini digunakan di beberapa situs Web terkenal, seperti
Facebook, Twitter, Cisco , IBM untuk sistem
surat elektroniknya [14, 17, 19, 20, 21]. Sistem penyimpanan data Cassandra memungkinkan data
tersimpan secara tersebar di beberapa komputer yang berbeda distributed, mudah untuk ditambah
datanya hingga jumlah yang sangat banyak membentuk sistem basis data yang berukuran
sangat besar VLDB-Very Large Database, dapat melayani jumlah pengguna yang sangat banyak
multiuser, server basis data dapat ditambahkan dengan cara yang relatif mudah memiliki
skalabilitas
yang tinggi,
memiliki metoda
penanganan kesalahan yang canggih, kinerjanya dengan pengaturan-pengaturan dan konfigurasi-
konfigurasi tertentu
dapat dengan
mudah ditingkatkan,
dan juga
memiliki berbagai
keunggulan lainnya [17, 20]. Meski demikian, tulisan ini tidak bermaksud untuk menjelaskan
keunggulan-keunggulan itu secara lengkap dan mendalam. Alih-alih kita akan secara umum
berusaha secara konseptual dan secara teknik pemrograman
dari arah
aplikasi klien
membandingkannya dengan sistem basis data relasional yang umum digunakan saat ini.
Gambar 4 Struktur Data Kumpulan Kolom Dalam Sistem Cassandra [9]
Cassandra terutama
dikembangkan untuk
mengatasi penurunan kinerja sistem basis data relasional
saat aplikasi-aplikasi
relasional menerima permintaan-permintaan data dari banyak
pengguna misalnya pada aplikasi-aplikasi Web [17, 20]. Cassandra menggunakan model data yang
berbeda dengan sistem basis data relasional. Cassandra menggunakan konsep „kumpulan
kolom‟ column family sebagai pengelompok data
Kunci Baris-1
Kunci Baris-2
Kolom 1 Kolom 2
Kolom 3 Nilai 1
Nilai 2 Nilai 3
Kolom 1 Nilai 1
yang jenisnya serupa [9, 20]. Dari sudutpandang ini, kumpulan kolom pada dasarnya serupa dengan
konsep relasitabel yang dikenal dalam sistem basis data relasional. Dengan demikian, struktur data
yang diadopsi oleh Cassandra adalah kolom yang berisi dengan pasangan namanilai namevalue
dan nilai waktu timestamp saat pasangan namanilai tersebut disisipkan atau diperbaharui.
Selain itu, Cassandra juga mengenal kumpulan kolom sebagai pemuat container untuk baris-baris
yang memiliki himpunan kolom yang serupa tetapi tidak identik [9, 20]. Pada sistem basis data
relasional, kita mendefinisikan nama-nama kolom dalam bentuk string, tetapi pada Cassandra,
pengembang tidak dibatasi dengan aturan ini. Baik kunci baris dan nama kolom dapat berupa string
seperti pada sistem basis data relasional, tetapi dapat juga berupa tipe-tipe data yang lain, misalnya
integer, UUID Universally Unique Identifier, dan sebagainya [9]. Selain itu, hal yang menarik
padaCassandra adalah isi dari suatu kolom. Isi dari suatu kolom tidak harus merupakan hal yang
sederhana
seperti pasangan
namanilai namevalue. Alih-alih kita bisa menyimpan data
pada kunci itu sendiri, tidak hanya pada bagian nilainya. Ini sangat bermanfaat saat kita mau
menambahkan indeks-indeks yang seringkali akan sangat meningkatkan kinerja server data Cassandra.
Menggunakan Cassandra,
kita tidak
perlu menyimpan nilai-nilai pada setiap kolom setiap
saat kita akan menyimpan data untuk sebuah entitas yang baru. Kenyataannya, mungkin saja kita
memang tidak tahu nilai untuk semua kolom yang dimiliki suatu entitas tertentu. Sebagai contoh,
seseorang mungkin memiliki alamat situs Web pribadi, sementara orang-orang yang lainnya tidak;
beberapa orang memiliki nomor fax, orang-orang yang lainnya tidak; dan seterusnya. Alih-alih pada
sistem basis data relasional kita menyimpan nilai
NULL untuk kolom-kolom yang tidak kita ketahui nilainya memboroskan tempat, pada Cassandra
kita tidak diharuskan menyimpan nilai untuk setiap kolom, sehingga struktur data pada Cassandra pada
dasarnya
mirip dengan
„matriks jarang
bermatraberdimensi banyak ‟ multidimensional
sparse matrices, seperti yang diperlihatkan dalam Gambar 4 [9]. Sebagai contoh data yang disimpan
oleh server data Cassandra, dengan meminjam Gambar 2 dan Gambar 3, mungkin bisa
digambarkan serupa dengan data contoh pada Tabel 1.
Tabel 1 Contoh Struktur Data yang Digunakan Cassandra
Mahasiswa : Kumpulan Kolom
Adi Nugroho : Kunci Baris
Matakuliah-1 : Pemrograman Java :
Nama Kolom : Nilai Nilai-1 : A Nama Kolom : Nilai
Matakuliah-2 : Sistem Basis Data:Nama Kolom : Nilai Nilai-2 : A Nama Kolom : Nilai
Sapto Budi Hartono:
Kunci Baris
Matakuliah-1 : Pemrograman Java :
Nama Kolom : Nilai Nilai-1 : C Nama Kolom : Nilai
Pada contoh Tabel 1 kita memiliki satu kumpulan kolom column family Mahasiswa yang
memiliki dua
baris data
rowrecordAdi Nugroho
dan Sapto Budi Hartono. Kedua baris
rowrecord itu memiliki jumlah kolom column yang berbeda. Baris Adi Nugroho kita lihat
memiliki empat kolom Matakuliah-1, Nilai-1, Matakuliah-2, Nilai-2, sementara baris Sapto
Budi Hartono
kita lihat hanya memiliki dua kolom Matakuliah-1, Nilai-1. Hal ini jumlah kolom
yang tidak seragam diperkenankan terjadi pada Cassandra. Dalam hal ini, perlu diketahui bahwa
secara internal Cassandra untuk masing-masing data memiliki timestamp yang mencatat saat kapan
terakhir data diperbaharui atau disisipkan.
Gambar 5 : Kumpulan Superkolom
Masalah selanjutnya adalah bagaimana jika kita mau membuat kelompok dari kolom-kolom yang
saling berhubungan satu dengan yang lainnya dengan kata lain : menambahkan matradimensi
lain di bagian atas? Cassandra memungkinkan kita melakukannya dengan apa yang dinamakan
sebagai kumpulan superkolom yang mengijinkan kita memikirkannya sebagai suatu hierarki kolom,
seperti yang diperlihatkan dalam Gambar 5. Dalam hal ini, satu baris di dalam kumpulan kolom
menyimpan sejumlah kolom yang memiliki pasangan namanilai namevalue, kumpulan
superkolom menyimpan subkolom-subkolom di
Kumpulan Superkolom
Superkolom-1
Kunci Baris
Superkolom-2
Kolom -1
Kolom -2
Nilai-1 Nilai-2
Kolom -1
Kolom -2
Nilai-1 Nilai-2
dalamnya, dimana subkolom-subkolom dinamakan sebagai kelompok kolom-kolom yang saling
memiliki hubungan satu dengan yang lainnya.
Jika kita perhatikan dengan jeli pembahasan di atas, kita melihat bahwa -tidak seperti sistem basis
data relasional yang dirancang dan dikembangkan menggunakan ERD Entity Relationship Diagram-
perancangan dan pengembangan sistem Cassandra seharusnya dimulai justru dari query-queryyang
diharapkan akan dilakukan pada server data Cassandra
– dalam hal ini kita sebagai pengembang bisa bertanya pada perancang aplikasi tentang
query-query seperti apa yang diharapkan oleh aplikasi. Ini merupakan paradigma yang cukup
berbeda, sehingga mungkin akan membingungkan perancang
dan pengembang
aplikasi yang
sebelumnya telah terbiasa dengan model-model relasional.
Pada sistem
yang terdistribusi,
perancang dan pengembang Cassandra juga harus menggunakan timestamp untuk memastikan data
mana yang terakhir mengalami perubahan.
Tabel 2 Operasi-operasi Baku Pada Cassandra[9]
Create Read
Update Delete
insert batch_inse
rt getKey
getColum n
getSlice mutate
batch_muta te
remove
3. Operasi CRUD pada Sistem Non