Operasi CRUD pada Sistem Non

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