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
Relasional Cassandra
Operasi-operasi  yang  bersifat  baku  pada  sistem basis data sering dinamakan sebagai operasi CRUD
Create-Read-Update-Delete [12].
Tabel 2
memperlihatkan  sintak-sintak  dasar  operasi  CRUD pada  Cassandra.  Dalam  hal  ini  Cassandra  tidak
seperti sistem relasional yang menggunakan SQL, menggunakan  API  Application  Programming
Interface
yang dinamakan
sebagai Thrift
sedemikian rupa
sehingga klien-klien
bisa mengakses data yang tersimpan di dalamnya [9, 17,
20].  API Thrift dapat dimanfaatkan oleh sejumlah besar  bahasa  pemrograman  misalnya  C,  C++,
Java,  PHP,  Phyton,  dan  sebagainya.  Meski demikian,  dalam  pembahasan  selanjutnya,  kita
mengasumsikan  bahwa  bahasa  pemrograman  yang digunakan  adalah  Java.  Sebagai  catatan,  dalam
pembahasan  selanjutnya,  kita  mengasumsikan bahwa  klien  dan  server  data  Cassandra  berada  di
komputer yang sama [localhost]. Dengan kata lain, meskipun  Cassandra  dipromosikan  sebagai  sistem
basis data terdistribusi yang tangguh, dalam tulisan ini kita tidak akan membahasnya.
Pada  umumnya,  agar  klien-klien  bisa  mengakses data  yang  disimpan  dalam  server  data  Cassandra,
seringkali  kita  harus  melakukan  konfigurasi sedemikian  rupa
sehingga  Cassandra dapat
mengenali  kumpulan  kolom  ColumnFamily yang  akan  digunakan.  Hal  ini  bisa  dilakukan
dengan  cara  menyunting  berkas  storage-conf.xml yang  ada  di  folder  CASSANDRA_HOMEconf
[9].  Dalam  berkas  storage-conf.xml    kita  akan menjumpai  2  elemen  kunci  Keyspaces  yang  ada
secara default, yaitu elemen  kunci  yang digunakan secara  internal  oleh  Cassandra  dan  Keyspaces1
yang  tidak  digunakan  oleh  server  data  Cassandra dan hanya digunakan untuk tujuan demonstrasi. Di
dalam  elemen  Keyspaces    yang  ada,  kita  bisa mendefinisikan  elemen-elemen  Keyspace  yang
dapat kita gunakan untuk mendefinisikan kumpulan kolom  ColumnFamily  yang  diperlukan  oleh
aplikasi klien. Di bawah ini, kita akan mengambil contoh  konfigurasi  untuk  struktur  data  yang  ada
pada  server    data  Cassandra  seperti  yang diperlihatkan dalam Tabel 1.
Keyspaces Keyspace Name=Mahasiswa
ColumnFamily CompareWith=UTF8Type Name=Nama Matakuliah
ColumnFamily CompareWith=UTF8Type Name=Nilai
-- Necessary for Cassandra : diisi oleh Cassandra --
ReplicaPlacementStrategy org.apache.cassandra.locator.RackUnawareStr
ategy ReplicaPlacementStrategy
ReplicationFactor1ReplicationFactor EndPointSnitch
org.apache.cassandra.locator.EndPointSnitch EndPointSnitch
Keyspace Keyspaces
Dengan  konfigurasi  XML  eXtensible  Markup Language
di atas,
sesungguhnya kita
mendefinisikan  dua  kolom  yaitu  satu  untuk menyimpan Nama Matakuliah  yang diambil oleh
Mahasiswa
tertentu,  satu  lagi  untuk  menyimpan
Nilai -nya. Selanjutnya, kita juga bisa melihat baris-
baris  konfigurasi  tambahan  yang  diperlukan  oleh Cassandra  agar  pekerjaannya  bisa  berjalan  dengan
baik.  Kumpulan  kolom  ColumnFamily  akan mengorganisasi  data  berdasarkan  kolom-kolom
Column-nya    dalam  susunan  hierarkis.  Aturan pengurutan
yang akan
diterapkan pada
ColumnFamily adalah  UTF8Type  sehingga  data
nantinya  akan  diurutkan  berdasarkan  urutan alfabetis.  Demikianlah,  kita  sudah  mendefinisikan
konfigurasi  data  yang  akan  dimasukkan  ke  dalam server  data  Cassandra.  Selanjutnya,  setelah  kita
mengaktifkan server data Cassandra, maka kita bisa melakukan pemrograman dari sisi klien [15, 16].
Sebelum kita bisa bekerja dari arah klien, pastikan proyek  Java  yang  kita  buat  sudah  memasukkan
pustaka-pustaka  APIThrift    ke  dalamnya  ada  di folder  CASSANDRA_HOMElib.  Jika  hal  ini
sudah dilakukan dengan baik, klien bisa melakukan koneksi  dengan  server  data  Cassandra  dengan
membuka  port  9160  yang  merupakan  port  default server data Cassandra. Adapun contoh kode bahasa
Java untuk  membuka koneksi  port 9160 itu tersaji di bawah ini.
TTransport transport = new TSocketlocalhost, 9160;
TProtocol protocol = new TBinaryProtocoltransport;
Cassandra.Client client = new Cassandra.Clientprotocol;
transport.open;
Setelah  port  komunikasi  terbuka,  selanjutnya  kita bisa
mengisi datanya.
Contohnya adalah
menggunakan kode-kode Java berikut ini.
MapString, ListColumnOrSuperColumn data =  new HashMapString,
ListColumnOrSuperColumn; ListColumnOrSuperColumn columns
=
new
ArrayListColumnOrSuperColumn;
Pertama kali, sebelum memasukkan data, kita harus terlebih  dulu  mendefinisikan  objek-objek  yang
akan  bertindak  sebagai  pemuat  container  di memori  klien,  sebelum  kita  mengisinya  dengan
data  sesungguhnya,  kemudian  menyisipkannya  ke sistem  basis  data  Cassandra.  Pada  contoh  kode  di
atas,  kita  menggunakan  struktur  data  Map  yang diimplementasikan  sebagai  List  yang  berisi
dengan kolomsuperkolom
ColumnOr SuperColumn
dan penempatannya
dalam
memori  dilakukan  menggunakan  algoritma  Hash
[11],  sementara  kolomsuperkolom  ColumnOrS uperColumn
sendiri diimplementasikan
menggunakan  struktur  data  ArrayList.  Setelah pendefinisian  objek  dilakukan  dengan  baik,
selanjutnya kita
bisa memasukkan
data sesungguhnya
ke server
data Cassandra
menggunakan  kode  Java  berikut  perhatikan komentar-komentar
yang berfungsi
untuk menjelaskan maksud penulisan kode.
Timestamp diambil dari sistem pewaktuan komputer.
long timestamp = System.currentTimeMillis;
Membuat kolom Matakuliah dan mengisi datanya.
ColumnOrSuperColumn c1 = new ColumnOrSuperColumn;
c1.setColumnnew Column Nama Matakuliah.getBytesutf-8,
Pemrograman Java.getBytesutf- 8,timestamp;
columns.addc1; Menambah kolom Nilai
dan mengisi datanya. ColumnOrSuperColumn c2 = new
ColumnOrSuperColumn; c2.setColumnnew
ColumnNilai.getBytesutf-8, A.getBytesutf-8,timestamp;
columns.addc2; Menambahkan data ke
server data Cassandra. data.putMahasiswa,columns;
client.batch_insertMahasiswa,Adi Nugroho,data,ConsistencyLevel.ANY;
Seperti telah kita bahas sebelumnya, pada dasarnya ada  tiga  nilai  yang  diperlukan  untuk  melakukan
penambahan  kolom,  yaitu  :  nama  kolom,  nilainya, serta  timestamp-nya.  Kita  saat  ini  hanya  akan
menambahkan  satu  data,  yaitu    perhatikan  Tabel 1  Adi Nugroho yang  mengambil  Pemrograman
Java
, mendapatkan
nilai A
, serta
waktu timestamp  saat  dimasukkannya  data  ke  server
data  Cassandra.  Tentunya  key  yang  lain  serta kolom-kolom  yang  lain  dapat  dilakukan  dengan
cara  yang  serupa.  Perhatikan  bahwa  argumen
String  pada  struktur  data  Map  pada  dasarnya berisi  nama  ColumnFamily  yang  kita  definisikan
sebelumnya  saat  kita  menyunting  berkas  storage- conf.xml
. Setelah  kita  berhasil  menyisipkan  data  ke  server
data  Cassandra,  selanjutnya  pasti  kita  ingin  agar bisa  melihatnya  kembali.  Hal  ini  bisa  dilakukan
menggunakan potongan kode Java berikut ini.
SlicePredicate slicePredicate = new SlicePredicate;
SliceRange sliceRange = new SliceRange; sliceRange.setStartnew byte[] {};
sliceRange.setFinishnew byte[] {}; slicePredicate.setSlice_rangesliceRange;
List result = client.get_sliceMahasiswa,Adi Nugroho,
new ColumnParentMahasiswa,slicePredicate,
ConsistencyLevel.ONE;
Pada kode Java di atas, pertama kali kita membuat objek  dari  kelas
SlicePredicate  yang digunakan  untuk  mengatakan  pada  server  data
Cassandra  tentang  data  apa  yang  akan  diambil. Pada  contoh  kode    bahasa  Java  di  atas  kita  akan
mengambil nilai yang ada di dalam sejumlah kolom yang  didefinisikan  oleh  setStart  hingga
setFinish  Ingat  kembali  pengurutan  kolom secara  alfabetis  yang  didefinisikan  melalui  berkas
konfigurasi storage-conf.xml. Dalam hal ini, kita tidak  menyebutkan  kolom  awal  dan  kolom  akhir,
sehingga  server  data  Cassandra  kelak  akan mengambil  semua  kolom  yang  ada    Catatan  :
Argumen  yang  digunakan  oleh  metoda-metoda
setStartdan setFinishseharusnya
adalah nama kolom. Lalu,  setelah  kita  bisa  melakukan  penyisipan  data
dan  mengambilnya  kembali,  bagaimana  jika  kita melakukan pembaharuan data updating? Kita bisa
menggunakan metoda
batch_mutate.
Misalkan kita ingin mengubah nilai Pemrograman Java
untuk  mahasiswa  dengan  nama  Adi Nugroho
sehingga bernilai
B ,
kita bisa
memberikan perintah Java berikut ini.
long timestamp
= System.currentTimeMillis;
Column column = new
ColumnNilai.getBytesutf- 8,B.getBytesutf-8,timestamp;
ColumnOrSuperColumn columnOrSuperColumn = new ColumnOrSuperColumn;
columnOrSuperColumn.setColumncolumn; Mutation mutation = new Mutation;
mutation.setColumn_or_supercolumn columnOrSuperColumn;
ListMutation mutations = new ArrayListMutation;
mutations.addmutation; MapString,ListMutation nilai =
new HashMapString,ListMutation; job.putMahasiswa,mutations;
MapString,
MapString,ListMutation batch =
new HashMapString,MapString,
ListMutation; batch.putAdi Nugroho,nilai;
client.batch_mutateMahasiswa,batch, ConsistencyLevel.ALL;
Pertama kali kita harus membuat kolom Column yang  memuat  perubahan  nyata  yang  akan  kita
lakukan,  kemudian  kita  mengisinya  dengan  key yang benar dan dengan nilai yang baru. Kemudian,
kita perlu menambahkan kolom Column tersebut ke  kumpulan  ColumnOrSuperColumn  dan
kemudian menambahkan keseluruhannya  ke objek
Mutation.  Objek  Mutation  ini  juga  dapat digunakan  untuk  membuat  kolom  yang  baru  atau
untuk  menghapus  kolom    yang  sudah  ada sebelumnya. Jika kita mengisinya dengan key yang
belum  ada  di  basis  data,  berarti  kita  akan menambahkannya; jika key yang dimasukkan sudah
ada di basis data Cassandra, maka ia pada dasarnya akan  menindas  nilai  yang  sudah  ada  tersebut  serta
juga  akan  menindas  nilai  timestamp  yang  lama. Terakhir,  jika  kita  mau,  kita  juga  bisa  meletakkan
objek  Deletion  ke  objek  Mutation  dan dengan  demikian  mengatakan  pada  server  basis
data Cassandra
bahwa ia
harus menghilangkanmenghapus Column tertentu.
Kita,  seperti  telah  dibahas  di  atas,  bisa  melakukan penghapusan  menggunakan  metoda  pembaharuan.
Alternatif  lain,  kita  juga  bisa  secara  langsung menggunakan metoda remove berikut ini.
long timestamp = System.currentTimeMillis;
client.removeMahasiswa,Adi Nugroho, new
ColumnPath Mahasiswa,timestamp,
ConsistencyLevel.ALL;
Kita  lihat  di  atas,  alih-alih  menggunakan  SQL seperti  pada  sistem  basis  data  relasional,  operasi-
operasi  CRUD  dari  arah  aplikasi-aplikasi  klien  ke server  data  Cassandra  dapat  dilakukan  dengan
memanfaatkan  API  Thrift    yang  dapat  dipanggil dari  arah  klien  dalam  kasus  kita  di  atas,  kita
menggunakan bahasa pemrograman Java.
4. Perbandingan  Antara  Sistem  Basis