Fitur - fitur RDBMS yang Jarang Digunakan Programmer

Muhammad Arslan 11 Juli 2017

Fitur - fitur RDBMS yang Jarang Digunakan Programmer

RDBMS tidak hanya soal DDL dan DML saja. Tidak juga soal PHPMyAdmin saja atau asal dapat menampung data saja dari aplikasi yang kita kembangkan. Namun selain memahami arsitektur dari database yang kita rancang, kita pun harus tahu seluk beluk fitur - fitur canggih yang dimiliki oleh RDBMS.

Secara umum hampir banyak RDBMS mainstream memiliki fitur yang tidak jauh berbeda dan tersedia di RDBMS lainnya. Oleh karena itu programmer yang masih kurang mendalami RDBMS diharapkan dapat mengenal fitur - fitur lanjutan tersedia di RDBMS.

Berikut adalah fitur - fitur yang seringkali tidak digunakan oleh programmer dalam membuat aplikasi yang menggunakan database.

###1. Index

Index mungkin sering dilupakan oleh programmer dalam membuat aplikasi yang membutuhkan database. Salah satu fungsi dari index adalah mempercepat proses read dan pencarian namun menurungkan beberapa operasi lain seperti update. Memang tidak perlu semua kolom diberikan index. Cukup beberapa kolom saja yang dianggap penting dan sering digunakan untuk diberikan index.

  • Spatial Index
  • Full Text Search Index
  • Index
  • Unique Index
  • Primary Key
  • Foreign Key

###2. Constraint

Beberapa kode bisnis masih dipasang di level kode program. Padahal bila untuk membatasi jumlah umur saja dapat dipasangkan constraint saat mendefinisikan tabel.

Tak jarang pula kolom yang harusnya diberikan foreign key tapi malah dilupakan dan akhirnya berefek lambat terhadap performa aplikasi karena harus melakukan full scanning terhadap isi tabel yang di-join.

Mungkin masih ada juga programmer yang membuat pengecekan keunikan baris di level kode program padahal bisa ditangani oleh primary key. Jadi index yang dapat digunakan di RDBMS biasanya antara lain:

Bila kamu membutuhkan data child dihapus ketika data master dihapus pun, dapat memanfaatkan ON DELETE CASCADE atau ON UPDATE CASCADE bila terjadi perubahan dari master dan harus diperbaharui ke child.

Ada banyak constraint yang dapat digunakan, diantaranya:

  • Primary Key
  • Foreign Key
  • Check
  • ON DELETE/UPDATE/INSERT CASCADE
  • ON DELETE/UPDATE/INSERT SET NULL
  • ON DELETE/UPDATE/INSERT NOTHING
  • dan lainnya

###3. User-defined Function

Bila dirasa ada function yang dimiliki suatu RDBMS tidak cukup memuaskan, kamu dapat membuat sendiri function tersebut dengan kode khusus yang dapat disimpan di dalam RDBMS tersebut.

Layaknya function yang ada di dalam bahasa pemrograman, kamu dapat membuat function yang dapat mengolah langsung suatu dataset dan mengembalikan nilai tertentu. Hal tersebut dapat mereduksi beban koneksi ke database namun meningkatkan penggunaan memori di dalam server.

Di Oracle disebut dengan PL/SQL, di SQL Server disebut dengan T-SQL, di MySQL dinamakan dengan MySQL Function, dan di database lain dinamakan dengan stored procedure dan istilah tersendiri.

###4. Trigger

Hampir sama dengan user-defined function, Trigger adalah suatu kode yang dieksekusi saat tabel menerima event dari client. Trigger dapat dibuat untuk menanggapi respon berikut:

  • ON BEFORE/AFTER INSERT
  • ON BEFORE/AFTER DELETE
  • ON BEFORE/AFTER UPDATE

###5. Full Text Search

Memang solusi untuk searching seperti Elasticsearch atau Solr sudah banyak digunakan oleh programmer yang berpengalaman. Namun bila memang belum mengerti menggunakan tools tersebut, kamu dapat memanfaatkan full text search yang ada di RDBMS (bila sudah mendukung).

Misalnya di MySQL dan PostgreSQL sudah terdapat fitur untuk melakukan full text search. Fitur ini merupakan salah satu cara untuk mendapatkan pencarian di dalam teks secara detail dan lebih tepat. Hasil pencariannya pun berupa pencarian teks yang mirip dengan memberikan score kemiripan. Dibandingkan pencarian biasa menggunakan "LIKE %keyword%".

Selain pencarian menjadi lebih cepat, proses pun menjadi lebih efisien karena sudah terdapat penanganan full text search di dalam internal database tersebut.

###6. Built-in Function

Memang beberapa RDBMS mempunyai fitur untuk membuat function atau stored procedure untuk ditanamkan di dalam database. Namun jangan lupa bahwa ada banyak built-in function yang tinggal digunakan oleh programmer ketimbang membuatnya sendiri.

Misal di MySQL terdapat beberapa function untuk menangani berbagai hal seperti berikut:

  • String
  • Numeric
  • Date and Time
  • Full Text Search
  • Casting Type
  • XML
  • Bit Operation
  • Encryption
  • Compression
  • Information Analysis
  • Spatial Analysis
  • JSON Operation
  • Math
  • Aggregation
  • dan lainnya

###7. Role Management

Kadang masih biasa menggunakan root untuk mengakses database kan? sudah saatnya kita membatasi user dengan hak akses tertentu ke database tertentu. Mayoritas RDBMS sudah mendukung hal ini untuk meningkatkan sekuritas di aplikasi kita.

Tidak perlu semua aplikasi mengakses user root. Cukup user baru saja yang diberikan hak - hak tertentu. Selain itu dengan role management ini kamu dapat membatasi orang - orang tertentu, bahkan direktur sekalipun agar tidak langsung mengakses database.

Jadi user root tetap dipegang oleh system administrator, pihak lain tidak perlu mengakses sembarang tabel yang bukan haknya.

###8. Table Partitioning

Bila tabel sudah gendut, tentu akan menurunkan performa tabel tersebut. Tabel yang tidak dapat dibendung lagi karena ukurannya terlalu besar, dapat mulai dipecah dengan cara partitioning.

Misal ada sebuah tabel yang berisi data skripsi. Kita dapat melakukan partitioning dengan membuat tabel skripsi untuk tahun 2005, tahun 2006, tahun 2007, tahun 2008, dan seterusnya. Sehingga bila kita memerlukan query ke tabel tahun tertentu, cukup satu tabel tersebut saja. Tidak perlu semua dihajar melalui query.

Hanya saja memang perlu strategi dan keputusan tepat bila ingin melakukan tabel partitioning. Mengingat jumlah penggunaan harddisk yang akan membengkak.

Partitioning pun ada yang berjalan di lokal server, ada juga yang terdistribusi di dalam jaringan komputer. Dan penentunya bisa berupa primary key atau kolom lainnya dengan range tertentu.

###9. Replication

Replikasi, sesuai namanya database utama (master) akan diklon ke dalam database pembantu (slave). Hal ini digunakan untuk meningkatkan availibility database yang kita kelola, dan mengurangi beban query yang dilakukan query SELECT ke master.

Query SELECT dibebankan kepada slave, sedangkan operasi lainnya dibebankan kepada master. Salah satu format yang biasa digunakan adalah master-slave replication, ada juga yang melakukan master-master replication. Ada juga yang menggunakan master-master-slave replication dimana master-master mempunyai slave untuk menunjang kekokohan database kita.

###10. Clustering

Hampir mirip dengan partitioning table dan replication hanya saja clustering dilakukan bila ingin melakukan horizontal scaling. Bila di replikasi kita ingin meningkatkan kapasitas server, maka cara yang dilakukan adalah menambah harddisk atau memori dari server tersebut, baik untuk master ataupun slave. Hal ini disebut dengan vertical scaling.

Namun vertical scaling pun ada batasannya ketika mesin server mencapai batas maksimum ukuran yang disediakan oleh vendor yang memproduksi server tersebut. Salah satu solusinya yang cukup mahal dan menantang adalah clustering database.

Dengan clustering database, selain melakukan vertical scaling, kita dapat juga melakukan horizontal scaling dengan menambahkan sejumlah server ke dalam network yang telah diimplementasikan clustered database. Walaupun spesifikasi server yang disusun untuk clustered database tidak terlalu besar, tapi bila jumlahnya sangat banyak akan lebih enak dalam meningkatkan kapasitas database yang kita miliki dan tentunya meningkatkan reliabilitas aplikasi yang kita bangun diatas clustered database.

Sejumlah tantangan clustered database adalah kita harus mampu mengelola sendiri clustered database ini, dan harus mau berseteru dengan masalah timezone dan availibility zone bila suatu saat aplikasi web kita ingin ekspansi ke wilayah lain diluar negara kita.

Beberapa RDBMS yang sudah memiliki fitur cluster antara lain Oracle, MySQL, MariaDB, dan SQL Server. RDBMS lain memiliki pengaturan cluster yang lebih khusus dan dapat kamu periksa di dalam dokumentasi masing - masing RDBMS.

###11. Backup & Recovery

Prosedur penyelamatan database harus sangat diperhatikan. Kita tidak dapat mempercayakan masalah ini kepada penyedia hosting atau cloud vendor. Data kita merupakan tanggung jawab kita. Kalaupun menjadi tanggung jawab pihak penyedia layanan tentu harus memasang ongkos yang lebih mahal.

Kita bisa mem-backup database secara berkala untuk seluruh database atau per tabel. Selain mem-backup struktur, kita juga harus selalu waspada mem-backup isi dari tabel - tabel terkait.

Setiap RDBMS pun memiliki prosedur recovery sendiri untuk beberapa kasus. Dengan demikian jangan lupa untuk membaca dokumentasi dari RDBMS yang sedang digunakan.

###12. SSL

Secure socket layer adalah salah satu cara dimana kita dapat memberikan pengamanan lebih terhadap aliran data yang menuju database kita. Bisanya standard deployment dilakukan tanpa memasang SSL pada database. Namun untuk menambah pengamanan, kita dapat memasang SSL di database.

Salah satu caranya adalah dengan menggunakan OpenSSL, kemudian meng-generate file yang .pem dengan algoritma dan parameter tertentu. Kemudian akan terbentuk dua file yaitu .pem privat dan publik. File .pem privat akan dipasang di sisi database server, sedangkan publik akan digunakan oleh client yang mana adalah aplikasi web itu sendiri.

Nantinya di dalam kode program kita, harus ditambahkan konfigurasi untuk membaca file .pem setiap melakukan koneksi ke database. Tentu saja jangan sampai file .pem ini bocor ke sembarang orang atau ke layanan publik lainnya.

###13. Dokumentasi

Ini dia fitur RDBMS yang sangat jarang digunakan oleh sebagian programmer. Memang sih membaca berbagai solusi dan penjelasan teknis dari dokumentasi itu sakit mata. Namun perlu ditegaskan bahwa dokumentasi menyimpan ribuan solusi dasar yang sebenarnya tidak perlu ditanyakan lagi ke forum.

Bahkan apa yang dijelaskan di artikel ini saja sebenarnya sudah ada dan dijelaskan secara detail di dokumentasi. Oleh karena itu, apapun RDBMSnya, MySQL, PostgreSQL, MariaDB, SQL Server, Apache Derby, atau produk lainnya. Yang terpenting adalah menguasai dokumentasinya terlebih dahulu.

(arslan)