PERBANDINGAN FUNGSIONALITAS DAN KINERJA SPATIAL-DBMS (POSTGRESQL/POSTGIS DAN MONETDB/SPATIAL)
ANGGI PUTRANTIO JUNIARD
DEPARTEMEN ILMU KOMPUTER FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM INSTITUT PERTANIAN BOGOR BOGOR 2013
PERBANDINGAN FUNGSIONALITAS DAN KINERJA SPATIAL-DBMS (POSTGRESQL/POSTGIS DAN MONETDB/SPATIAL)
ANGGI PUTRANTIO JUNIARD
Skripsi sebagai salah satu syarat untuk memperoleh gelar Sarjana Komputer pada Departemen Ilmu Komputer
DEPARTEMEN ILMU KOMPUTER FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM INSTITUT PERTANIAN BOGOR BOGOR 2013
ABSTRACT ANGGI PUTRANTIO JUNIARD. Comparison of Functionality and Performance of SpatialDBMS (PostgreSQL/PostGIS and MonetDB/Spatial). Supervised by HARI AGUNG ADRIANTO. Spatial-DBMS is a software module that can work with an underlying database management system and support multiple spatial data models, spatial indexing, and spatial function. Several examples of spatial-DBMS is PostgreSQL, MYSQL, IBM DB2, Oracle, SQL Server, and MonetDB. PostgreSQL as a well-known spatial-DBMS has been widely used all over the world. Meanwhile, MonetDB is still in the phase of system development and has many rooms for improvement. This research compared the two spatial-DBMS in terms of functionality and performance. The results showed that PostgreSQL has more complete spatial function compared to MonetDB. From their performance, it was found that MonetDB is better than PostgreSQL in handling simple non-spatial queries. As for the simple and complex spatial queries, PostgreSQL has shown better performance compared to MonetDB. Keywords: spatial data, PostgreSQL, MonetDB, functionality, performance
Judul Skripsi Nama NRP
: Perbandingan Fungsionalitas dan Kinerja Spatial-DBMS (PostgreSQL/PostGIS dan MonetDB/Spatial) : Anggi Putrantio Juniard : G64080103
Menyetujui: Pembimbing
Hari Agung Adrianto, S.Kom., M.Si. NIP. 19760917 200501 1 001
Mengetahui: Ketua Departemen Ilmu Komputer
Dr. Ir. Agus Buono, M.Si., M.Kom. NIP. 19660702 199302 1 001
Tanggal Lulus :
KATA PENGANTAR Segala puji dan syukur penulis panjatkan ke hadirat Allah subhanahu wata’ala atas segala limpahan rahmat serta karunia-Nya sehingga penulis mampu menyelesaikan tugas akhir dengan baik. Shalawat dan salam penulis sampaikan kepada Nabi Muhammad shallallahu ‘alaihi wasallam serta kepada keluarganya, sahabatnya, serta para pengikutnya yang selalu berpegang kepada Al-Quran dan As-Sunnah. Penulis juga menyampaikan terima kasih kepada seluruh pihak yang telah berperan dalam penelitian ini, antara lain: 1
Ayahanda Katiya, Ibunda Dian Etika Sari, Kakak Putri Anggraeni, serta Adik Rachma Alfazdilla atas doa, kasih sayang, dukungan, serta motivasi kepada penulis untuk penyelesaian penelitian ini.
2
Bapak Hari Agung Adrianto, S.Kom., M.Si. selaku dosen pembimbing yang telah memberi banyak ide, saran, bantuan, serta dukungan sampai selesainya penelitian ini.
3
Shaila, Adisty Dewi Kania, dan Resti Indrias atas doa, nasihat, dukungan, serta motivasi kepada penulis untuk penyelesaian penelitian ini.
4
Rekan-rekan seperjuangan di Ilmu Komputer IPB angkatan 45 atas segala kebersamaan, bantuan, dukungan, serta kenangan bagi penulis selama menjalani masa studi. Semoga kita bisa berjumpa kembali kelak sebagai orang-orang sukses.
5
Hafizhia Dhikrul Anugrah, Ryantie Octaviani, Melki Hasali, Catur Purbo, Jaka Ahmad, Rian Senja, Irvan Ahadi, Fulsi Wiyata, Asrori, dan sahabat lainnya yang telah menjadi mitra dan menemani penulis dalam menjalani kehidupan sebagai mahasiswa.
6
Rekan satu bimbingan, Mitha Rachmawati, Praditya Pamungkas, dan Ilman Dwi Santoso.
7
Sahabat satu kontrakan, Abdul Rahman Halim, Nanda Ichsan Pratama, Ahmad Bagus Diponegoro, Ryan Satria Nugroho, yang telah memberikan dukungan untuk segera menyelesaikan studi.
Penulis berharap semoga penelitian ini dapat memberikan manfaat, khususnya bagi umat Islam di Indonesia dan masyarakat pada umumnya.
Bogor, Februari 2013
Anggi Putrantio Juniard
RIWAYAT HIDUP Penulis dilahirkan di Jakarta pada tanggal 13 Juni 1990. Penulis merupakan anak kedua dari pasangan Katiya dan Dian Etika Sari. Pada Tahun 2008, penulis menamatkan pendidikan di SMA Negeri 67 Jakarta. Pada tahun yang sama, penulis diterima menjadi mahasiswa di Institut Pertanian Bogor (IPB) melalui jalur Seleksi Nasional Masuk Perguruan Tinggi Negeri (SNMPTN). Penulis menjadi mahasiswa di Departemen Ilmu Komputer, Fakultas Matematika dan Ilmu Pengetahuan Alam. Pada bulan Juli-Agustus 2011 penulis melaksanakan kegiatan Praktik Kerja Lapangan di PT. Aquanur Powerindo. Selama aktif sebagai mahasiswa, penulis pun turut aktif dalam kegiatan kepanitian di Departemen Ilmu Komputer, yaitu Masa Perkenalan Departemen (MPD) dan IT Today 2010.
DAFTAR ISI Halaman DAFTAR TABEL ............................................................................................................................vi DAFTAR GAMBAR .......................................................................................................................vi PENDAHULUAN Latar Belakang .............................................................................................................................. 1 Tujuan ........................................................................................................................................... 1 Ruang Lingkup ............................................................................................................................. 1 TINJAUAN PUSTAKA Struktur Data Spasial .................................................................................................................... 2 Shapefile ....................................................................................................................................... 2 PostgreSQL ................................................................................................................................... 2 Arsitektur PostgreSQL.................................................................................................................. 2 PostGIS ......................................................................................................................................... 3 MonetDB ...................................................................................................................................... 3 Spesifikasi MonetDB dan PostgreSQL ......................................................................................... 4 R-Tree ........................................................................................................................................... 4 Hash .............................................................................................................................................. 5 METODE PENELITIAN Identifikasi Masalah...................................................................................................................... 5 Pengumpulan Data ........................................................................................................................ 5 Pembangunan Database menggunakan PostgreSQL .................................................................... 5 Pembangunan Database menggunakan MonetDB ....................................................................... 5 Input dan Hasil Query .................................................................................................................. 5 Analisis Hasil ................................................................................................................................ 5 HASIL DAN PEMBAHASAN Pengumpulan Data ........................................................................................................................ 6 Pembangunan Database menggunakan PostgreSQL .................................................................... 7 Pembangunan Database menggunakan MonetDB ....................................................................... 9 Input dan Hasil Query ................................................................................................................ 10 Analisis Hasil .............................................................................................................................. 15 SIMPULAN DAN SARAN Simpulan ..................................................................................................................................... 16 Saran ........................................................................................................................................... 16 DAFTAR PUSTAKA ..................................................................................................................... 16
v
DAFTAR TABEL Halaman 1 2 3 4 5 6
Query non-spasial sederhana…………………………………………………………………… 11 Hasil eksekusi query non-spasial sederhana………………………………………………...…. 11 Query spasial sederhana………………………………………………………………………... 12 Hasil eksekusi query spasial sederhana………………………………………………………… 12 Query spasial kompleks……………………………………………………………………...… 14 Hasil eksekusi query spasial kompleks………………………………………………………… 14
DAFTAR GAMBAR Halaman 1 Architecture PostgreSQL (Matthew & Stones 2005)……………………………………………. 2 2 Binary Association Table MonetDB (MonetDB 2012)………………………………………….. 3 3 Struktur dari R-Tree (Guttman 1984)……………………………………………………………. 4 4 Tahapan Penelitian………………………………………………………………………………. 5 5 Persentase populasi kulit hitam………………………………………………………………….. 6 6 Neighborhood dari New York…………………………………………………………………… 6 7 Jalan Kota New York……………………………………………………………………………. 7 8 Titik lokasi subway station............................................................................................................. 7 9 Pembangunan database pada PostgreSQL………………………………………………………. 7 10 Antarmuka PostGIS…………………………………………………………………………….. 8 11 Syntax untuk implementasi Minimum Bounding Rectangle……………………………………. 9 12 Perbandingan waktu eksekusi untuk query non-spasial sederhana…………………………... 11 13 Perbandingan waktu eksekusi untuk query spasial sederhana………………………………... 13 14 Perbandingan waktu eksekusi untuk query spasial kompleks………………………………… 14 15 Perbandingan waktu eksekusi untuk tabel yang memiliki jumlah baris berbeda……………... 15
vi
1
PENDAHULUAN Latar Belakang Seiring dengan kemajuan teknologi saat ini, aplikasi yang menggunakan data spasial terus dikembangkan. Oleh karena itu, dibutuhkan sarana penyimpanan data spasial yang baik guna menghasilkan aplikasi yang andal. Data spasial dapat disimpan dalam sebuah file, misalnya disimpan dalam format shapefile, yaitu format data spasial yang dikeluarkan oleh Environmental System Resource Institute (ESRI). Akan tetapi, menyimpan dalam file memiliki permasalahan seperti pengelolaan file, concurrency control, bulk loading, storage, dan keamanan. Untuk menangani permasalahan penyimpanan data spasial berbasis file, dapat digunakan Database Management System (DBMS). Banyak DBMS yang dapat digunakan sebagai sarana penyimpanan data spasial seperti PostgreSQL, MYSQL, IBM DB2, Oracle, SQL Server, dan MonetDB. Masing-masing DBMS tersebut memiliki kemampuan untuk menyimpan dan mengolah data spasial dengan didukung oleh berbagai fasilitas lainnya. PostgreSQL atau sering disebut Postgres merupakan salah satu dari sejumlah DBMS yang telah digunakan secara luas. Hal ini dikarenakan PostgreSQL merupakan open source database system yang telah teruji kemampuannya. Berdasarkan situs resmi PostgreSQL1, PostgreSQL telah memenangkan banyak penghargaan dan juga telah sukses digunakan oleh berbagai perusahaan. PostGIS menjadikan PostgreSQL sebagai spatial-DBMS dengan didukung oleh tiga fasilitas yang dimiliki oleh PostGIS, yaitu mendukung berbagai tipe data spasial seperti point, line, dan polygon, kemampuan untuk pengindeksan data spasial, dan terakhir tersedianya fungsi spasial yang digunakan untuk mengeksekusi query spasial. Berbagai perusahaan atau kelompok pengembang aplikasi di bidang Sistem Informasi Geografis (SIG) menggunakan PostgreSQL sebagai DBMS. Sebagai contoh adalah MapServer yang mendukung PostgreSQL sebagai sarana penyimpanan data spasial. Namun untuk menangani data yang besar, PostgreSQL memiliki kelemahan di dalam hal kinerja akses data. Model penyimpanan data pada PostgreSQL adalah row-store database. 1
http://www.postgresql.org
Andurkar (2012) menyatakan bahwa pada row-store DBMS, saat kita ingin mencari data hanya pada beberapa kolom dari sebuah tabel dengan kolom yang banyak, maka hal ini dapat mengurangi kecepatan untuk pengaksesan data. Hal tersebut disebabkan setiap kali data dibaca dalam row-store DBMS, kolom yang tidak relevan akan ikut diakses karena row-store DBMS merupakan DBMS dengan model penyimpanan yang menyimpan seluruh kolom dari suatu tabel secara satu kesatuan yang saling terkait di dalam disk drive. Di sisi lain, CWI (Centrum Wiskunde and Informatica) mengembangkan column-store DBMS yang dapat digunakan untuk menangani data yang besar. Pada tahun 2004 untuk pertama kalinya, CWI merilis produknya dengan nama MonetDB yang merupakan open source database system. Column-store DBMS dapat mengakses hanya atribut yang dibutuhkan saja. Hal ini dikarenakan column-store DBMS menyimpan atribut secara terpisah. Vermeij et al. (2008) menyatakan bahwa column-store approach memiliki keuntungan untuk spatial query. Alasan utamanya adalah field geometri yang tidak relevan dalam eksekusi spatial query tidak ikut diakses. Saat ini MonetDB masih dalam tahap awal pengembangan sistem. Mengingat banyaknya potensi yang dimiliki oleh MonetDB, maka perlu dilakukan perbandingan antara MonetDB dengan PostgreSQL. Oleh sebab itu, pada penelitian ini dilakukan perbandingan dari sisi fungsionalitas dan kinerja dua DBMS, yaitu PostgreSQL dan MonetDB. Tujuan Tujuan dari penelitian ini adalah membandingkan PostgreSQL dan MonetDB dalam hal fungsionalitas dan kinerja untuk data spasial. Ruang Lingkup 1 Sistem operasi yang digunakan terbatas hanya pada Windows, khususnya Windows Seven 32-bit. 2 Query yang diujikan hanya mencakup dari tiga kelompok ini, yaitu query non-spasial sederhana (menggunakan non-fungsi spasial), query spasial sederhana (menggunakan fungsi spasial), dan query spasial kompleks (menggunakan fungsi spasial dan join table).
2
TINJAUAN PUSTAKA Struktur Data Spasial Dalam kerangka kerja SIG, data dibagi menjadi dua kategori, yaitu data spasial dan data tekstual (atribut). Data spasial merupakan data yang memiliki informasi lokasi atau data yang bereferensi geografis dan data atribut merupakan data yang memiliki fitur spasial (Chang 2008). Shapefile Menurut Chang (2008), shapefile merupakan sebuah format data spasial yang menyimpan lokasi geografis berupa informasi atribut titik (point), garis (line), dan poligon (polygon). Bentuk geometri yang tersimpan adalah dalam bentuk koordinat vektor. Format ini adalah format yang dikeluarkan oleh Environmental System Resource Institue (ESRI) yang merupakan salah satu vendor SIG terkemuka. ESRI shapefile terdiri atas: 1 Main file (.shp) Merupakan file yang dapat diakses secara langsung dan panjang dari record variabel dalam file mendeskripsikan bentuk vertex. 2 Index file (.shx) Pada file indeks, tiap record terdiri atas proses cetakan offset yang berhubungan dengan record file utama. 3 Tabel dBASE (.dbf) Pada tabel dBASE terdapat fitur atribut dengan record pada setiap fiturnya. PostgreSQL PostgreSQL adalah open source ORDBMS (Object Relational Database Management System) dengan reputasi yang baik dalam keandalan, integritas data, dan correctness. PostgreSQL mulai diimplementasikan sejak tahun 1986. PostgreSQL dapat berjalan pada sistem operasi Linux, UNIX, maupun Windows. PostgreSQL mendukung penuh ACID (atomicity, consistency, isolation, durability) dan sebagian besar standar ANSI SQL 92/2003. PostgreSQL sangat scalable, mampu menangani kuantitas data yang besar dan mengakomodasi banyak pengguna secara konkuren. Ada banyak procedural languages yang didukung oleh PostgreSQL, juga ada banyak library interface yang membuat beragam bahasa tersebut dapat compiled dan interpreted ke interface pada PostgreSQL. Ada interface untuk Java (JDBC), ODBC, Perl, Python, Ruby, C, C++, PHP, Lisp,
Scheme, dan Qt yang dapat digunakan pada PostgreSQL (PostgreSQL 2012). Arsitektur PostgreSQL PostgreSQL terdiri atas proses (program) yang saling terkait, yaitu proses server untuk mengelola database file, menerima koneksi ke database dari client application, dan mengeksekusi permintaan dari client dan progam client user application (front-end) yang berfungsi untuk melakukan operasi database. Client dan server dapat berada pada host yang berbeda. Server PostgreSQL dapat menangani koneksi bersamaan dari client. Untuk dapat mengkoneksikan client secara bersamaan, PostgreSQL memulai dengan membuat proses (program) yang baru untuk masing-masing koneksi. Maka, client dan proses server yang baru dapat berkomunikasi tanpa adanya intervensi oleh proses PostgreSQL yang asli. Dengan demikian, proses dari master server masih tetap berjalan dan menunggu koneksi client (PostgreSQL Global Development Group 2009). Pada Gambar 1, dapat kita lihat beberapa client terhubung ke server melalui sebuah jaringan. Pada PostgreSQL, jaringan yang dibutuhkan seperti TCP/IP, Local Area Network (LAN) atau mungkin jaringan internet. Masing-masing client menghubungkan ke database server utama (postmaster). Postmaster dapat membuat proses server baru yang spesifik untuk melayani permintaan client tersebut (Matthew & Stones 2005).
Gambar
1
Architecture PostgreSQL (Matthew & Stones 2005).
Eksekusi query pada PostgreSQL menurut PostgreSQL Global Development Group (2009) terdiri atas beberapa tahapan sampai dengan mendapatkan hasilnya.
3
1 Sebuah koneksi dari application program ke server dari PostgreSQL terlebih dahulu harus dibuat. Application program mengirimkan query dari pengguna ke server dan menunggu untuk menerima hasil yang dikirim kembali oleh server ke application program. 2 Tahap berikutnya adalah parser yang berfungsi memeriksa query yang dikirimkan oleh application program untuk mengkoreksi syntax dan membuat sebuah query tree. Syntax diperiksa agar sistem dapat mengetahui apakah syntax yang dituliskan oleh pengguna tersebut benar. 3 Kemudian rewrite system mengambil query tree yang telah dibuat pada tahap parser dan memeriksa setiap aturan yang sesuai (disimpan dalam katalog sistem) untuk diterapkan pada query tree. Rewrite system melakukan transformasi yang dimasukkan ke dalam sebuah aturan syntax dan menulis ulang query dari pengguna ke dalam sebuah query yang nantinya akan mengakses ke tabel dasar. 4 Planner atau optimizer mengambil query tree yang telah ditulis ulang dan membuat query plan yang akan dimasukkan ke dalam eksekutor. Planner atau optimizer melakukannya dengan terlebih dahulu menciptakan semua path yang memungkinkan dan akhirnya mengarah ke hasil yang sama. Pertama adalah sequential scan dan yang lainnya menggunakan pengindeksan. Selanjutnya biaya untuk eksekusi dari masing-masing path diestimasikan dan dipilih path yang biayanya paling murah. Path yang termurah diperluas ke dalam complete plan yang kemudian eksekutor dapat menggunakannya. 5 Eksekutor akan mengulangi langkah di atas dengan kembali melewati plan tree dan mengambil baris-baris dengan cara yang diwakili oleh plan. Eksekutor memanfaatkan sistem penyimpanan ketika melakukan scaning tabel, melakukan sort dan join, mengevaluasi kualifikasi dan akhirnya baris-baris yang sesuai dengan query akan diproses sebagai output.
PostGIS digunakan untuk menyimpan tipe data geografis pada PostgreSQL (PostGIS Team 2010). MonetDB MonetDB adalah open source columnoriented database management system yang dikembangkan oleh CWI (Centrum Wiskunde and Informatica). MonetDB sebagai pelopor dari column-store yang merupakan solusi untuk kinerja yang tinggi dari data warehouse untuk business intelligence dan eScience sejak tahun 1993. Inovasi yang dikembangkan oleh MonetDB untuk semua lapisan dari DBMS adalah model penyimpanan yang berdasarkan vertical fragmentation, sebuah arsitektur untuk eksekusi query yang modern dengan CPU-tuned, otomatis dan adaptif untuk indexing, run-time query optimization, dan software architecture yang standar. MonetDB juga mendukung penuh ACID dan SQL yang digunakan oleh MonetDB berdasarkan standar SQL 2003. MonetDB sudah diuji pada Linux (Fedora, RedHat Enterprise Linux, Debian, Ubuntu), Gentoo, Mac OS, SUN Solaris, Open Solaris, dan Windows. Antarmuka pemograman yang didukung oleh MonetDB adalah JDBC, ODBC, PHP, Python, RoR, C, C++, dan Perl (MonetDB 2012). Model penyimpanan yang dikembangkan pada MonetDB secara signifikan berbeda dengan traditional database system. Ini digambarkan dengan tabel baru yang merupakan hasil fragmentation secara vertikal dari entitas dalam arti menyimpan masingmasing kolom (atribut) dari entitasnya pada tabel secara terpisah. Pada tabel baru yang merupakan hasil dari fragmentation, terdiri atas dua kolom. Ini disebut dengan Binary Association Table (BAT) yang dapat dilihat pada Gambar 2.
PostGIS PostGIS merupakan sebuah software yang open source yang menjadikan PostgreSQL sebagai spatial DBMS dengan menambahkan dukungan tiga fasilitas, yaitu dukungan untuk semua tipe data spasial, pengindeksan data spasial, dan tersedianya fungsi spasial.
Gambar
2
Binary Association Table MonetDB (MonetDB 2012).
4
Kolom yang sebelah kiri adalah surrogate atau object-identifier (OID) yang disebut head dan kolom sebelah kanan adalah value yang disebut tail (MonetDB 2012). Manfaat column-store ini berasal dari penyederhanaan yang lebih baik untuk aliran data yang berasal dari disk melewati memori yang masuk ke CPU cache. Keuntungan yang didapat dari column-store database adalah hanya data yang relevan yang akan diproses dan diambil dari disk. MonetDB terdiri atas arsitektur dua lapis, yaitu sebuah database server dan beberapa front-end. Saat ini frontend yang tersedia adalah SQL dan XQuery yang berfungsi sebagai antarmuka ke database server. Server diprogram dalam bahasa pemrograman yang disebut MonetDB Association Language (MAL). MAL adalah bahasa aljabar relational yang mendukung koleksi besar dari relational yang primitif, fungsi-fungsi, dan hubungan yang mudah dengan fungsi yang didefinisikan pengguna (Vermeij et al. 2008).
yang juga berisi pointer ke objek data. Struktur dari R-Tree didesain agar pencarian untuk spasial hanya mengunjungi jumlah node yang sedikit. Untuk proses insert dan delete dapat dibarengi dengan proses search dan tidak perlu reorganisasi secara periodik. Indeks tersebut merupakan proses yang dinamis. Leaf node di dalam R-Tree berisi masukan pencatatan indeks dari bentuk: (I,
tuple-indentifier)
Tuple-identifier menunjuk ke tuple di dalam database dan I adalah sebuah ndimensional rectangle yang merupakan bounding box dari objek spasial yang diindeks. Non-leaf node berisi masukan dari bentuk:
(I,
child-pointer)
merupakan alamat dari node yang berada di bawahnya di dalam R-Tree dan I meliputi semua rectangle masukan node di bawahnya. Child-pointer
Spesifikasi MonetDB dan PostgreSQL Spesifikasi pada MonetDB yang pertama adalah memiliki arsitektur sebagai relation model. MonetDB tidak memiliki GUI (Graphical User Interface). Rilis pertama untuk umum pada tahun 2004. Untuk pengindeksan data menggunakan hash index. Untuk limit pada MonetDB seperti berapa batas ukuran maksimal sebuah tabel di dalam disk, kemudian batas maksimal ukuran sebuah database, dan yang lainnya tidak diketahui. Hanya terdapat keterangan bahwa maksimal kolom per baris tidak memiliki batasan untuk ukuran pada disk. Sedangkan spesifikasi pada PostgreSQL yang pertama adalah memiliki arsitektur sebagai object-relational model. PostgreSQL memiliki GUI untuk mempermudah pengguna. Rilis pertama untuk umum pada tahun 1989. Untuk pengindeksan data PostgreSQL memiliki banyak cara, yaitu bitmap, expression, full-text, GIN, GiST, hash, partial, R-/R+ Tree, dan reverse. Pada PostgreSQL maksimum kolom per baris adalah 250-1600 bergantung pada tipenya. Ukuran maksimum untuk database adalah tidak terbatas. Ukuran maksimum untuk baris adalah 1.6 TB dan ukuran maksimum untuk tabel adalah 32 TB (Findthebest 2012). R-Tree R-tree merupakan sebuah height-balanced tree yang serupa dengan B-Tree dengan pencatatan indeks di dalam setiap leaf node
Gambar 3
Struktur dari R-Tree (Guttman 1984).
Gambar 3 merupakan sebuah hirarki dari RTree dan mengilustrasikan sebuah pengkotakan dan tumpang tindih dari sebuah relasi yang ada di antara rectangle tersebut (Guttman 1984).
5
Hash
Identifikasi Masalah
Salah satu cara yang digunakan untuk implementasi metode himpunan abstract data type (ADT) adalah dengan menggunakan tabel hash. Proses search pada tabel hash merupakan exact search. Ide utama yang melatarbelakangi semua implementasi tabel hash adalah menyimpan sebuah himpunan dari n = |S| elemen di dalam array (tabel hash) A dengan panjang m ≥ n. Oleh karena itu, kita perlu sebuah fungsi yang memetakan elemen-elemen x tersebut ke dalam lokasi dari array. Fungsi ini disebut dengan fungsi hash h dan nilai dari h(x) disebut nilai hash dari x. Elemen x dapat disimpan pada lokasi array A[h(x)]. Banyak implementasi dari tabel hash didasarkan dengan integer universe assumption (Mehta & Sahni 2005).
Identifikasi masalah merupakan tahap awal dari penelitian ini. Masalah yang diidentifikasi adalah berkaitan dengan waktu eksekusi query, output dari proses eksekusi query dan juga ketersedian fungsi spasial pada kedua DBMS, yaitu PostgreSQL dan MonetDB. Oleh karena itu, dalam penelitian ini dilakukan perbandingan pada kedua DBMS tersebut untuk masalah tersebut.
METODE PENELITIAN Secara umum metode penelitian yang digunakan tersusun dalam suatu diagram alur penelitian yang dapat dilihat pada Gambar 4. Mulai
Identifikasi Masalah
Pengumpulan Data
Pembangunan Database menggunakan MonetDB
Pembangunan Database menggunakan PostgreSQL
Pengumpulan Data Pada tahap ini dilakukan pengumpulan data yang akan digunakan untuk pengujian. Data terdiri atas dua jenis data, yaitu data spasial dan data non-spasial. Data spasial didapat dalam format shapefile. Sedangkan data non-spasial didapat dari sebuah file dengan ekstensi *.sql. File tersebut berisi baris-baris SQL yang memuat keseluruhan isi data non-spasial. Pembangunan PostgreSQL
Database
menggunakan
Setelah semua data diperoleh, maka tahap selanjutnya adalah memasukkan data ke dalam DBMS. Data yang dimasukkan terdiri atas empat data spasial dengan format shapefile dan satu data non-spasial dalam sebuah file dengan ekstensi *.sql. Oleh karena itu, diperlukan sebuah database baru pada PostgreSQL. Pembangunan MonetDB
Database
menggunakan
Untuk MonetDB, data spasial yang akan dimasukkan harus terlebih dahulu diubah ke dalam baris-baris SQL yang disimpan dalam file dengan ekstensi *.sql. Kemudian dilanjutkan dengan membuat database baru pada MonetDB. Input dan Hasil Query
Input dan Hasil Query
Input dan Hasil Query
Analisis Hasil
Selesai
Gambar 4 Tahapan Penelitian.
Query yang akan digunakan untuk pengujian DBMS dikelompokkan menjadi tiga kelompok, yaitu query non-spasial sederhana, spasial sederhana, dan spasial kompleks. Analisis Hasil Hasil pengujian berupa pencatatan waktu dan output dari setiap query yang diuji pada masing-masing DBMS. Selain itu, kemampuan kedua DBMS untuk menjalankan fungsi spasial yang terdapat di dalam query perlu dibandingkan untuk dapat dianalisis lebih lanjut.
6
Spesifikasi Perangkat Keras Untuk spesifikasi perangkat keras yang digunakan di dalam penelitian ini adalah processor Intel core i5, memori DDR3 2 GB, dan harddisk 500 GB.
HASIL DAN PEMBAHASAN Pengumpulan Data Data yang akan digunakan untuk pengujian DBMS terlebih dahulu dikumpulkan. Data terbagi menjadi dua jenis, yaitu data spasial dan data non-spasial. Data didapat dari workshop PostGIS yang disediakan oleh situs OpenGeo2. Data terdiri atas empat data spasial dalam format shapefile dan satu data non-spasial dalam sebuah file dengan ekstensi *.sql. Empat data shapefile ini adalah nyc_census_blocks, nyc_neighborhoods, nyc_streets, dan nyc_subway_stations. Satu data non-spasial adalah nyc_census_sosiodata.
‘popn_nativ’ (populasi penduduk asli Amerika), ‘popn_asian’ (populasi penduduk Asia), ‘popn_other’ (populasi penduduk lainnya), ‘hous_total’ (total rumah), ‘hous_own’ (total rumah pribadi), ‘hous_rent’ (total rumah yang disewakan), dan ‘boroname’ (nama sektor). Data spasial nyc_neighborhoods ini adalah pemetaan per sektor wilayah. Setiap sektor memiliki beberapa neighborhood. Di New York, neighborhood merupakan suatu konstruksi sosial yang tidak mengikuti garis yang ditetapkan oleh pemerintah. Untuk contoh, neighborhood dari Brooklyn, yaitu Carrol Gardens, Red Hook, dan Cobble Hill yang diketahui sebagai Brooklyn selatan. Nyc_neighborhoods memiliki dua atribut, yaitu ‘name’ yang berisikan nama dari neighborhood dan ‘boroname’ yang berisikan nama dari sektor-sektor yang ada di New York, yaitu Manhattan, The Bronx, Brooklyn, Staten Island, dan Queens. Gambar 6 merupakan pemetaan untuk neighborhood pada Kota New York.
Data spasial nyc_census_blocks merupakan daerah pemetaan terkecil (per blok) dari sensus penduduk yang berada di Kota New York. Gambar 5 merupakan contoh pemetaan dari persentase populasi kulit hitam dari total populasi.
Gambar 6 Neighborhood dari New York.
Gambar 5 Persentase populasi kulit hitam. Data spasial nyc_census_blocks memiliki atribut yang memberikan keterangan untuk data geometrinya, yaitu ‘blkid’ (identitas blok), ‘popn_total’ (total populasi), ‘popn_white’ (populasi kulit putih), ‘popn_black’ (populasi kulit hitam), 2
http://workshops.opengeo.org
Data spasial nyc_streets ini adalah pemetaan centerline street dari jaringan transportasi kota. Jalan-jalan ini ditandai dengan berbagai tipe untuk membedakan antara jalan umum yang ada seperti gang-gang belakang gedung atau rumah yang sempit, jalan arteri, jalan raya, dan jalan-jalan kecil. Data ini memiliki tiga atribut, yaitu ‘name’ (nama jalan), ‘oneway’ (satu arah atau tidak), dan ‘type’ (jenis jalan). Gambar 7 memberikan gambaran dari pemetaan jalan yang berada di Kota New York.
7
Gambar 7 Jalan Kota New York. Data
spasial
yang
terakhir adalah Pemetaan stasiun kereta bawah tanah ini tersimpan di data spasial nyc_subway_stations. Lokasi stasiun ini memudahkan orang dalam menggunakan transportasi kereta bawah tanah. Data ini memiliki atribut ‘name’ (nama stasiun), ‘borough’ (nama sektor), ‘routes’ (rute), ‘transfers’ (jalur transfer), dan ‘express’ (stasiun untuk kereta ekspres atau tidak). Gambar 8 merupakan pemetaan dari subway station di Kota New York. nyc_subway_stations.
pekerja pada grup blok), ‘transit_public’ (total pekerja dengan transportasi umum), ‘transit_private’ (total pekerja dengan kendaraan pribadi), ‘transit_other’ (total pekerja dengan berjalan kaki atau bersepeda), ‘transit_time_mins’ (total waktu dalam menit untuk bekerja), ‘family_count’ (jumlah keluarga di grup blok), ‘family_income_median’ (median pendapatan keluarga dalam US dolar), ‘family_income_aggregate’ (total pendapatan dari seluruh keluarga), ‘edu_total’ (total orang dengan sejarah pendidikan), ‘edu_no_highschool_dipl’ (total orang tanpa ijazah sekolah tinggi), ‘edu_highschool_dipl’ (total orang dengan ijazah sekolah tinggi dan tidak diteruskan pendidikannya), ‘edu_college_dipl’ (total orang dengan ijazah perguruan tinggi dan tidak dilanjutkan pendidikannya), dan ‘edu_graduate_dipl’ (total orang dengan ijazah lulusan sekolah). Pembangunan PostgreSQL
Database
menggunakan
Setelah semua data diperoleh, proses selanjutnya adalah memasukkan data ke database dalam DBMS PostgreSQL. PostgreSQL yang digunakan adalah versi 8.4 dengan PostGIS versi 1.5. Tahap pertama dalam proses pembangunan database PostgreSQL adalah membuat database baru pada PostgreSQL melalui pgAdmin III yang merupakan antarmuka dari PostgreSQL.
Subway station
Gambar 8 Titik lokasi subway station. Data non-spasial nyc_census_sociodata yang didapat adalah data sosial ekonomi yang dikumpulkan selama proses sensus. Data ini berisikan beberapa atribut, yaitu ‘tractid’ (identitas grup blok), ‘transit_total’ (total
Gambar 9
Pembangunan database pada PostgreSQL.
Gambar 9 merupakan proses pembangunan database baru pada PostgreSQL dengan
8
menggunakan pgAdmin III. Database tersebut diberi nama ‘sig’. Karena sebelumnya telah dilakukan instalasi PostGIS, template yang dipakai dalam database ini adalah template PostGIS. Hal ini bertujuan agar data spasial format shapefile (*.shp) dapat dikonversi menjadi format PostGIS (*.sql) dan dapat langsung menyimpan hasil konversi ke dalam database. Selain itu, dengan menggunakan template PostGIS, kita memilki tiga fasilitas yang dimiliki oleh PostGIS seperti dapat menerima masukan untuk semua tipe data spasial, pengindeksan data spasial, dan fungsi spasial. Setelah database yang baru selesai dibuat, di dalam database tersebut sudah tersedia dua tabel, yaitu tabel ‘geometry_columns’ dan ‘spatial_ref_sys’. Tabel-tabel ini secara otomatis dibuat oleh PostgreSQL karena kita menggunakan template PostGIS sebagai database template. Tahap yang kedua adalah melakukan konversi data spasial format shapefile ke dalam format PostGIS. Konversi dilakukan dengan menggunakan PostGIS. PostGIS menyediakan antarmuka seperti pgAdmin III pada PostgreSQL yang memberi kemudahan bagi pengguna untuk mengkonversi data spasial dengan format shapefile ke dalam format PostGIS. Gambar 10 merupakan antarmuka dari PostGIS. Dengan adanya antarmuka dari PostGIS kita tidak perlu menggunakan program shp2pgsql.
Antarmuka dari PostGIS yang akan secara otomatis menjalankan program shp2pgsql. Shp2pgsql merupakan sebuah program untuk mengubah format shapefile (*.shp) ke dalam format PostGIS (*.sql), sedangkan cara manual untuk mengkonversi data spasial menggunakan shp2pgsql adalah dengan mengetikan syntax seperti di bawah ini: shp2pgsql [option] [schema.table_name] > *.sql]
[shapefile] [file_name
Sebelum dilakukan konversi data dari format shapefile menjadi format PostGIS, salin semua data yang akan digunakan ke folder directory ‘bin’ seperti di bawah ini: C:\Program Files\PostgreSQL\8.4\bin
Kemudian data dimasukkan satu per satu menggunakan PostGIS. Selanjutnya data dikonversi oleh PostGIS dan hasil konversi langsung masuk ke dalam tabel database ‘sig’. Tabel-tabel tersebut dibuat otomatis oleh PostGIS dengan nama tabel yang sama seperti nama data spasialnya. Untuk data nonspasial nyc_census_sociodata, data didapat dalam sebuah file dengan ekstensi *.sql. Data dimasukkan dengan memuat ke dalam SQL queries PostgreSQL yang ada pada pgAdmin III PostgreSQL. Setelah semua data dikonversi dan telah dimuat, database ‘sig’ akan memiliki lima tabel baru, yaitu tabel ‘nyc_census_blocks’, ‘nyc_neighborhoods’, ‘nyc_streets’, ‘nyc_subway_stations’, dan ‘nyc_census_sociodata’. Tahap yang terakhir adalah melakukan vacuum analyze pada setiap tabel. Hal ini perlu dilakukan karena diperkirakan jumlah baris pada masingmasing tabel menyimpang jauh dari jumlah baris yang sebenarnya. Oleh sebab itu, kita harus menjalankan vacuum analyze pada masing-masing tabel agar tidak mengurangi kinerja database. Kita dapat melakukan vacuum analyze dengan menggunakan menu maintenance pada pgAdmin III. Cara lainnya adalah menggunakan Command Prompt PostgreSQL dengan mengeksekusi: VACUUM ANALYZE [tbl_name] (the_geom);
Gambar 10 Antarmuka PostGIS.
Database ‘sig’ pada PostgreSQL memiliki ukuran di dalam disk sebesar 30 MB. Ukuran database ‘sig’ sesuai dengan ukuran data spasial yang dimasukkan ke dalam PostgreSQL. Cara untuk mengetahui ukuran dari database adalah dengan mengeksekusi perintah seperti di bawah ini ke dalam sql shell pada PostgreSQL:
9
SELECT pg_size_pretty(pg_database_size ('sig'));
Pembangunan MonetDB
Database
menggunakan
Proses pembangunan database pada MonetDB berbeda dengan PostgreSQL karena MonetDB tidak memiliki program shapefile loader seperti PostGIS. Format data yang didukung oleh MonetDB adalah CSV, SQL, TAB, RAW dan XML. Oleh karena itu, untuk memasukkan data spasial format shapefile ke dalam MonetDB, tahap pertama yang harus dilakukan adalah mengubah data spasial format shapefile (*.shp) menjadi baris-baris SQL yang disimpan dalam sebuah file dengan ekstensi *.sql. ArcView adalah software yang dapat digunakan untuk mengubah data spasial (shapefile) menjadi baris-baris SQL yang disimpan dalam sebuah file dengan ekstensi *.sql. Dengan tersedianya extension Gix Export Tool pada ArcView, maka shapefile dapat diubah menjadi baris-baris SQL. Data dimasukkan satu per satu kemudian dilakukan konversi menggunakan Gix Export Tool. Setelah semua data dikonversi, perlu dilakukan penyesuaian struktur syntax SQL yang sesuai dengan standar SQL MonetDB. Oleh karena itu, dilakukan pengeditan agar MonetDB dapat memuat SQL tersebut. Tahap selanjutnya adalah membuat database baru pada MonetDB yang dimulai dengan membuat database kosong yang baru. MonetDB tidak memiliki antarmuka bagi pengguna seperti PostgreSQL. MonetDB menggunakan Command Prompt (CMD) sebagai program antarmuka. Dalam menggunakan MonetDB, kita harus terlebih dahulu mengaktifkan server MonetDB. Pengaktifan server dilakukan dengan menggunakan CMD. Pada CMD, directory yang akan digunakan ke folder directory ‘bin’ diubah seperti berikut: C:\Program Files\MonetDB\MonetDB5\bin
Dilanjutkan dengan seperti berikut:
mengetikkan
mserver5 –-dbname=sig dbfarm=C:\skripsi
syntax --
Syntax –-dbname adalah syntax yang digunakan untuk membuat database baru atau menjalankan database yang telah dibuat. Jika kita sudah mengetikkan itu, server sudah aktif dan database baru telah kita buat. Syntax -dbfarm merupakan syntax yang digunakan
untuk membuat folder directory penyimpanan data ke database dalam MonetDB dan juga digunakan untuk memuat directory yang telah kita buat sebelumnya. Setelah server aktif, kita baru dapat menjalankan client MonetDB. Cara menjalankan client sama seperti menjalankan server. Perbedaannya hanya syntax yang kita ketik seperti berikut: mclient –u monetdb –d sig
Syntax –u adalah nama pengguna dan –d adalah database yang telah dijalankan oleh server. Tahap yang berikutnya adalah memasukkan semua data SQL ke dalam MonetDB. Jadi ada lima data yang akan dimasukkan, empat data hasil konversi menggunakan ArcView dan satu data nonspasial dalam sebuah file dengan ekstensi *.sql. Cara memasukkan data tersebut dengan mengeksekusi perintah ini pada Command Prompt MonetDB pada client MonetDB: \
Setelahnya akan didapatkan lima tabel, yaitu tabel ‘nyc_census_blocks’, ‘nyc_neighborhoods’, ‘nyc_streets’, ‘nyc_subway_stations’, dan ‘nyc_census_sociodata’. Minimum Bounding Rectangle (MBR) merupakan cara yang digunakan untuk menambah kecepatan operasi query spasial. Karena MBR ini bekerja seperti filter, maka kinerja untuk proses eksekusi query spasial dapat ditingkatkan. Hanya diperlukan tambahan syntax query sedikit untuk mengimplementasikan MBR ke database dalam MonetDB seperti pada Gambar 11. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ALTER TABLE nyc_census_blocks ADD bbox mbr; UPDATE nyc_census_blocks SET bbox = mbr(shape); ALTER TABLE nyc_neighborhoods ADD bbox mbr; UPDATE nyc_neighborhoods SET bbox = mbr(shape); ALTER TABLE nyc_subway_stations ADD bbox mbr; UPDATE nyc_subway_stations SET bbox = mbr(shape); ALTER TABLE nyc_streets ADD bbox mbr; UPDATE nyc_streets SET bbox = mbr(shape);
Gambar 11
Syntax untuk implementasi Minimum Bounding Rectangle.
10
Pada MonetDB tidak ada syntax yang dapat digunakan untuk mengetahui ukuran pada disk dari sebuah database pada MonetDB. Berbeda dengan PostgreSQL yang menyediakan syntax untuk mengetahui ukuran database pada disk. Jika kita ingin melihat ukuran dari database pada MonetDB, kita dapat membuka folder directory dari database yang kita buat. Untuk database ‘sig’ memiliki ukuran sebesar 21 MB yang berada pada folder directory: C:\skripsi
Input dan Hasil Query Query didapat dari modul workshop yang disediakan oleh situs OpenGeo3. Di dalam modul workshop diberikan materi dan latihan mengenai SQL spasial. Oleh karena itu, query yang digunakan untuk pengujian kinerja DBMS diambil dari modul tersebut. Modul workshop terbagi menjadi 33 section. Setiap section memiliki materi yang berbeda mulai dari pengenalan PostGIS, cara instalasi software OpenGeo Suite, membuat database spasial sampai dengan penjelasan dan latihan mengenai query. Oleh sebab itu, query yang ada pada modul diurutkan mulai dari yang sederhana sampai dengan yang kompleks sesuai dengan pembagian section dan tingkat kompleksitasnya. Query yang akan digunakan sebagai pengujian kinerja DBMS dikelompokkan menjadi tiga kelompok, yaitu query nonspasial sederhana, spasial sederhana, dan spasial kompleks. Masing-masing query dijalankan pada PostgreSQL (sql shell) dan MonetDB (client interface program). Query yang dimasukkan diulang sebanyak empat kali percobaan. Query ulangan ke-2, ke-3, dan ke-4 yang akan dilakukan pencatatan waktu yang dibutuhkan DBMS untuk mengeksekusi query. Query ulangan ke1 memiliki waktu eksekusi yang jauh lebih lama dibandingkan ulangan ke-2, ke-3, dan ke-4, sedangkan untuk ulangan ke-2, ke-3, dan ke-4 memiliki waktu eksekusi yang tidak jauh berbeda. Oleh karena itu, query ulangan ke-1 tidak masuk dalam pencatatan. Output dari proses eksekusi query pada kedua DBMS juga perlu dilakukan pencatatan. Hal ini bertujuan untuk menganalisis apakah terdapat perbedaan output dari kedua DBMS. Perbandingan fungsi spasial bagi kedua DBMS yang 3
http://workshops.opengeo.org
dilakukan adalah menganalisis apakah fungsi tersebut dapat dieksekusi dan mengeluarkan hasil dari eksekusi query yang dijalankan pada masing-masing DBMS. Query non-spasial sederhana adalah query untuk mengakses atribut (field) non-geometry. Tidak ada fungsi spasial yang digunakan dalam query. Tabel yang digunakan untuk pengujian query non-spasial sederhana ini adalah tabel ‘nyc_census_blocks’. Satuan waktu yang digunakan adalah millisecond (ms). Query spasial sederhana adalah query yang menggunakan fungsi spasial untuk mendapatkan hasil yang sesuai dengan fungsi spasialnya. Query ini mengakses field geometri dan atribut lainnya. Untuk query spasial, terdapat perbedaan penulisan syntax di dalam mendefinisikan fungsi spasial dalam PostgreSQL dan MonetDB. PostgreSQL menambahkan ST di depan fungsi spasialnya, sedangkan pada MonetDB tidak ditambahkan. Kemudian untuk mengakses field geometri, pada PostgreSQL didefinisikan dengan the_geom, sedangkan pada MonetDB didefinisikan dengan shape. Hal tersebut disesuaikan dengan nama field geometri pada masing-masing database. Query spasial kompleks ini menggunakan fungsi spasial dan syntax join untuk mengakses dua tabel berbeda. Dua field geometri dari dua tabel berbeda diakses secara bersamaan untuk query spasial kompleks. Jadi perbedaan antara query spasial sederhana dengan spasial kompleks adalah dalam penggunaan syntax join pada query spasial kompleks. Query non-spasial sederhana yang diujikan dapat dilihat pada Tabel 1. Sedangkan untuk waktu eksekusinya beserta output dicatat pada Tabel 2. Sebagai tambahan perbandingan waktu eksekusi kedua DBMS dapat dilihat pada Gambar 12 untuk query non-spasial sederhana. Query spasial sederhana yang diujikan dapat dilihat pada Tabel 3 dan Tabel 4 merupakan dokumentasi untuk waktu eksekusi dan output. Gambar 13 menunjukkan perbandingan waktu eksekusi untuk query spasial sederhana. Sedangkan untuk query spasial kompleks dapat dilihat pada Tabel 5 dan waktu eksekusi beserta output ditunjukkan pada Tabel 6. Gambar 14 merupakan grafik yang menunjukkan perbandingan waktu eksekusi untuk query spasial kompleks.
11
Tabel 1 Query non-spasial sederhana No Query
Fungsi
Query Non-Spasial Sederhana (PostgreSQL dan MonetDB)
1
Menghitung jumlah populasi di New York
SELECT Sum(popn_total) AS population FROM nyc_census_blocks;
2
Menghitung jumlah populasi dari Bronx
SELECT Sum(popn_total) AS population FROM nyc_census_blocks WHERE boroname = 'The Bronx';
3
Menghitung rata-rata dari jumlah orang yang tinggal pada masing-masing rumah
SELECT Sum(popn_total)/Sum(hous_total) AS popn_per_house FROM nyc_census_blocks;
4
Menghitung persentase populasi kulit putih pada masing-masing borough
SELECT boroname, 100 * Sum(popn_white)/Sum(popn_total) AS white_pct FROM nyc_census_blocks GROUP BY boroname;
Tabel 2 Hasil eksekusi query non-spasial sederhana No Query 1
Rataan Waktu (3x ulangan) MonetDB PostgreSQL 5.331 ms 39.855 ms
Output 8008278
8008278
2
5.626 ms
42.161 ms
1332650
1332650
3
5.882 ms
54.306 ms
2.650354
2.650354
4
12.284 ms
58.233 ms
MonetDB
Boroname The Bronx Brooklyn Manhattan Queens Staten Island
White_pct 29.8655 41.2006 54.3594 44.0807 77.5969
PostgreSQL
Boroname Brooklyn The Bronx Manhattan Queens Staten Island
White_pct 41.2006 29.8655 54.3594 44.0807 77.5969
Waktu (ms) 70 60 50 40 30 20 10 0 1 2 MonetDB
3 4 Query PostgreSQL
Gambar 12 Perbandingan waktu eksekusi untuk query non-spasial sederhana.
12
Tabel 3 Query spasial sederhana No Query
Fungsi
Query MonetDB
1
Menghitung luas area
SELECT Area(shape) FROM nyc_neighborhoods WHERE name = 'West Village';
SELECT ST_Area(the_geom) FROM nyc_neighborhoods WHERE name = 'West Village';
2
Menghitung total luas area dari Manhattan
SELECT Sum(Area(shape)) / 4047 FROM nyc_neighborhoods WHERE boroname = 'Manhattan';
SELECT Sum(ST_Area(the_geom)) / 4047 FROM nyc_neighborhoods WHERE boroname = 'Manhattan';
3
Menghitung total panjang jalan
SELECT Sum(Length(shape)) / 1000 FROM nyc_streets;
4
Menghitung panjang jalan Columbus Cir
SELECT Length(shape) FROM nyc_streets WHERE name = 'Columbus Cir';
SELECT Sum(ST_Length(the_geom)) / 1000 FROM nyc_streets; SELECT ST_Length(the_geom) FROM nyc_streets WHERE name = 'Columbus Cir';
5
Menghitung panjang jalan yang dikelompokkan bedasarkan tipe jalan
SELECT type, Sum(Length(shape)) AS length FROM nyc_streets GROUP BY type ORDER BY length DESC;
SELECT type, Sum(ST_Length(the_geom)) AS length FROM nyc_streets GROUP BY type ORDER BY length DESC;
6
Menampilkan geometri
SELECT AsText(shape) FROM nyc_streets WHERE name = 'Atlantic Commons';
SELECT ST_AsText(the_geom) FROM nyc_streets WHERE name = 'Atlantic Commons';
7
Mencari neighborhood borough
SELECT name, boroname FROM nyc_neighborhoods WHERE "Intersect"(
SELECT name, boroname FROM nyc_neighborhoods WHERE ST_Intersects( the_geom, ST_GeomFromText('LINESTRING(58 6782 4504202,586864 4504216)', 26918));
8
nilai
dan
Menghitung jarak dari sebuah titik ke sebuah garis
Query PostgreSQL
shape,GeomFromText('LINESTRING( 586782 4504202,586864 4504216)', 26918) ); SELECT Distance (GeomFromText('LINESTRING(586782 4504202,586864 4504216)', 26918), GeomFromText('POINT(583571 4506714)',26918));
SELECT ST_Distance (ST_GeomFromText('LINESTRING(58 6782 4504202,586864 4504216)', 26918), ST_GeomFromText('POINT(583571 4506714)',26918));
Tabel 4 Hasil eksekusi query spasial sederhana No Query
Rataan Waktu (3x ulangan)
Output
1 2
MonetDB 4.782 ms 6.595 ms
PostgreSQL 1.457 ms 1.266 ms
MonetDB 1044614.5296 13965.320
PostgreSQL 1044614.5303 13965.320
3
39.974 ms
32.516 ms
10418.905
10418.905
4
5.050 ms
8.285 ms
308.342
308.342
13
Lanjutan Tabel 4 Hasil eksekusi query sederhana 5
39.221 ms
34.321 ms
6
4.593 ms
8.858 ms
7
18.671 ms
1.789 ms
8
2.35 ms
0,658 ms
Type Length Residental 8629870.338 Motorway 403622.4781 Tertiary 360394.879 Motorway_link 294261.419 Secondary 276264.304 Unclassified 166936.372 Primary 135034.233 Footway 71798.488 Service 28337.635 Trunck 20353.582 Cycleway 8863.751 Pedestrian 4867.050 Construction 4803.082 Residential; 3661.575 motorway_link Trunk_link 3202.189 Primary_link 2492.574 Living_street 1894.639 Primary; 1367.766 residential; motorway_link, residential Undefined 380.539 Steps 282.745 Motorway_link 215.078 ; residential MULTILINESTRING((586781.70 158 4504202.1531, 586863.5196 4504215.988)) name Fort Green
Boroname Brooklyn
4076.845
Type Length Residental 8629870.338 Motorway 403622.4781 Tertiary 360394.879 Motorway_link 294261.419 Secondary 276264.304 Unclassified 166936.372 Primary 135034.233 Footway 71798.488 Service 28337.635 Trunck 20353.582 Cycleway 8863.751 Pedestrian 4867.050 Construction 4803.082 Residential; 3661.575 motorway_link Trunk_link 3202.189 Primary_link 2492.574 Living_street 1894.639 Primary; 1367.766 residential; motorway_link, residential Undefined 380.539 Steps 282.745 Motorway_link 215.078 ; residential MULTILINESTRING((586781.701 58 4504202.1531, 586863.5196 4504215.988)) name Fort Green 4076.845
Waktu (ms) 45 40 35 30 25 20 15 10 5 0 1 2 3 4 5 6 7 8 Query MonetDB
PostgreSQL
Gambar 13 Perbandingan waktu eksekusi untuk query spasial sederhana.
Boroname Brooklyn
14
Tabel 5 Query spasial kompleks No Query
Fungsi
Query MonetDB
Query PostgreSQL
1
Mencari lokasi stasiun kereta bawah tanah yang ada di Little Italy dan ada berapa rute yang tersedia
SELECT s.name, s.routes FROM nyc_subway_stations AS s JOIN nyc_neighborhoods AS n ON Contains(n.shape, s.shape) WHERE n.name = 'Little Italy';
SELECT s.name, s.routes FROM nyc_subway_stations AS s JOIN nyc_neighborhoods AS n ON ST_Contains(n.the_geom, s.the_geom) WHERE n.name = 'Little Italy';
2
Menghitung total populasi di Battery Park
SELECT Sum(popn_total) FROM nyc_neighborhoods AS n JOIN nyc_census_blocks AS c ON "Intersect"(n.shape, c.shape) WHERE n.name = 'Battery Park';
SELECT Sum(popn_total) FROM nyc_neighborhoods AS n JOIN nyc_census_blocks AS c ON ST_Intersects(n.the_geom, c.the_geom) WHERE n.name = 'Battery Park';
3
Menghitung kepadatan penduduk
SELECT n.name, Sum(c.popn_total) / (Area(n.shape) / 1000000.0) AS popn_per_sqkm FROM nyc_census_blocks AS c JOIN nyc_neighborhoods AS n ON "Intersect"(c.shape, n.shape) WHERE n.name = 'Upper West Side' OR n.name = 'Upper East Side' GROUP BY n.name, n.shape;
SELECT n.name, Sum(c.popn_total) / (ST_Area(n.the_geom) / 1000000.0) AS popn_per_sqkm FROM nyc_census_blocks AS c JOIN nyc_neighborhoods AS n ON ST_Intersects(c.the_geom, n.the_geom) WHERE n.name = 'Upper West Side' OR n.name = 'Upper East Side' GROUP BY n.name, n.the_geom;
Tabel 6 Hasil eksekusi query spasial kompleks No Query
Rataan Waktu (3x ulangan) MonetDB
PostgreSQL
1
29.746 ms
3.944 ms
2
3066 ms
11.051 ms
3
5500 ms
25.693 ms
Output MonetDB Name Spring St
PostgreSQL
Routes 6
Name Spring St
9928
Routes 6
9928
Name Upper East Side Upper West Side
Popn_per_sqkm 47943.359 39729.578
name Upper East Side Upper West Side
Waktu (ms) 6000 5000 4000 3000 2000 1000 0 1 MonetDB
2
3
Query
PostgreSQL
Gambar 14 Perbandingan waktu eksekusi untuk query spasial kompleks.
Popn_per_sqkm 47943.359 39739.578
15
Analisis Hasil Hasil dokumentasi untuk pencatatan waktu dan output dari uji query yang dieksekusi oleh kedua DBMS dapat dilihat pada Tabel 2, Tabel 4, dan Tabel 6. Dari tabel tersebut, dapat diketahui waktu yang dibutuhkan untuk mengeksekusi setiap query yang dimasukkan dan juga output dari proses eksekusi query. Tabel 2 merupakan dokumentasi dari waktu eksekusi dan output untuk query non-spasial sederhana yang diujikan pada kedua DBMS. Dapat dilihat pada Tabel 2 bahwa MonetDB memiliki waktu eksekusi lebih baik jika dibandingkan dengan PostgreSQL. Tabel 4 merupakan dokumentasi dari waktu eksekusi dan output untuk query spasial sederhana. PostgreSQL memiliki rata-rata waktu eksekusi yang lebih baik dibandingkan MonetDB untuk query spasial sederhana. Tabel 6 adalah dokumentasi dari waktu eksekusi dan output untuk query spasial kompleks. Untuk query ini, PostgreSQL masih unggul dibandingkan MonetDB karena waktu yang dibutuhkan oleh PostgreSQL untuk eksekusi query lebih baik dari MonetDB. Pada Gambar 12 dapat kita perhatikan dari empat query yang dieksekusi oleh kedua DBMS, MonetDB memiliki waktu eksekusi yang lebih cepat dari PostgreSQL. PostgreSQL memiliki waktu eksekusi yang lebih baik dibandingkan dengan MonetDB untuk query spasial sederhana yang dapat dilihat pada Gambar 13. Waktu eksekusi antara kedua DBMS untuk query spasial sederhana menunjukkan perbedaan yang tidak terlalu signifikan. Pada Gambar 14 menunjukkan bahwa PostgreSQL masih lebih cepat dalam mengeksekusi query spasial kompleks. Jika dibandingkan dengan MonetDB, maka terlihat sekali perbedaan waktu eksekusi. Kemudian peneliti mencoba untuk melihat perbedaan waktu eksekusi dari kedua DBMS dengan cara mengeksekusi query yang sama untuk tabel yang memiliki jumlah baris yang berbeda. Tabel tersebut disimpan pada database yang berbeda. Jadi ada empat database baru pada masing-masing DBMS, yaitu database ‘sample1’ yang berisi satu tabel dengan jumlah baris 36592, ‘sample2’ dengan 20000 baris, ‘sample3’ dengan 10000 baris, dan ‘sample4’ dengan 5000 baris. Data yang digunakan adalah data spasial nyc_census_blocks yang nantinya akan digunakan pada masing-masing database.
Data spasial nyc_census_blocks memiliki kolom atribut dengan jumlah baris hingga 36592. Data tersebut dilakukan perubahan sehingga sesuai dengan jumlah baris pada masing-masing database. Waktu (ms) 60 50 40 30 20 10 0 5000
10000 20000 36592 Baris
MonetDB Gambar 15
PostgreSQL
Perbandingan waktu eksekusi untuk tabel yang memiliki jumlah baris berbeda.
Query yang akan dieksekusi adalah query non-spasial sederhana untuk menghitung persentase total populasi kulit putih pada masing-masing borough: SELECT boroname, 100 * Sum(popn_white)/Sum(popn_total) AS white_pct FROM nyc_census_blocks GROUP BY boroname;
Pada Gambar 15 dapat kita melihat bahwa waktu eksekusi untuk MonetDB tidak mengalami perubahan yang signifikan. MonetDB memiliki waktu eksekusi yang tidak berbeda jauh untuk masing-masing tabel yang memiliki jumlah baris yang berbeda. Sedangkan pada PostgreSQL terlihat perbedaan waktu yang cukup signifikan untuk waktu eksekusi terhadap perubahan jumlah baris pada tabel bila dibandingkan dengan MonetDB. Skema penyimpanan field (kolom) geometri pada PostgreSQL menyerupai seperti model penyimpanan column-store DBMS. Field geometri disimpan terpisah pada satu tabel yang bernama ‘geometry_columns’. Tabel ‘geometry_columns’ merupakan tabel yang menyimpan seluruh field geometri dari setiap tabel. Oleh karena itu, untuk query spasial yang dieksekusi pada PostgreSQL, memiliki
16
waktu eksekusi yang cukup baik. Berbeda untuk query non-spasial sederhana dimana MonetDB memiliki waktu eksekusi yang lebih baik dari PostgreSQL. Hal ini dikarenakan untuk query non-spasial sederhana pada PostgreSQL, atribut yang tidak relevan dengan query akan ikut diakses dan mengakibatkan waktu eksekusi menjadi bertambah. Hal lainnya yang terkait dengan kecepatan proses eksekusi query adalah pengindeksan data yang dilakukan oleh kedua DBMS. Kemampuan pengindeksan data spasial yang dilakukan oleh kedua DBMS dapat berpengaruh kepada kecepatan proses pencarian untuk data spasial. Pengindeksan data spasial pada PostgreSQL menggunakan GiST (Generalized Search Tree) yang mengimplementasikan R-Tree. Pengindeksan data spasial pada PostgreSQL merupakan salah satu fasilitas yang dimiliki oleh PostGIS. Pengindeksan data spasial dengan menggunakan R-Tree dilakukan dengan membagi data ke dalam rectangle, subrectangle, sub-rectangle, dan seterusnya yang disebut dengan Minimum Bounding Rectangle (MBR). Pada MonetDB, untuk pengindeksan dilakukan secara otomatis dan adaptif. Pengindeksan pada MonetDB menggunakan hash index. Pengindeksan pada MonetDB ini dilakukan dengan memasukkan search key dari data spasial tersebut ke dalam fungsi hash yang kemudian disimpan pada tabel hash. Tabel hash tersebut menyerupai sebuah array. Untuk output hasil eksekusi query dari kedua DBMS tidak terdapat perbedaan seperti yang ditunjukkan pada Tabel 2, 4, dan 6. Dari ketiga jenis query yang dieksekusi, yaitu query non-spasial, spasial sederhana, dan kompleks memiliki kesamaan output. Untuk query spasial sederhana dan kompleks yang menggunakan fungsi spasial memiliki kesamaan output dari hasil eksekusi query. Fungsi spasial yang dimiliki PostgreSQL lebih lengkap dibandingkan MonetDB. Fungsi spasial yang ada pada pengujian query spasial seperti NumInteriorRings, DWithin, AsGeoJSON, dan NumGeometries tidak dapat dieksekusi oleh MonetDB karena belum diimplementasikan. Pada PostgreSQL, fungsi spasial tersebut dapat dieksekusi. Di samping itu, berdasarkan Tabel 4 dan Tabel 6 bahwa query spasial sederhana dan kompleks dengan fungsi spasial Intersect memiliki waktu yang sangat signifikan berbeda antara MonetDB dengan PostgreSQL. Dari semua fungsi spasial yang telah dieksekusi oleh kedua DBMS, perbedaan waktu eksekusinya
tidak berbeda jauh kecuali untuk fungsi spasial Intersect. MonetDB membutuhkan waktu yang lebih lama untuk mengeksekusi query dengan fungsi spasial Intersect dibandingkan dengan PostgreSQL. Oleh karena itu, untuk pengelompokan query spasial sederhana dan kompleks seharusnya dilihat dari waktu eksekusi yang berkaitan dengan fungsi spasial, contohnya seperti fungsi spasial Intersect. Jadi bukan lagi dilihat dari penggunaan syntax join.
SIMPULAN DAN SARAN Simpulan Sesuai dengan data yang digunakan dan berdasarkan tabel hasil pengujian, MonetDB lebih unggul dalam hal kinerja akses data dibandingkan PostgreSQL untuk query nonspasial sederhana. MonetDB memiliki waktu rata-rata lebih cepat untuk mengeksekusi query non-spasial sederhana. Untuk query spasial sederhana dan kompleks, PostgreSQL memiliki waktu yang lebih cepat untuk mengeksekusi query dibandingkan dengan MonetDB. Berdasarkan pada Gambar 15, MonetDB memiliki perubahan waktu terhadap jumlah baris pada tiap-tiap tabel yang tidak terlalu signifikan. Berbeda dengan PostgreSQL yang memiliki perubahan waktu secara signifikan. Fungsi spasial yang dimiliki oleh PostgreSQL jauh lebih lengkap dan banyak jika dibandingkan dengan MonetDB. Saran Penelitian selanjutnya diharapkan dapat menggunakan PostgreSQL sebagai DBMS untuk mengembangkan sebuah Sistem Informasi Geografis (SIG). Karena jika dilihat dari hasil waktu eksekusi untuk query spasial bahwa PostgreSQL memiliki waktu yang baik. Di samping itu perlu dipelajari lebih lanjut dari MonetDB untuk mengetahui cara mengoptimalkan kinerja dalam mengeksekusi query spasial.
DAFTAR PUSTAKA Andurkar AD. 2012. Implementation of column-oriented database in PostgreSQL for optimization of read-only queries. Computer Science and Information Technology 2(3): 437-452.
17
Chang KT. 2008. Introduction to Geographic Information Systems. Ed ke-4. New York: McGraw-Hill.
MonetDB. 2012. Column Store Features [internet]. http://www.monetdb.org [20 Nov 2012].
Findthebest. 2012. Unbiased, Data-driven Comparisons [internet]. http://databasemanagement-systems.findthebest.com [27 Des 2012].
PostGIS Team. 2010. PostGIS 1.5.1 Manual [internet]. http://postgis.refractions.net [9 Okt 2012]
Guttman A. 1984. R-Trees a dynamic index structure for spatial searching. Di dalam: Proceedings of ACM SIGMOD International Conference on Management Data; Berkeley, 1984. hlm 47-57. Matthew N, Stones R. 2005. Beginning Databases with PostgreSQL. Ed ke-2. New York: Springer-Verlag, Inc. Mehta DP, Sahni S. 2005. Handbook of Data Structures and Applications. New York: Chapman & Hall/CRC.
PostgreSQL. 2012. The World’s Most Advanced Open Source Database [internet]. http://www.postgresql.org/ [29 Des 2012]. PostgreSQL Global Development Group. 2009. PostgreSQL 8.4.1.4 Documentation [internet]. http://www.postgresql.org/files/documen tation [23 Okt 2012]. Vermeij M, Quak W, Kersten M, Nes N. 2008. MonetDB, a novel spatial columnstore DBMS. Di dalam: Proceedings of Free and Open Source Software for Geospatial (FOSS4G) Conference; Vancouver, 2008. hlm 193-199.
Penguji: 1. Imas S Sitanggang S.Si., M.Kom. 2. Annisa S.Kom., M.Kom.