Sistem Non-Relasional Cassandra J00691

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