bab5

54
BAB V IMPLEMENTASI 5.1 Implementasi Sistem Sistem yang dibangun meliputi dua kelompok yaitu sistem yang ada di DPW dan sistem yang tersebar di DPC. Pada sisi DPW, kebutuhan hardware, jaringan dan koneksi ke internet sudah terimplementasi dengan baik, tinggal menambahkan Server Basis Data dan Web Server yang akan dipakai untuk menempatkan sistem yang dibangun ini. Pada sisi DPW sistem harus 24jam terkoneksi ke internet, dimana DPCDPC yang akan melakukan koneksi data ke basis data di DPW tidak mengalami kendala begitu juga end user yang mengakses data melalui internet akan terlayani dengan baik. Untuk itu diperlukan sebuah IP PUBLIC untuk mengatasi hal tersebut. DPC dalam hal ini bersifat mobile dan tidak selamanya terkoneksi ke internet, sehingga kebutuhan koneksi ke internet hanya digunakan untuk melakukan sinkronisasi data dari dan ke DPW serta bersifat temporer. 5.1.1 Kebutuhan Perangkat Keras Kebutuhan perangkat keras untuk DPW bisa dilihat pada tabel 5.1. Tabel 5.1 Perangkat Keras DPW Nama Perangkat Keterangan Server PC Server dengan spesifikasi : Processor : Intel Xeon 3000 series Memory : 8GB ECC Perangkat Jaringan dan Hotspot Hotspot Router DLink AirPlus G+ 2,4GHz DWL2000AP+ Terminal PC dengan fasilitas browser dan koneksi jaringan Perangkat Koneksi ke Internet PCRouter, line telpon untuk koneksi menggunakan Speedy

description

penelitian

Transcript of bab5

Page 1: bab5

BAB V 

IMPLEMENTASI 

5.1 Implementasi Sistem 

Sistem  yang  dibangun meliputi  dua  kelompok  yaitu  sistem  yang  ada  di 

DPW  dan  sistem  yang  tersebar  di  DPC.  Pada  sisi  DPW,  kebutuhan  hardware, 

jaringan  dan  koneksi  ke  internet  sudah  terimplementasi  dengan  baik,  tinggal 

menambahkan  Server  Basis  Data  dan  Web  Server  yang  akan  dipakai  untuk 

menempatkan  sistem  yang  dibangun  ini.  Pada  sisi  DPW  sistem  harus  24jam 

terkoneksi  ke  internet, dimana DPC‐DPC  yang  akan melakukan  koneksi data  ke 

basis data di DPW tidak mengalami kendala begitu juga end user yang mengakses 

data melalui internet akan terlayani dengan baik. Untuk itu diperlukan sebuah IP 

PUBLIC untuk mengatasi hal tersebut.  

DPC  dalam  hal  ini  bersifat  mobile  dan  tidak  selamanya  terkoneksi  ke 

internet,  sehingga  kebutuhan  koneksi  ke  internet  hanya  digunakan  untuk 

melakukan sinkronisasi data dari dan ke DPW serta bersifat temporer. 

5.1.1 Kebutuhan Perangkat Keras 

Kebutuhan perangkat keras untuk DPW bisa dilihat pada tabel 5.1. 

 

Tabel 5.1 Perangkat Keras DPW 

Nama Perangkat   Keterangan Server   PC Server dengan spesifikasi : 

Processor :  Intel Xeon 3000 series Memory   :  8GB ECC 

Perangkat Jaringan dan Hotspot 

Hotspot Router D‐Link AirPlus G+ 2,4GHz DWL‐2000AP+ 

Terminal  PC dengan fasilitas browser dan koneksi jaringan Perangkat Koneksi ke Internet 

PC‐Router,  line telpon untuk koneksi menggunakan Speedy 

 

Page 2: bab5

  84

Kebutuhan perangkat keras untuk DPC bisa dilihat pada tabel 5.2. 

Tabel 5.2 Perangkat Keras DPC 

Nama Perangkat  Keterangan Server  PC/Laptop dengan spesifikasi: 

Processor: Intel Dual Core T2250 1,7GHz Memory : 1GB 

Perangkat jaringan dan Hotspot 

Hotspot router  D‐Link AirPlus G+ 2,4GHz DWL‐2000AP+ 

Terminal  PC dengan fasilitas browser dan koneksi jaringan Perangkat koneksi ke internet 

Line Telpon 

Modem GSM untuk SMS Gateway 

Modem GSM ZTE 

 

5.1.2 Kebutuhan Perangkat Lunak 

Kebutuhan perangkat  lunak meliputi Web  Server, Database  Server  serta 

SMS  Gateway.  Dalam  penelitian  ini  Web  Server  dan  Database  Server 

menggunakan AppServ Open Project ‐ 2.5.7 for Windows dengan perincian pada 

tabel 5.3 

Tabel 5.3 Kebutuhan Perangkat Lunak 

Kebutuhan Perangkat Lunak  Keterangan Web Server  Apache Web Server Versi 2.2.3 Script Pemrograman  PHP Script Language Versi 5.1.6 Database Server  MySQL Database versi 5.0.24a Sistem Operasi  Window XP sp2 SMS Gateway  Gammu  

*khusus untuk DPC  

Perangkat  lunak  ini  dipasang  pada  sisi  DPW maupun  DPC.  Untuk  DPC 

ditambahkan  SMS  Gateway  menggunakan  software  gammu  yang  digunakan 

untuk mengelola sms dari saksi pemilu. 

 

 

Page 3: bab5

  85

5.1.3 Instalasi Jaringan 

Instalasi jaringan pada DPW seperti sudah digambarkan pada gambar 4.8  

sudah tersedia di DPW, meliputi: 

1. Server       : Menggunakan PC Server 

2. Hotspot    : D‐Link AirPlus G+ 2,4GHz DWL‐2000AP+ 

3. Internet    : menggunakan jaringan speedy 2GB 

Instalasi  jaringan pada DPC seperti sudah digambarkan pada gambar 4.9 

meliputi: 

1. Server    : Menggunakan Laptop atau PC 

2. SMS Gateway  :Menggunakan software Gammu 

3. Hotspot   : D‐Link AirPlus G+ 2,4GHz DWL‐2000AP+ 

4. Internet   : Menggunakan jaringan Speedy 

5.1.4 Desain Tabel 

Basis Data  untuk mendukung  aplikasi  ini  di  buat  dengan menggunakan 

MySQL Database versi 5.0.24a menggunakan engine  InnoDB, dimana tabel  jenis 

ini mendukung penggunaan constraint foreign key yang sangat diperlukan dalam 

penelitian  ini. Untuk beberapa tabel yang tidak memanfaatkan constraint masih 

digunakan  jenis MyISAM dengan alasan untuk kecepatan proses. Sistem Partial 

Replica yang diangkat dalam penelitian  ini menggunakan basis data yang  sama 

untuk  master  maupun  slave  (homogen).  Tabel‐tabel  yang  digunakan  dalam 

sistem  ini  disimpan  dalam  basis  data  bernama  ‘pileg’  yang  dapat  dijelaskan 

sebagai berikut: 

 

1. Tabel Dapil 

Tabel  ini  digunakan  untuk menyimpan  data  daerah  pemilihan,    dengan 

primary key kddapil, berikut ini struktur dan contoh data dari tabel dapil. 

 

Page 4: bab5

  86

mysql> describe dapil; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | kddapil | varchar(7) | NO | PRI | | | | nama | varchar(40) | YES | | NULL | | | level | tinyint(1) | NO | | | | +---------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) mysql> select * from dapil limit 0,10; +---------+-------------------------------+-------+ | kddapil | nama | level | +---------+-------------------------------+-------+ | 34 | Dapil Pusat Propinsi DIY | 1 | | 3401 | Dapil 1 DIY Yogyakarta (Kota) | 2 | | 34011 | Dapil 1 Kota | 3 | | 34012 | Dapil 2 Kota | 3 | | 34013 | Dapil 3 Kota | 3 | | 34014 | Dapil 4 Kota | 3 | | 34015 | Dapil 5 Kota | 3 | | 3402 | Dapil 2 DIY Bantul | 2 | | 34021 | Dapil 1 Bantul | 3 | | 34022 | Dapil 2 Bantul | 3 | +---------+-------------------------------+-------+ 10 rows in set (0.00 sec)

2. Tabel kodelokasi 

Tabel  kodelokasi  digunakan  untuk  menyimpan  data  induk  lokasi  dari 

penyelenggaraan  pemilu  dari  tingkat  pusat  sampai  tingkat  desa/kelurahan, 

dengan  kdlokasi  sebagai  primary  key,  dan  tabel  ini  memiliki  ketergantungan 

terhadap tabel dapil  pada field dp1 untuk dapil pusat atau DPR Pusat, dp2 untuk 

dapil  tingkat  I  atau  DPRD  Propinsi  dan  dp3  untuk  dapil  tingkat  II  atau  DPRD 

Kabupaten. Berikut ini struktur dan contoh data dari tabel kodelokasi. 

mysql> describe kodelokasi; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | kdlokasi | varchar(8) | NO | PRI | | | | nama | varchar(30) | YES | | NULL | | | dp1 | varchar(8) | YES | MUL | NULL | | | dp2 | varchar(8) | YES | MUL | NULL | | | dp3 | varchar(8) | YES | MUL | NULL | | | level | smallint(2) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+

 

Page 5: bab5

  87

6 rows in set (0.02 sec) mysql> select * from kodelokasi limit 0,10; +----------+---------------+------+------+-------+-------+ | kdlokasi | nama | dp1 | dp2 | dp3 | level | +----------+---------------+------+------+-------+-------+ | 34 | DI Yogyakarta | NULL | NULL | NULL | 2 | | 3401 | Kulon Progo | 34 | 3403 | NULL | 3 | | 340101 | Samigaluh | 34 | 3403 | 34051 | 4 | | 34010101 | Banjarsari | 34 | 3403 | 34051 | 5 | | 34010102 | Gerbosari | 34 | 3403 | 34051 | 5 | | 34010103 | Kebon Harjo | 34 | 3403 | 34051 | 5 | | 34010104 | Ngargosari | 34 | 3403 | 34051 | 5 | | 34010105 | Pagerharjo | 34 | 3403 | 34051 | 5 | | 34010106 | Purwoharjo | 34 | 3403 | 34051 | 5 | | 34010107 | Sidoharjo | 34 | 3403 | 34051 | 5 | +----------+---------------+------+------+-------+-------+ 10 rows in set (0.00 sec)

3. Tabel tps 

Tabel  tps menampung data  tps per desa/kelurahan, dengan primary key 

komposit  (kdlokasi+notps),  tabel  ini  memiliki  ketergantungan  terhadap  tabel 

kodelokasi pada field kdlokasi. Field nama berisi nama tps, lelaki berisi jumlah dpt 

lelaki dan wanita berisi  jumlah dpt wanita. Berikut  ini struktur dan contoh data 

dari tabel tps. 

mysql> describe tps; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | kdlokasi | varchar(8) | NO | PRI | | | | notps | varchar(3) | NO | PRI | | | | nama | varchar(30) | YES | | NULL | | | lelaki | int(11) | YES | | NULL | | | wanita | int(11) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 5 rows in set (0.02 sec) mysql> select * from tps order by kdlokasi,notps limit 0,10; +----------+-------+-------------+--------+--------+ | kdlokasi | notps | nama | lelaki | wanita | +----------+-------+-------------+--------+--------+ | 34010501 | 01 | banunan | 100 | 100 | | 34020101 | 001 | isian yaa | 23 | 32 | | 34020101 | 002 | isian 2 | 89 | 89 | | 34040104 | 001 | BLUMBANG | 136 | 162 | | 34040104 | 002 | SALAM | 152 | 167 |

 

Page 6: bab5

  88

| 34040104 | 003 | DERMO | 130 | 163 | | 34040104 | 004 | KEMBANG | 101 | 111 | | 34040104 | 005 | KANTONGAN A | 125 | 132 | | 34040104 | 006 | KANTONGAN B | 206 | 202 | | 34040104 | 007 | SOKA TEGAL | 122 | 138 | +----------+-------+-------------+--------+--------+ 10 rows in set (0.00 sec)

4. Tabel dpt 

Tabel dpt merupakan detail dari pemilih untuk masing‐masing  tps,  tabel 

dengan primary key nip, dengan foreign key kdlokasi dan notps. Tabel ini memiliki 

ketergantungan  terhadap  tabel  tps  pada  field  komposit  (kdlokasi+notps).  Nip 

merupakan  nomor  induk  penduduk  secara  nasional,  Berikut  ini  struktur  dan 

contoh data dari tabel berikut ini. 

mysql> describe dpt; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | nip | varchar(20) | NO | PRI | | | | kdlokasi | varchar(8) | YES | MUL | NULL | | | notps | varchar(3) | YES | MUL | NULL | | | nama | varchar(50) | YES | | NULL | | | sex | varchar(15) | YES | | NULL | | | tgllahir | date | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 6 rows in set (0.02 sec) mysql> select * from dpt limit 0,10; +------------------+----------+-------+----------------+------+----------+ | nip | kdlokasi | notps | nama | sex | tgllahir | +------------------+----------+-------+----------------+------+----------+ | 3404090101680002 | 34041004 | 003 | SARJANA | Lk | NULL | | 3404090102630005 | 34041004 | 003 | SUHANA | Lk | NULL | | 3404090102670001 | 34041004 | 004 | MANGUN SARJONO | Lk | NULL | | 3404090102750001 | 34041004 | 002 | WARSONO | Lk | NULL | | 3404090102750003 | 34041004 | 003 | SANTOSO | Lk | NULL | | 3404090104710001 | 34041004 | 003 | PONIRIN | Lk | NULL | | 3404090105820005 | 34041004 | 002 | TRI MARYANTO | Lk | NULL | | 3404090106860002 | 34041004 | 001 | WASIS SUSIANTO | Lk | NULL | | 3404090107280005 | 34041004 | 003 | ATMO WIYARJO | Lk | NULL | | 3404090107530008 | 34041004 | 002 | ARJO SUPARNO | Lk | NULL | +------------------+----------+-------+----------------+------+----------+ 10 rows in set (0.00 sec)

5. Tabel Saksi  

Tabel  saksi  digunakan  untuk menampung  data  saksi  pemilu,  tabel    ini 

 

Page 7: bab5

  89

mempunyai  ketergantungan  terhadap  tabel  tps  pada  field  kdlokasi+notps, 

adapun primary  key dalam  tabel  ini  adalah nohp. Adapun  struktur dan  contoh 

datanya adalah sebagai berikut: 

mysql> describe saksi; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | nohp | varchar(15) | NO | PRI | | | | kdlokasi | varchar(8) | YES | MUL | NULL | | | notps | varchar(3) | YES | MUL | NULL | | | nama | varchar(50) | YES | | NULL | | | status | varchar(20) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 5 rows in set (0.00 sec) mysql> select * from saksi; +----------------+----------+-------+------+--------+ | nohp | kdlokasi | notps | nama | status | +----------------+----------+-------+------+--------+ | +6281293345405 | 34010501 | 001 | Abah | saksi | | 081328645 | 34010501 | 001 | joni | saksi | | +62392657405 | 34040901 | 001 | anwar| saksi | +----------------+----------+-------+------+--------+ 2 rows in set (0.00 sec)

6. Tabel sms 

Berisikan data tentang sms saksi yang didapat dari proses tigger dari tabel 

inbox  dari  SMS Gateway.  Adapun  struktur  dan  contoh  datanya  adalah  sebagai 

berikut: 

mysql> describe sms; +-------+------------+----+---+-------------------+--------------+ | Field | Type |Null|Key| Default | Extra | +-------+------------+----+---+-------------------+--------------+ | id | int(11) |YES |PRI| NULL |auto_increment| | nohp | varchar(15)|YES |MUL| NULL | | | tgl | timestamp |YES | | CURRENT_TIMESTAMP | | | isi | text |YES | | NULL | | +-------+------------+----+---+-------------------+--------------+ 3 rows in set (0.02 sec) mysql> select * from sms order by tgl desc limit 0,10; +----+--------------+---------------------+---------------------+ | id | nohp | tgl | isi | +----+--------------+---------------------+---------------------+ | 27 | +62392657405 | 2010-01-29 23:46:17 | SUARAX08X2X02X11111 |

 

Page 8: bab5

  90

| 26 | +62392657405 | 2010-01-29 23:45:52 | SUARAX08X2X00X100 | | 25 | +62392657405 | 2010-01-29 23:28:02 | SUARAx08x2x02x150 | | 24 | +62392657405 | 2010-01-29 23:24:35 | SUARAx08x2x02x150 | | 23 | +62392657405 | 2010-01-29 23:17:44 | SUARAx08x2x00x100 | | 22 | +62392657405 | 2010-01-29 23:14:52 | SUARAx08x3x00x555 | | 21 | +62392657405 | 2010-01-29 21:24:27 | SUARAx08x2x77x777 | | 20 | +62392657405 | 2010-01-29 21:18:08 | SUARAx08x2x00x1920 | | 19 | +62392657405 | 2010-01-29 21:08:42 | SUARAx08x2x00x100 | | 18 | +62392657405 | 2010-01-29 21:05:50 | SUARAx08x1x00x100 | +----+--------------+---------------------+---------------------+ 10 rows in set (0.00 sec)

7. Tabel suaratidaksah 

Tabel suaratidaksah berisikan data tentang pelaporan sms dari saksi di tps 

yang telah di validasi. Data yang masuk merupakan data suara selain suara sah, 

meliputi  kertas  suara  rusak,  kertas  suara  dipakai,  kertas  suara  sisa  dll. Adapun 

struktur dan contoh datanya adalah sebagai berikut: 

mysql> describe suaratidaksah; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | kdlokasi | varchar(8) | NO | PRI | | | | notps | varchar(3) | NO | PRI | | | | keterangan | varchar(10) | NO | PRI | | | | tingkat | varchar(8) | NO | PRI | | | | jumlah | int(11) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 5 rows in set (0.00 sec) mysql> select * from suaratidaksah; +----------+-------+------------+---------+--------+ | kdlokasi | notps | keterangan | tingkat | jumlah | +----------+-------+------------+---------+--------+ | 34040901 | 001 | GUGUR | 1 | 35 | | 34040901 | 001 | PAKAI | 4 | 5 | | 34040901 | 001 | RUSAK | 2 | 35 | | 34040901 | 001 | SISAK | 1 | 30 | +----------+-------+------------+---------+--------+ 4 rows in set (0.00 sec)

8. Tabel suara 

Tabel suara adalah tabel akhir penghitungan suara, tabel  ini didapat dari 

proses trigger pada tabel sms, dimana tabel suara ini akan menampung suara sah 

dari  peserta  pemilu  (caleg)  untuk  tiap  tps. Masing‐masing  caleg  akan memiliki 

 

Page 9: bab5

  91

satu  rekaman  untuk  satu  tps. Dengan  primary  key    komposit  (kdlokasi+notps), 

tabel  ini  memiliki  ketergantungan  terhadap  tabel  tps  dengan  field  komposit 

(kdlokasi+notps) serta ketergantungan terhadap tabel caleg dengan field idcaleg. 

Adapun struktur dan contoh datanya adalah sebagai berikut: 

mysql> describe suara; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | kdlokasi | varchar(8) | NO | PRI | | | | notps | varchar(3) | NO | PRI | | | | idcaleg | varchar(10) | NO | MUL | | | | suara | int(11) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) mysql> select * from suara; +----------+-------+----------+-------+ | kdlokasi | notps | idcaleg | suara | +----------+-------+----------+-------+ | 34020101 | 001 | 00010001 | 200 | | 34040101 | 001 | 08030025 | 300 | | 34040101 | 002 | 08010051 | 1000 | | 34040901 | 001 | 00010008 | 1500 | +----------+-------+----------+-------+ 4 rows in set (0.00 sec) mysql> \t

9. Tabel advokasi 

Tabel advokasi, adalah  tabel hasil  trigger dari  tabel  sms, dimana  isi dari 

tabel ini memiliki ketergantungan terhadap tabel saksi dengan field nohp, dengan 

primary  key  komposit  (nohp+tgl),  tabel  ini menampung  semua  sms  dari  saksi 

yang tidak bisa di masukkan ke tabel suara maupun tabel suaratidaksah. Adapun 

struktur dan contoh datanya adalah sebagai berikut: 

mysql> describe advokasi; +-------+-------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+-------------------+----------------+ | nohp | varchar(15) | NO | PRI | | | | tgl | timestamp | YES | PRI | CURRENT_TIMESTAMP | | | isi | text | YES | | NULL | | +-------+-------------+------+-----+-------------------+----------------+ 4 rows in set (0.00 sec)

 

Page 10: bab5

  92

mysql> select * from advokasi; +----+--------------+---------------------+----------------------------------------------------------------+ | id | nohp | tgl | isi | +----+--------------+---------------------+-------------------------------------------------+ | 1 | @nohp | 2010-01-29 17:30:43 | @kunci | | 2 | +62392657405 | 2010-01-29 17:31:48 | SUARA biji | | 3 | +62392657405 | 2010-01-29 17:49:03 | select kdlokasi from saksi where nohp=@nohp | | 4 | +62392657405 | 2010-01-30 01:17:51 | TPS KAMI SIAP MENGHITUNG, MOHON DOA ANTUM SEMUA | +----+--------------+---------------------+-------------------------------------------------+

4 rows in set (0.00 sec)

10. Tabel dewan 

Tabel dewan, menampung data  tentang  tingkatan  atau  kelompok posisi 

pemilihan  suara, meliputi  DPD,  DPR  dari  pusat,  propinsi  dan  kabupaten/kota. 

Dengan primary key  tingkat,  tabel  ini  sifatnya hanya  sebagai denormasilasi dari 

tabel  caleg  dalam  menentukan  posisi  pemilihan  suara.  Adapun  struktur  dan 

contoh datanya adalah sebagai berikut: 

mysql> describe dewan; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | tingkat | varchar(8) | NO | PRI | | | | ket | varchar(40) | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> select * from dewan; +---------+-----------------------------------+ | tingkat | ket | +---------+-----------------------------------+ | DPD | Dewan Perwakilan Daerah | | DPR | Dewan Perwakilan Rakyat Pusat | | DPRDI | Dewan Perwakilan Rakyat Propinsi | | DPRDII | Dewan Perwakilan Rakyat Kabupaten | +---------+-----------------------------------+ 4 rows in set (0.00 sec) mysql> \t

11. Tabel caleg 

Tabel  caleg,  merupakan  tabel  untuk  menampung  data  calon  anggota 

legislatif yang diusulkan partai atau Daerah untuk posisi DPD, dengan primary key 

idcaleg, dengan ketergantungan terhadap tabel partai dengan field nopartai, dan 

tabel dapil dengan field kddapil serta tabel dewan dengan field tingkat.  Adapun 

 

Page 11: bab5

  93

struktur dan contoh datanya adalah sebagai berikut: 

mysql> describe caleg; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | idcaleg | varchar(10) | NO | PRI | | | | nopartai | varchar(2) | YES | MUL | NULL | | | nama | varchar(50) | YES | | NULL | | | tgllahir | date | YES | | NULL | | | sex | varchar(15) | YES | | NULL | | | kddapil | varchar(7) | YES | MUL | NULL | | | tingkat | varchar(8) | YES | MUL | NULL | | | nu | varchar(2) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 8 rows in set (0.00 sec) mysql> select * from caleg limit 0,10; +----------+----------+----------------------------------+----------+------+---------+---------+------+ | idcaleg | nopartai | nama | tgllahir | sex | kddapil | tingkat | nu | +----------+----------+----------------------------------+----------+------+---------+---------+------+ | 00010001 | 00 | Drs. HA Hafid Asrom, MM | NULL | NULL | 34 | DPD | 01 | | 00010002 | 00 | H. Cholid Mahmud, ST, MT | NULL | NULL | 34 | DPD | 02 | | 00010003 | 00 | GKR Hemas | NULL | NULL | 34 | DPD | 03 | | 00010004 | 00 | Idham Ibty | NULL | NULL | 34 | DPD | 04 | | 00010005 | 00 | Muhammad Afnan Hadi Kusumo | NULL | NULL | 34 | DPD | 05 | | 00010006 | 00 | Anwar, SH | NULL | NULL | 34 | DPD | 06 | | 00010007 | 00 | H. Soetarjo Soerjo Goeritno, BSc | NULL | NULL | 34 | DPD | 07 | | 00010008 | 00 | Drs. H Subechi, MM, Msi | NULL | NULL | 34 | DPD | 08 | | 00010009 | 00 | Drs. H. Sugito, Msi | NULL | NULL | 34 | DPD | 09 | | 00010010 | 00 | Sulistya, SH | NULL | NULL | 34 | DPD | 10 | +----------+----------+----------------------------------+----------+------+---------+---------+------+

10 rows in set (0.00 sec)

12. Tabel partai 

Tabel  partai  adalah  tabel  yang  menampung  data  partai‐partai  peserta 

pemilu  legislatif, dengan primary key nopartai. Tabel  ini sebagai acuan dari tabel 

caleg. Adapun struktur dan contoh datanya adalah sebagai berikut: 

mysql> select * from partai limit 0,10; +----------+-----------------------------------------+ | nopartai | nama | +----------+-----------------------------------------+ | 00 | DPD RI | | 01 | Partai Hati Nurani Rakyat | | 02 | Partai Karya Peduli Bangsa | | 03 | Partai Pengusaha dan Pekerja Indonesia | | 04 | Partai Peduli Rakyat Nasional | | 05 | Partai Gerakan Indonesia Raya | | 06 | Partai Barisan Nasional | | 07 | Partai Keadilan dan Persatuan Indonesia | | 08 | Partai Keadilan Sejahtera | | 09 | Partai Amanat Nasional | +----------+-----------------------------------------+ 10 rows in set (0.00 sec)

 

Page 12: bab5

  94

13. Tabel link 

Tabel  link adalah tabel yang menampung alamat‐alamat  link website  lain 

untuk mendukung  interface dari sistem yang dibangun  ini. Adapun struktur dan 

contoh datanya adalah sebagai berikut: 

mysql> describe link; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | link | varchar(30) | NO | PRI | | | | ket | varchar(30) | NO | | | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> select * from link limit 0,10; +-------------------------+------------------+ | link | ket | +-------------------------+------------------+ | http://pk-sejahtera.org | PK Sejahtera | | http://pks-jogja.org | PKS Jogja | | http://akprind.ac.id | IST Akprind Joga | | http://mkom.ugm.ac.id | Mkom UGM | +-------------------------+------------------+ 4 rows in set (0.00 sec)

14. Tabel brita 

Tabel  brita  adalah  tabel  yang  menampung  data  berita  dari  user  yang 

memiliki hak untuk menuliskan berita ke sistem ini. Adapun struktur dan contoh 

datanya adalah sebagai berikut: 

mysql> describe brita; +---------+--------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | tgl | timestamp | YES | | CURRENT_TIMESTAMP | | | judul | varchar(30) | NO | | | | | author | varchar(15) | NO | | | | | utama | varchar(150) | NO | | | | | lengkap | longtext | NO | | | | | dibaca | tinyint(3) | NO | | | | | aktiv | tinyint(1) | YES | | 0 | | +---------+--------------+------+-----+-------------------+----------------+ 8 rows in set (0.00 sec)

 

Page 13: bab5

  95

mysql> select id,tgl,judul,author from brita limit 0,10; +----+---------------------+------------------+--------+ | id | tgl | judul | author | +----+---------------------+------------------+--------+ | 3 | 2010-01-06 06:23:58 | isi dikelas | jack | | 5 | 2010-01-06 06:23:53 | judulxxx | jack | | 7 | 2010-01-06 06:24:03 | judulxxx | jack | | 9 | 2010-01-06 06:57:42 | judulxxx | jack | | 10 | 2010-01-06 06:24:24 | judulxxx | jack | | 13 | 2010-01-09 16:31:19 | ssss | tiga | | 14 | 2010-01-10 17:14:17 | ahad istimewa | jack | | 16 | 2010-01-10 18:43:53 | semalam begadang | jack | +----+---------------------+------------------+--------+ 8 rows in set (0.00 sec) mysql>

15. Tabel login 

Tabel  login,  digunakan  untuk  menampung  data‐data  user  yang 

menggunakan sistem ini, dengan primary key  field pemakai, adapun struktur dan 

contoh datanya adalah sebagai berikut: 

mysql> describe login; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | pemakai | varchar(15) | NO | PRI | | | | kunci | varchar(15) | YES | | NULL | | | kapan | varchar(30) | YES | | NULL | | | aktif | tinyint(1) | YES | | NULL | | | darimana | varchar(15) | YES | | NULL | | | sidnya | varchar(50) | YES | | NULL | | | level | tinyint(1) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 7 rows in set (0.00 sec) mysql> select * from login limit 0,10; +---------+--------+-------------------+-------+----------+--------+-------+ | pemakai | kunci | kapan | aktif | darimana | sidnya | level | +---------+--------+-------------------+-------+----------+--------+-------+ | bejo | slamet | NULL | NULL | NULL | NULL | 1 | | data | data | NULL | 0 | NULL | NULL | 2 | | dua | | 27 Jan 2010 06:52 | 0 | NULL | | 2 | | jack | NULL | NULL | NULL | NULL | NULL | 3 | | tiga | | NULL | NULL | NULL | NULL | 3 | +---------+--------+-------------------+-------+----------+--------+-------+ 5 rows in set (0.00 sec) mysql> \t

 

Page 14: bab5

  96

16. Tabel inbox 

Tabel  inbox  adalah  tabel  dari  aplikasi  SMS  Gateway,  yang menampung 

semua data  sms  yang masuk. Tabel  ini  sebagai  sumber data  input melaui  sms, 

dengan menggunakan trigger after insert, tabel ini akan menyebarkan datanya ke 

tabel sms. Berikut ini adalah struktur dan contoh datanya. 

mysql> describe inbox\G *************************** 1. row *************************** Field: UpdatedInDB Type: timestamp Null: YES Key: Default: CURRENT_TIMESTAMP Extra: *************************** 2. row *************************** Field: ReceivingDateTime Type: timestamp Null: YES Key: Default: 0000-00-00 00:00:00 Extra: *************************** 3. row *************************** Field: Text Type: text Null: NO Key: Default: Extra: *************************** 4. row *************************** Field: SenderNumber Type: varchar(20) Null: NO Key: Default: Extra: *************************** 5. row *************************** Field: Coding Type: enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression') Null: NO Key: Default: 8bit Extra: *************************** 6. row *************************** Field: UDH

 

Page 15: bab5

  97

Type: text Null: NO Key: Default: Extra: *************************** 7. row *************************** Field: SMSCNumber Type: varchar(20) Null: NO Key: Default: Extra: *************************** 8. row *************************** Field: Class Type: int(11) Null: NO Key: Default: -1 Extra: *************************** 9. row *************************** Field: TextDecoded Type: varchar(160) Null: NO Key: Default: Extra: *************************** 10. row *************************** Field: ID Type: int(11) unsigned Null: NO Key: PRI Default: NULL Extra: auto_increment *************************** 11. row *************************** Field: RecipientID Type: text Null: NO Key: Default: Extra: *************************** 12. row *************************** Field: Processed Type: enum('false','true') Null: NO Key: Default: false Extra: 12 rows in set (0.00 sec)

 

Page 16: bab5

  98

mysql> select receivingdatetime,sendernumber,textdecoded from inbox limit 15,10; +---------------------+----------------+--------------------------------------------------------------------+ | receivingdatetime | sendernumber | textdecoded | +---------------------+----------------+--------------------------------------------------------------------+ | 2009-04-09 07:34:52 | +6281392374657 | Amin... Trimakasih. | | 2009-04-09 07:37:05 | +628995086846 | Siap | | 2009-04-09 07:37:09 | +6287839849289 | amin allohuma amin | | 2009-04-09 07:37:13 | +622746680315 | AMIN3X, txq | | 2009-04-09 07:37:30 | +6285643394859 | Allah hu akbar | | 2009-04-09 08:19:47 | +628995086846 | Pye lek plz y, kok blm msk...?? | | 2009-04-09 08:20:38 | +628995086846 | Pye lek plz y, kok blm msk...?? | | 2009-04-09 10:02:56 | +6285743725411 | Asep081340706100 | | 2009-04-09 10:35:39 | +6285228033951 | SELAMAT BERJUANG, kita buka hati nurani tuk mlh calek yg kualitas. | | 2009-04-09 11:40:33 | +6281578699972 | Tp 16 aman terkendali,kondisi masih fit |

----------------------------------------------------------------+ +---------------------+----------------+----

10 rows in set (0.00 sec)

17. Desain Relasional antar tabel 

Desain  relational  antar  tabel  dari  basis  data  pileg  ini  adalah  sebagai 

berikut : 

-- Constraints for table `advokasi` -- ALTER TABLE `advokasi` ADD CONSTRAINT `advokasi_ibfk_1` FOREIGN KEY (`nohp`) REFERENCES `saksi` (`nohp`) ON DELETE NO ACTION ON UPDATE CASCADE; -- -- Constraints for table `caleg` -- ALTER TABLE `caleg` ADD CONSTRAINT `caleg_ibfk_3` FOREIGN KEY (`kddapil`) REFERENCES `dapil` (`kddapil`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `caleg_ibfk_1` FOREIGN KEY (`nopartai`) REFERENCES `partai` (`nopartai`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `caleg_ibfk_2` FOREIGN KEY (`tingkat`) REFERENCES `dewan` (`tingkat`) ON DELETE NO ACTION ON UPDATE CASCADE; -- -- Constraints for table `dpt` -- ALTER TABLE `dpt` ADD CONSTRAINT `dpt_ibfk_1` FOREIGN KEY (`kdlokasi`) REFERENCES `tps` (`kdlokasi`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `dpt_ibfk_2` FOREIGN KEY (`notps`) REFERENCES `tps` (`notps`) ON DELETE NO ACTION ON UPDATE CASCADE; -- -- Constraints for table `kodelokasi` -- ALTER TABLE `kodelokasi`

 

Page 17: bab5

  99

ADD CONSTRAINT `kodelokasi_ibfk_1` FOREIGN KEY (`dp1`) REFERENCES `dapil` (`kddapil`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `kodelokasi_ibfk_2` FOREIGN KEY (`dp2`) REFERENCES `dapil` (`kddapil`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `kodelokasi_ibfk_3` FOREIGN KEY (`dp3`) REFERENCES `dapil` (`kddapil`) ON DELETE NO ACTION ON UPDATE CASCADE; -- -- Constraints for table `saksi` -- ALTER TABLE `saksi` ADD CONSTRAINT `saksi_ibfk_1` FOREIGN KEY (`kdlokasi`) REFERENCES `tps` (`kdlokasi`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `saksi_ibfk_2` FOREIGN KEY (`notps`) REFERENCES `tps` (`notps`) ON DELETE NO ACTION ON UPDATE CASCADE; -- -- Constraints for table `sms` -- ALTER TABLE `sms` ADD CONSTRAINT `sms_ibfk_1` FOREIGN KEY (`nohp`) REFERENCES `saksi` (`nohp`) ON DELETE NO ACTION ON UPDATE CASCADE; -- -- Constraints for table `suara` -- ALTER TABLE `suara` ADD CONSTRAINT `suara_ibfk_1` FOREIGN KEY (`kdlokasi`) REFERENCES `tps` (`kdlokasi`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `suara_ibfk_3` FOREIGN KEY (`notps`) REFERENCES `tps` (`notps`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `suara_ibfk_2` FOREIGN KEY (`idcaleg`) REFERENCES `caleg` (`idcaleg`) ON DELETE NO ACTION ON UPDATE CASCADE; -- -- Constraints for table `suaratidaksah` -- ALTER TABLE `suaratidaksah` ADD CONSTRAINT `suaratidaksah_ibfk_1` FOREIGN KEY (`kdlokasi`) REFERENCES `tps` (`kdlokasi`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `suaratidaksah_ibfk_2` FOREIGN KEY (`notps`) REFERENCES `tps` (`notps`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `suaratidaksah_ibfk_3` FOREIGN KEY (`tingkat`) REFERENCES `dewan` (`tingkat`) ON DELETE NO ACTION ON UPDATE CASCADE;

 

Page 18: bab5

  100

-- -- Constraints for table `tps` -- ALTER TABLE `tps` ADD CONSTRAINT `tps_ibfk_1` FOREIGN KEY (`kdlokasi`) REFERENCES `kodelokasi` (`kdlokasi`) ON DELETE NO ACTION ON UPDATE CASCADE;

5.1.5 Pengaturan Site pada DPW 

Site pada sisi DPW ditempatkan pada posisi server PUBLIC, sehingga bisa 

diakses oleh pemakai lain selama 24jam penuh, begitu juga basis data pileg. Site 

pada DPW ini akan sebagai master terhadap basis data pileg dan tabel‐tabel pada 

basis data tersebut berikut  ini  : dapil, kodelokasi, tps, dpt, caleg, dewan, partai, 

link, brita. Sehingga  semua kejadian  terhadap database pileg akan dicatat pada 

file  log,  yang  nantinya  file‐log  ini  yang  akan  di  sinkronisasikan  ke  DPC  sesuai 

dengan aturan yang berlaku.  

Untuk mengatur konfigurasi master dan slave,  file my.ini yang  terletak di  folder 

MySQL seperti pada gambar 5.1. 

 

Gambar 5.1 Lokasi my.ini 

 

Page 19: bab5

  101

File my.ini sebagai konfigurasi dari database MySQL perlu dilakukan penambahan 

script  untuk mendefinisikan  sebagai master  dan  atau  slave  dengan  konfigurasi 

sebagai berikut : 

Master: 

[mysqld] #sebagai server log-bin=pileg34-log server-id=34 binlog-do-db=pileg

Script 5.1  Setting Konfigurasi Master 

Dengan penjelasan sebagai berikut : 

log-bin=pileg34-log,  untuk mengaktifkan pencatatan pada file binary log 

dengan nama  file pileg34‐log. Sehingga  semua kejadian 

terhadap database akan di catat pada file log ini. 

server-id=34, mengidentifikasi master dengan nilai 34.  

binlog-do-db=pileg, mengidentifikasikan  bahwa  proses  transaksi 

terhadap  basis  data  ‘pileg’  yang  akan  dicatat  pada  file 

log, yang artinya hanya database ‘pileg’ ini saja yang akan 

dicatat lognya dan yang akan di sinkronisasikan ke slave. 

Untuk melihat status master bisa dilakukan dengan perintah show master status; 

mysql> show master status; +-------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+------------------+ | pileg34-log.000001| 98 | pileg | | +-------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)  

Sedangkan untuk melihat file log digunakan show binlog events 

mysql> show binlog events\G *************************** 1. row *************************** Log_name: pileg34-log.000001

 

Page 20: bab5

  102

Pos: 4 Event_type: Format_desc Server_id: 34 End_log_pos: 98 Info: Server ver: 5.0.24a-community-nt-log, Binlog ver: 4 1 row in set (0.00 sec)

 

Dari  tampilan  diatas  terlihat  bahwa  master  berjalan  dan  mencatat 

kegiatan pada file log pileg34‐log.000001 mulai posisi 98, sedangkan pada events 

terlihat bahwa ada satu kejadian (1. row) pada log pileg34‐log.000001 posisi awal 

4 pada server‐id 34 dan posisi akhir log adalah 98. 

Agar master  ini bisa di koneksikan ke slave, maka pada Site master harus 

dibuatkan user dengan hak Replication Slave sebagai berikut: 

Mysql>CREATE USER 'pcku'@ '%' IDENTIFIED BY '****'; mysql>GRANT REPLICATION SLAVE ON *.* TO ->'pcku'@ '%' IDENTIFIED BY '****';

5.1.6 Pengaturan Site pada DPC 

Site  pada  sisi  DPC  ditempatkan  di  masing‐masing  DPC  dengan  sifat 

intranet,  yaitu  hanya  bisa  diakses  oleh  user‐user  dalam  lokasi  DPC  tersebut, 

sedangkan  untuk melakukan  proses  sinkronisasi  data  ke  DPW,  site  pada  DPC 

sebelumnya  harus  dikoneksikan  ke  internet  dengan memasang  nomor  IP  yang 

bisa dibaca oleh site dari DPW, sehigga basis data yang ada di DPC bisa di akses 

oleh DPW untuk sinkronisasi datanya. Selain  itu pada site DPC  ini juga di pasang 

perangkat  SMS  Gateway,  berupa  sebuah  modem  GSM  yang  akan  digunakan 

untuk menerima sms dari saksi di masing‐masing TPS pada DPC tersebut. 

Site  DPC  akan  bertindak  sebagai  slave  dan  hanya  akan  melakukan 

pembacaan log terhadap basis data pileg dan tabel‐tabel pada basis data master 

berikut  ini : dapil, kodelokasi, tps, dpt, caleg, dewan, partai,  link, brita. Sehingga 

semua kejadian pada master terhadap basis data pileg untuk tabel‐tabel tersebut 

akan dikirimkan ke slave. 

 

Page 21: bab5

  103

File my.ini sebagai konfigurasi dari database MySQL perlu dilakukan penambahan 

script untuk mendefinisikan sebagai slave dengan konfigurasi sebagai berikut : 

Slave: 

[mysqld] server-id= 340407 #sebagai slave master-host=10.10.10.1 master-user=pcku master-password=pcku #slave hanya mengakses dB pileg dan tabel-tabel tertentu replicate-do-db=pileg replicate-do-table=pileg.dapil replicate-do-table=pileg.kodelokasi replicate-do-table=pileg.tps replicate-do-table=pileg.dpt replicate-do-table=pileg.caleg replicate-do-table=pileg.dewan replicate-do-table=pileg.partai replicate-do-table=pileg.brita replicate-do-table=pileg.link

Script 5.2  Setting Konfigurasi Slave 

Dengan penjelasan sebagai berikut : 

server‐id= 340407,   server‐id  digunakan  untuk  mengidentifikasi  server 

MySQL, dalam hal ini digunakan kdlokasi dari kecamatan 

(slave). master‐host=10.10.10.1,  master‐host  digunakan  untuk  menunjukkan  bahwa 

master basis data yang ditunjuk adalah nomor ip address 

10.10.10.1. 

master‐user=pcku,   master‐user  digunakan  untuk  mendefinisikan  user 

MySQL master yang diberi hak sebagai replication slave. 

master‐password=pcku,  digunakan  untuk  mendefinisikan  password  dari  user 

yang telah ditunjuk diatas. 

 

Page 22: bab5

  104

replicate‐do‐db=pileg,  digunakan  untuk  mendefinisikan  bahwa  database  yang 

direplikasi adalah pileg. 

replicate‐do‐table=pileg.dapil,  digunakan  untuk  mendefinisikan  bahwa  tabel‐

tabel  yang  akan  di  sinkronisasi  datanya,  dalam  hal  ini 

tabel dapil dari database pileg. 

Setelah konfigurasi master dan slave tersebut di terapkan, maka kedua sisi 

database server sudah akan bertindak sebagai master dan slave. 

Untuk melihat posisi slave sudah  jalan apa belum kita bisa menggunakan show 

slave status pada prompt MySQL sebagai berikut: 

 

mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Connecting to master Master_Host: 10.10.10.1 Master_User: pcku Master_Port: 3306 Connect_Retry: 60 Master_Log_File: pileg34-log.000001 Read_Master_Log_Pos: 98 Relay_Log_File: prive-f558ee00e-relay-bin.000022 Relay_Log_Pos: 234 Relay_Master_Log_File: pileg34-log.000001 Slave_IO_Running: No Slave_SQL_Running: Yes Replicate_Do_DB: pileg Replicate_Ignore_DB: Replicate_Do_Table: pileg.dapil, pileg.kodelokasi, pileg.tps, pileg.dpt, pileg.caleg,

pileg.dewan, pileg.partai, pileg.link, pileg.brita

Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 98 Relay_Log_Space: 234 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File:

 

Page 23: bab5

  105

Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULL mysql>

Slave_IO_State, menunjukkan kondisi slave saat ini, Connecting to master 

mengandung arti bahwa slave sedang menunggu koneksi ke master. 

5.1.7 Pengaturan MultiMaster 

Pengaturan Site pada DPW dan Site pada DPC diatas akan menjadikan Site 

DPW menjadi master  dan  Site  DPC menjadi  slave,  artinya  data‐data  transaksi 

yang  terjadi  di  Site  DPW  (master)  akan  dikirimkan  ke  Site  DPC  (Slave). 

Multimaster digunakan untuk menjadikan  site DPW  selain menjadi master  juga 

dijadikan sebagai slave, begitu  juga site DPC selain menjadi slave  juga dijadikan 

sebagai master. 

Tabel‐tabel  yang  akan  sinkronasikan  dari  site  DPW  ke  DPC  sudah 

dijelaskan  di  sub.  5.1.6  dan  5.1.7  diatas,  sedangkan  tabel‐tabel  yang  akan 

disinkronisasikan  dari  DPC  ke  DPW  adalah  saksi,  advokasi,  suaratidaksah  dan  

suara. 

Konfigurasi multimaster  yang  dilakukan  pada  file my.ini  adalah  sebagai 

berikut : 

Pada Sisi DPW: 

[mysqld] #sebagai server log-bin=pileg34-log server-id=34 binlog-do-db=pileg #slave hanya mengakses dB pileg dan tabel-tabel tertentu replicate-do-db=pileg replicate-do-table=pileg.saksi replicate-do-table=pileg.advokasi replicate-do-table=pileg.suaratidaksah replicate-do-table=pileg.suara replicate-do-table=pileg.inbox

Script 5.3  Setting Konfigurasi Multi‐Master Site DPW 

 

Page 24: bab5

  106

Pada Sisi DPC 

[mysqld] #sebagai server log-bin=pileg340407-log server-id= 340407 binlog-do-db=pileg #sebagai slave master-host=10.10.10.1 master-user=pcku master-password=pcku #slave hanya mengakses dB pileg dan tabel-tabel tertentu replicate-do-db=pileg replicate-do-table=pileg.dapil replicate-do-table=pileg.kodelokasi replicate-do-table=pileg.tps replicate-do-table=pileg.dpt replicate-do-table=pileg.caleg replicate-do-table=pileg.dewan replicate-do-table=pileg.partai replicate-do-table=pileg.brita replicate-do-table=pileg.link

Script 5.4  Setting Konfigurasi Multi‐Master Site DPC 

Untuk  sisi  Site  DPW  karena  sifatnya  yang  pasif,  maka  Site  DPW  pada  waktu 

melakukan  sinkronisasi  terhadap Site DPC akan dilakukan oleh Site DPC  sendiri 

dengan mengaktifkan atau menjalankan prosedur slave sebagai berikut : 

mysql> CHANGE MASTER TO -> MASTER_HOST='master_host_name', -> MASTER_USER='replication_user_name', -> MASTER_PASSWORD='replication_password', -> MASTER_LOG_FILE='recorded_log_file_name', -> MASTER_LOG_POS=recorded_log_position;  

DPC akan melakukan  login ke database server di DPW menggunakan user yang 

telah disediakan (user dengan hak akses replication slave), master‐host, master‐

user  dan master‐password    di  Script  5.4  adalah  host,  user  dan  password  dari 

database  server di  site DPW.  Identitas  tersebut  yang  akan digunakan oleh  Site 

DPC  untuk masuk  ke  database  Server  di  Site  DPW,  lalu menjalankan  perintah 

(change master) sebagai berikut: 

 

Page 25: bab5

  107

C:\AppServ\MySQL\bin>mysql –h 10.10.10.1 –u pcku –p pcku Mysql> STOP SLAVE; mysql> CHANGE MASTER TO -> MASTER_HOST='10.10.10.2', -> MASTER_USER='340407', -> MASTER_PASSWORD='340407', -> MASTER_LOG_FILE='', -> MASTER_LOG_POS=98; mysql> START SLAVE;

Script 5.5  Setting Change Master Site DPW oleh Site DPC 

 

Prosedur  ini  dilakukan  karena  Site DPW  akan melakukan  sinkronisasi  data  dari 

DPC‐DPC  yang  tersebar diseluruh Wilayah DIY, dimana DPC‐DPC  tersebut  tidak 

full  on‐line,  sehingga  pihak  DPC  sendiri  yang  akan melakukan  proses  itu,  dan 

dialamatkan ke alamat dari DPC yang melakukannya. 

5.2 Implementasi Program Aplikasi 

Program aplikasi yang dibangun baik untuk sisi DPW maupun DPC adalah 

sama, yang membedakan hanya dari posisi login dan basis datanya saja. Program 

aplikasi  ini  dibangun menggunakan  PHP  dan  didukung  dengan  teknologi  ajax, 

serta pemanfaatan trigger. 

5.1.1     Web Page Main Menu 

Main menu DPW menampilkan informasi halaman depan dari sistem yang 

dibangun,  pada  gambar  5.2,  tampilan  ini memperlihatkan  pada  bagian  utama 

(tengah)  diawali  dengan  bagian  atas  (header),  bagian  kiri  (left),  bagian  tengah 

(content) serta bagian kanan (right). 

 

 

Page 26: bab5

  108

 

Gambar 5.2 Web Page Main Menu DPW 

Halaman ini di bangun menggunakan metode frame dengan script terlihat 

pada script 5.6: 

<frameset rows="85,*" border="0" framespacing="0"> <frame name="head" src="head.php" frameborder="0" scrolling="no"> <frameset cols="175,*,200" border="0" framespacing="0"> <frame name="navi" src="left.php" frameborder="0" scrolling="no"> <frame name="content" src="main.php" frameborder="0" marginwidth="20" scrolling="auto"> <frame name="kanan" src="kanan.php" frameborder="0" scrolling="auto"> </frameset> </frameset>

Script 5.6 Script Frame Utama 

a. Bagian Atas (header) 

Bagian  ini  akan  menampilkan  judul  dan  informasi  dari  sistem  disertai 

dengan  letak dari sistem  ini  (DPW atau DPC),  letak dari sistem  ini di ambil dari 

basis data yang ada, script untuk mengambil data tersebut bisa dilihat pada script 

 

Page 27: bab5

  109

5.7 berikut ini. 

include 'config/open.php'; if(!mysql_select_db($db,$con)) die("database salah "); $s="select kdlokasi,nama from kodelokasi where level=4"; $hs1=mysql_query($s,$con); if(!$hs1) die("permintaan gagal, coba ulangi lagi TPS"); $member=null;$lgn=null; $hed="SISTEM PELAPORAN PERHITUNGAN SUARA DPW PKS PROP. DIY"; if(mysql_num_rows($hs1)==1) { $dt1=mysql_fetch_row($hs1); $hed="REPLIKASI PELAPORAN PENGHITUNGAN SUARA KECAMATAN

$dt1[0]/$dt1[1]"; } mysql_close($con); echo "<td width=90% align=center valign=top><h1>$hed</h1>";

Script 5.7 Script Frame Header 

b. Bagian Kiri (Left) 

Bagian  ini memuat menu  utama  yang  terdiri  dari menu  umum, menu 

admin, menu login dan link. 

c. Bagian Tengah (Content) 

Bagian  ini  memuat  semua  tampilan  hasil  dari  pilihan  dari  menu  kiri 

maupun menu kanan. 

d. Bagian Kanan (Right) 

Bagian  ini memuat menu pencarian, deteksi user aktif, 5 berita  terlaris, 

Top Score dan SMS Box. 

5.1.2     Web Page Login 

Web  Page  Login  ini  digunakan  untuk  mengakses  ke  sistem,  dengan 

memasukkan nama pemakai dan password. Maka akan diperoleh  fasilitas menu 

sesuai dengan kelompok user.  Sedangkan untuk mendapatkan user, sepenuhnya 

dikelola oleh administrator dari Web Site ini seperti pada gambar 5.4.  

 

Page 28: bab5

  110

 

Gambar 5.4 Web Page Login 

Form  login  ini  menggunakan  teknologi  ajax  untuk  melakukan  validasi 

pemakai maupun password, pada  text box pemakai pada  script 5.8, digunakan 

event  onchange  untuk  mengaktifkan  ajax  guna  mencari  pemakai  yang 

dimasukkan ke tabel login, 

Pemakai : <input type=text name=pemakai size=15 onchange='showuser(this.value)'>

Script 5.8 Textbox pemakai 

onchange  akan melakukan pemanggilan  function  showuser(this.value) dari  java 

script pada script 5.9 yang telah ditentukan sebagai berikut: 

 

 

 

 

Page 29: bab5

  111

..

.. function showuser(str) { xmlHttp=GetXmlHttpObject() if (xmlHttp==null) { alert ("Browser tidak support HTTP Request") return } var url="mbrita/login.php" url=url+"?q="+str url=url+"&sid="+Math.random() xmlHttp.onreadystatechange=stateChanged xmlHttp.open("GET",url,true) xmlHttp.send(null) } function stateChanged() { if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") { xmlDoc=xmlHttp.responseXML; document.getElementById("login").innerHTML=xmlHttp.responseText; } } .. ..

Script 5.9 Java Script Showuser 

Function  showuser(str)  akan  memanggin  script  mbrita/login.php?q=str 

pada  script  5.10  dan  akan  mengembalikan  nilai  ke  pemanggil  dengan  nama 

elemen login. 

<?php $q=$_GET["q"]; include '../config/open.php'; .. .. $s="select * from login where pemakai like '$q%'"; $hs1=mysql_query($s,$con); if(!$hs1) die("permintaan gagal, coba ulangi lagi TPS"); if(mysql_num_rows($hs1)) { $tg1=null;$tg=null;$tg3=null; $dt1=mysql_fetch_row($hs1); if(!empty($dt1[5]) and ($dt1[5]!=session_id())) $tg1=" Dipakai "; if(!empty($dt1[2])) { $d=(substr($dt1[2],1,10)==$td);

 

Page 30: bab5

  112

$tg=" sejak $dt1[2]"; } if($tg1 and $tg and $d) $tg3="<a href=module/logout.php?pemakai=$dt1[0]>Logout</a>"; if(empty($tg1) and empty($tg) and empty($tg3)) $tg=" Masukkan Password"; $lgn= "Hai Mr. $dt1[0], $tg $tg1 $tg3"; } else { $lgn= "Maaf user $q tidak ada di database"; } echo "$lgn"; ?>

Script 5.10 Script login.php 

Hasil dari  script 5.7  ini akan menjadi dua kelompok, kelompok pertama adalah 

user  yang dimasukkan belum  terdaftar di database, hasil  kedua  adalah bahwa 

user  yang  dimasukkan  ada  di  database  dan  kita  diminta  untuk memasukkan 

password dari user tersebut. 

Proses pada permintaan password  ini menggunakan  teknik  yang  sama dengan 

proses  pada  pengisian  user    sebelumnya,  proses  ini  akan  menghasilkan  dua 

pilihan  juga  yaitu  : Maaf  Password  tidak  cocok,  lalu  proses  tidak  dilanjutkan 

sedangkan  yang  kedua  adalah  jika  password  dan  user  cocok,  maka  akan 

dilanjutkan  dengan  menampilkan  form  [LOGIN],  dengan  memilih  click  pada 

tombol  [LOGIN], maka  user  akan  dibawa masuk  ke Menu User  sesuai  dengan 

level atau hak yang diperuntukkan untuk user tersebut. 

5.1.3     Web Page Menentukan Nomor Urut Caleg 

 Web Page  ini digunakan untuk mengolah calon yang diusung oleh partai 

untuk  ditempatkan  pada  posisi  Daerah  Pemilihan,  Tingkatan  Pemilihan  serta 

Nomor Urut dari calon tersebut. 

Sebelum  caleg mendapatkan  nomor  urut  dan  dapil,  sebulumnya  caleg 

harus  sudah  diusulkan  oleh  partai  dan memperoleh  idcaleg,  setelah  diperoleh 

 

Page 31: bab5

  113

idcaleg  tersebut  maka  seorang  caleg  baru  bisa  diproses  untuk  mendapatkan 

Nomor Urut  caleg  yang  akan  ditempati  pada  posisi  dapil  tertentu  dan  tingkat 

pemilihan  tertentu,  setelah  menentukan  caleg  selanjutnya  akan  dilakukan 

penempatan calon anggota legislatif seperti pada gambar 5.5. 

 

Gambar 5.5 Web Page Penempatan Caleg ke Dapil 

Tingkatan Dewan, option untuk menentukan (DPD, DPR, DPRDI, DPRDII), onclick 

dari option ini akan menjalankan ajax dengan parameter pada gambar 5.6. 

 

Gambar 5.6 Params q caleg.js 

Script dapile.php  akan mengirimkan parameter q=DPRDI melalui  script  caleg.js 

untuk kemudian di oleh oleh script yang menghasilkan response pada gambar 5.7  

 

Page 32: bab5

  114

 

Gambar 5.7 Response q caleg.js 

Response pada gambar 5.7 akan menghasilkan output html dengan button untuk 

memilih pilihan dapil, onclick pada salah satu button  akan mengirimkan data ke 

form  addpartai    textbox  kdp    akan  diisi  oleh  data  pada  button  yang  dipilih  , 

onclick=’document.addpartai.kdp.value=3406’. Adapun script yang menghasilkan 

gambar 5.7 terlihat pada script 5.11 adalah: 

<?php $aw=$_GET['q']; include '../config/open.php'; if($aw=='DPR') $dpe=1; elseif($aw=='DPRDI') $dpe=2; elseif($aw=='DPRDII') $dpe=3; else $dpe=1; .. $s="select kddapil,nama,level from dapil where level<='$dpe' order by kddapil,level"; $hs=mysql_query($s,$con); .. while($dt=mysql_fetch_row($hs)) { $nu++; if($dt[2]!=$dpe) { echo "<tr class='even'>"; echo "<td>$dt[0]</td><td>$dt[1]</td><tr> <td valign=top>DAPIL</td><td valign=top>"; } else { $t=substr($dt[1],0,7); echo "<input type=button value='$t' onclick=\"document.addpartai.kdp.value=$dt[0]\">";

 

Page 33: bab5

  115

} } ?>

Script 5.11 Script dapile.php 

Textbox  selanjutnya  adalah pemberian nomor urut  caleg, pada proses  ini  juga 

dilakukan validasi terhadap nomor urut yang dimasukkan, jika dimasukkan ‘001’, 

maka event onkeyup(‘cari(…..)’) akan dijalankan dengan parameter pada gambar 

5.8. 

 

Gambar 5.8 Params kdp caleg.js 

Dari  gambar  5.8  diatas  terlihat  bahwa  parameter  mengirimkan 

q=99?DPRDI?3403?00, maka akan menghasilkan reponse pada gambar 5.9. 

 

Gambar 5.9 Response 00 caleg.js 

Dari gambar 5.9 diatas  terlihat, bahwa parameter yang dikirimkan seperti pada 

gambar  5.8  diberi  response  “Jangan  Pake  ‘00’.  Adapun  script  yang  digunakan 

terlihat pada script 5.12 sebagai berikut: 

<?php $aw=$_GET['q']; $dw=explode("?",$aw); if(!empty($dw[3])) { if($dw[3]=='00') echo "Jangan Pake '00'"; else { include '../config/open.php';

 

Page 34: bab5

  116

if(!$con) { die("Mysql belum diaktifkan, silahkan aktifkan dulu"); } if(!mysql_select_db($db,$con)) die("database salah "); $s="select idcaleg from caleg where nopartai='$dw[0]' and tingkat='$dw[1]' and kddapil='$dw[2]' and nu='$dw[3]' order by nu desc"; $hs=mysql_query($s,$con); if(mysql_numrows($hs)) echo "Sudah ada"; else echo "Belum Ada"; } } ?>

Script 5.12 Script Carinu.php 

Hasil dari script ini ada 3 informasi, yaitu : 

Jangan Pake ‘00’, penomoran ‘00’ sudah digunakan untuk nomor urut partai. 

Sudah Ada, berarti nomor yang dimasukkan sudah ada di database. 

Belum Ada, berarti nomor yang dimasukkan bisa digunakan. 

Validasi menggunakan teknik ajax  ini akan memudahkan end‐user dalam 

menjalankan  transaksi, dan  tentunya data yang akan dimasukkan atau diproses 

dari  form  ini  sudah  merupakan  data  yang  bisa  dipertanggungjawabkan 

kebenarannya. 

5.1.4     Web Page Distribusi Data 

Web page distribusi data ini digunakan untuk melakukan proses distribusi 

dari  DPW  ke  DPC‐DPC  dengan  menggunakan  metode  partial  replica,  yaitu 

replikasi  yang  dikombinasikan  dengan  fragmentasi  horisontal.  Dengan 

menentukan  kecamatan  atau DPC  yang  akan di buatkan  replikasinya, dialog  ini 

akan memberikan  langkah‐langkah  fragmentasinya  1  sampai  dengan  8  langkah 

fragmentasi.  Setelah  selesai  dilakukan  fragmentasi,  maka  basis  data  hasil 

fragmentasi bisa di unduh dalam bentuk file SQL, yang kemudian bisa di ekstrak 

di  server  DPC,  selain  menyediakan  file  hasil  fragmentasi,  dialog  ini  juga 

menyediakan  file  konfigurasi  untuk  slave,  file  ini  (my.ini)  sudah  dikonfigurasi 

 

Page 35: bab5

  117

untuk  slave  yang  terhubung  dengan  site  DPW,  sehingga  DPC  sudah  tidak 

melakukan setting slave lagi. Pada dialog yang disajikan pada gambar 5.10 ini juga 

disediakan button untuk melihat data hasil fragmentasi. 

Proses  ini  pertama‐tama  dari  menu  Replikasi  pada  bagian  kiri,  kita 

memilih  option  Kabupaten  yang  ada,  event  onchange  ini  teknik  ajax  akan 

menampilkan  data  kecamatan  dari  kabupaten    yang  dipilih.    Selanjutnya  kita 

memilih  kecamatan  yang  akan dibuatkan  replikasinya,  selanjutnya  seperti pada 

gambar 5.10. 

 

Gambar 5.10 Web Page Proses Distribusi 

Tahap‐tahap dalam melakukan proses distribusi ini adalah sebagai berikut: 

1. Menyiapkan database temporari 

 

Page 36: bab5

  118

  Menyiapkan  database  temporari    yang  akan  digunakan  untuk 

menampung hasil fragmentasi sementara dan membuat copy file sumber  seperti 

pada script 5.13 berikut ini. 

$q=$_REQUEST["in"]; //in adalah kodelokasiyang dipilih //membuat copy dari pileg.zip ke tmpxxxxx $t="tm$q.sql.zip"; copy("pileg.zip",$t); $tmp="tmppileg"; include "..\config\open.php"; mysql_query("drop database $tmp",$con); mysql_query("create database $tmp",$con);

Script 5.12 Membuat Database Temporari 

Setelah  database  temporari  siap,  maka  dilakukan  proses  pembuatan 

tabel‐tabel kedalam database temporari tersebut. Sumber tabel sudah disiapkan 

berbentuk file SQL ‘pileg.zip’ yang isinya sudah hilangkan semua fungsi relasinya, 

pada script 5.13 memperlihatkan proses pembacaan file SQL dan menuliskannya 

ke database temporari. 

$struk=’pileg.zip’; if(file_exists($struk)) { $bc=fopen("$struk","r"); $n=''; while(!feof($bc)) { $n=$n.(fgets($bc,500)); if(eregi("DELIMITER",$n)) { $x=substr_count($n,"DELIMITER"); if($x==2) { //akhir $nn=eregi_replace("DELIMITER","",$n); mysql_query($nn,$con); $nn=''; $n=''; } } else { if(ereg(";",$n)) { mysql_query($n,$con);

 

Page 37: bab5

  119

$n=''; } } } fclose($bc); }

Script 5.13 Menuliskan Tabel ke Database Temporari 

2. Langkah‐1, Fragmentasi Kodelokasi 

Proses  ini  akan  dilakukan  fragmentasi  horisontal  terhadap  tabel 

kodelokasi berdasarkan kdlokasi yang  telah dimasukkan diawal.   Proses  ini  juga 

akan melakukan penulisan SQL ke file SQL dengan modus ‘Add’, pada script 5.14 

berikut memperlihatkan proses fragmentasi yang dilakukan. 

$tb="SELECT * FROM kodelokasi where level>=4 and kdlokasi like '$kec%' order by level"; if(mysql_select_db($db,$con)) { $hs1=mysql_query($tb,$con); $r=0; while($dt=mysql_fetch_row($hs1)) { $i++; $s="insert into kodelokasi values("; for($j=0;$j<count($dt);$j++) { $s=$s."'".$dt[$j]."'"; if($j<count($dt)-1) $s=$s.","; } $s=$s.");"; if(mysql_db_query($tmp,$s,$con)) { tulissql($kec,$s); $r++; } } }

Script 5.14 Fragmentasi Horisontal tabel kodelokasi 

3. Langkah‐2, Fragmentasi TPS 

Proses  ini  akan  dilakukan  fragmentasi  horisontal  terhadap  tabel  tps 

berdasarkan  kdlokasi  yang  telah  dimasukkan  diawal.    Proses  ini  juga  akan 

melakukan  penulisan  SQL  ke  file  SQL  dengan  modus  ‘Add’,  pada  script  5.15 

berikut memperlihatkan proses fragmentasi yang dilakukan. 

 

Page 38: bab5

  120

$tb= "SELECT tps.kdlokasi,tps.notps,tps.nama,tps.lelaki,tps.wanita FROM tps where tps.kdlokasi like '$kec%'"; if(mysql_select_db($db,$con)) { $hs1=mysql_query($tb,$con); $r=0; while($dt=mysql_fetch_row($hs1)) { $i++; $s="insert into tps values("; for($j=0;$j<count($dt);$j++) { $s=$s."'".$dt[$j]."'"; if($j<count($dt)-1) $s=$s.","; } $s=$s.");"; if(mysql_db_query($tmp,$s,$con)) { $r++; tulissql($kec,$s); } } }

Script 5.15 Fragmentasi Horisontal tabel tps 

4. Langkah‐3, Fragmentasi DPT 

Proses  ini  akan  dilakukan  fragmentasi  horisontal  terhadap  tabel  dpt 

berdasarkan  kdlokasi  yang  telah  dimasukkan  diawal.    Proses  ini  juga  akan 

melakukan  penulisan  SQL  ke  file  SQL  dengan  modus  ‘Add’,  pada  script  5.16 

berikut memperlihatkan proses fragmentasi yang dilakukan. 

$tb="select * from dpt where kdlokasi like '$kec%'"; if(mysql_select_db($db,$con)) { $hs1=mysql_query($tb,$con); while($dt=mysql_fetch_row($hs1)) { $i++; $s="insert into dpt values("; for($j=0;$j<count($dt);$j++) { $s=$s."'".$dt[$j]."'"; if($j<count($dt)-1) $s=$s.","; } $s=$s.");"; if(mysql_db_query($tmp,$s,$con)) { tulissql($kec,$s); } }

 

Page 39: bab5

  121

}

Script 5.16 Fragmentasi Horisontal tabel tps 

 

 Langkah‐4, Fragmentasi Dapil 

n  fragmentasi  horisontal  terhadap  tabel  dapil 

berdasark k Pr  

script 

t  

5.

Proses  ini  akan  dilakuka

an  kdlo asi  yang  telah  dimasukkan  diawal.    oses  ini juga  akan 

melakukan  penulisan  SQL  ke  file  SQL  dengan  modus  ‘Add’,  pada  5.17 

berikut memperlihatkan proses fragmen asi yang dilakukan. 

$tb="select distinct a.kddapil, a.nama, a.level from dapil a, kodelokasi b where b.kdlokasi like '$kec%' and (dp1=kddapil or dp2=kddapil or dp3=kddapil)"; if(mysql_select_db($db,$con)) { $hs1=mysql_query($tb,$con); while($dt=mysql_fetch_row($hs1)) { $i++;$j=0; $s="insert into dapil values("; for($j=0;$j<count($dt);$j++) { $s=$s."'".$dt[$j]."'"; if($j<count($dt)-1) $s=$s.","; } $s=$s.");"; if(mysql_db_query($tmp,$s,$con)) { tulissql($kec,$s); } } }

Script 5.17 Fragmentasi Horisontal tabel dapil 

6. Langkah‐5, Fra

  fragmentasi  horisontal  terhadap  tabel  caleg 

berdasark k   Pr  

script 

gmentasi Caleg 

Proses  ini  akan  dilakukan

an  kdlo asi  yang  telah  dimasukkan diawal.    oses  ini juga  akan 

melakukan  penulisan  SQL  ke  file  SQL  dengan  modus  ‘Add’,  pada  5.18 

berikut memperlihatkan proses fragmentasi yang dilakukan. 

$tb="select caleg.idcaleg, caleg.nopartai, caleg.nama, caleg.tgllahir, caleg.sex, caleg.kddapil,

 

Page 40: bab5

  122

caleg.tingkat, caleg.nu from caleg where kddapil in ( select distinct a.kddapil f rom dapil a, kodelokasi b where b.kdlokasi like '$kec%' and (dp1=kddapil or dp2=kddapil or dp3=kddapil))"; if(mysql_select_db($db,$con)) { $hs1=mysql_query($tb,$con); while($dt=mysql_fetch_row($hs1)) { $i++; $s="insert into caleg values("; for($j=0;$j<count($dt);$j++) { $s=$s."'".$dt[$j]."'"; if($j<count($dt)-1) $s=$s.","; } $s=$s.");"; if(mysql_db_query($tmp,$s,$con)) { tulissql($kec,$s); } } }

Script 5.18 Fragmentasi Horisontal tabel caleg 

7. Langkah‐6, Fra

  fragmentasi  horisontal  terhadap  tabel  partai 

berdasark k  

script 

t  

gmentasi Partai 

Proses  ini  akan  dilakukan

an  kdlo asi  yang  telah dimasukkan  diawal.    Proses  ini  juga  akan 

melakukan  penulisan  SQL  ke  file  SQL  dengan  modus  ‘Add’,  pada  5.19 

berikut memperlihatkan proses fragmen asi yang dilakukan. 

$tb="select nopartai,nama from partai where nopartai in ( select distinct nopartai from caleg where kddapil in ( select distinct a.kddapil from dapil a, kodelokasi b where b.kdlokasi like '$kec%' and (dp1=kddapil or dp2=kddapil or dp3=kddapil)))"; if(mysql_select_db($db,$con)) { $hs1=mysql_query($tb,$con); while($dt=mysql_fetch_row($hs1)) { $i++; $s="insert into partai values("; for($j=0;$j<count($dt);$j++) { $s=$s."'".$dt[$j]."'"; if($j<count($dt)-1) $s=$s.","; } $s=$s.");"; if(mysql_db_query($tmp,$s,$con))

 

Page 41: bab5

  123

{ tulissql($kec,$s); } } }

Script 5.19 Fragmentasi Horisontal tabel partai 

8. Langkah‐7, Fr

a  tidak  dilakukan  fragmentasi 

horison

FROM dewan";

agmentasi Dewan, Link, Brita 

Proses  pada  tabel  dewan,  link  dan  brit

tal karena semua isi dari tabel dewan akan ikut didistribusikan.  Proses ini 

juga akan melakukan penulisan SQL ke file SQL dengan modus ‘Add’, pada script 

5.20.  Selain  melakukan  proses  untuk  dewan,  link  dan  brita,  bagian  ini  juga 

melakukan proses penambahan data pada tabel login, untuk memberikan default 

login  bagi  user  database  replikasi,  berikut memperlihatkan  proses  fragmentasi 

yang dilakukan. 

$tb="SELECT * if(mysql_select_db($db,$con)) { $hs1=mysql_query($tb,$con); echo "<table class='table_utama' width=80%>"; while($dt=mysql_fetch_row($hs1)) { $i++; $s="insert into dewan values("; for($j=0;$j<count($dt);$j++) { $s=$s."'".$dt[$j]."'"; if($j<count($dt)-1) $s=$s.","; } $s=$s.");"; if(mysql_db_query($tmp,$s,$con)) { tulissql($kec,$s); } } } //masukkan lo in default admin passwg ord nimda level 1 $lg="insert into login(pemakai,kunci,level) values('admin','nimda',1);"; mysql_db_query($tmp,$lg,$con); tulissql($kec,$lg); //table link $tb="select * from link"; if(mysql_select_db($db,$con)) { $hs1=mysql_query($tb,$con); while($dt=mysql_fetch_row($hs1)) { $i++; $s="insert into link values("; for($j=0;$j<count($dt);$j++) {

 

Page 42: bab5

  124

$s=$s."'".$dt[$j]."'"; if($j<count($dt)-1) $s=$s.","; } $s=$s.");"; if(mysql_db_query($tmp,$s,$con)) { tulissql($kec,$s); } } } //table brita $tb="select * from brita"; if(mysql_select_db($db,$con)) { $hs1=mysql_query($tb,$con); while($dt=mysql_fetch_row($hs1)) { $i++; $s="insert into brita(tgl,judul,author,utama,lengkap, dibaca,aktiv) values("; for($j=1;$j<count($dt);$j++) { $s=$s."'".$dt[$j]."'"; if($j<count($dt)-1) $s=$s.","; } $s=$s.");"; if(mysql_db_query($tmp,$s,$con)) { tulissql($kec,$s); } } }

Script 5.20 Fragmentasi Horisontal tabel dewan 

9. Penerapan At

al dilakukan dengan melakukan penulisan data 

sumber

uran Relasional 

Penerapan aturan relasion

 dari file SQL yang telah disiapkan yaitu ‘constrain.zip’ dari file ini akan di 

masukkan  ke  database  temporari  dan  juga  akan  dituliskan  ke  file  SQL  dengan 

modus ‘Add’ , script 5.21 memperlihatkan bagaimana proses tersebut dilakukan. 

$struk="constrain.zip"; if(file_exists($struk)) { $bc=fopen("$struk","r"); $s='';$i=0; $n=''; while(!feof($bc)) { $n=$n.(fgets($bc,500)); if(ereg(";",$n)) { if(mysql_query($n,$con)) { tulissql($kec,"$n");

 

Page 43: bab5

  125

} $n=''; } } fclose($bc); echo "<pre>Oke Constraint sudah di tambahkan</pre>"; }

Script 5.21 Penerapan Aturan Relasional 

10. Melihat Hasil Fragmentasi 

Hasil  fragme pakah  fragmentasi 

  atau  belum,  teknik  yang  dilakukan  dalam 

menam

a

ntasi  perlu  dilihat  untuk  memastikan  a

yang  dilakukan  telah  sesuai

pilkan  hasil  fragmentasi  disini  adalah  menggunakan  ajax,  button  yang 

digunakan untuk menangkap events diberi nama deng n nama dari  tabel  yang 

akan  dilihat  hasilnya,  dan  nama  itu  pula  yang  akan  dijadikan  parameter  untuk 

menghasilkan  response yang diinginkan  script 5.22 memperlihatkan button dan 

events tersebut. 

echo"<input type='submit' value='tps' size=10 onclick='show(this.value)'>";

Script 5.22 Melihat Hasil Fragmentasi tps 

kan parameter this.values seperti 

diperlihatkan pada 

Event onclick=’show(this.value)’  akan mengirim

gambar 5.11 berikut ini. 

 

Gambar 5.11 Parameter listtabel.php 

Response dari proses diatas diperlihatkan pada gambar 5.12 berikut ini. 

 

Page 44: bab5

  126

 

Gambar 5.12 Response listtabel.php 

Script  listtabel  script 5.23 dibawah 

ini, dim

.php yang digunakan bisa dilihat pada

ana parameter yang dikirim akan sebagai masukan pada script ini. 

$q=$_GET["q"]; if($q=='tutup') {echo ""; return;} include '../config/open.php'; $dbm="tmppileg"; if(!$con) { die("Mysql belum diaktifkan, silahkan aktifkan dulu"); } if(!mysql_select_db($dbm,$con)) die("database salah "); $s="select * from $q"; if($q=='caleg') $s="select * from $q where nu !='00'"; $hs=mysql_query($s,$con); $nu=0; echo "<div align=center><b>Data Hasil Fragmentasi horisontal Tabel $q</b><table class='table_utama' width='100%'>"; while($dt=mysql_fetch_row($hs)) { $nu++; echo "<tr class='even'><td valign=top>$nu</td>"; $n=count($dt); if($q=='brita') $n=4; for($i=0;$i<$n;$i++) { echo "<td valign=top>$dt[$i]</td>"; } } echo "</table></div>"; mysql_close($con);

Script 5.23 Script listtabel.php 

11. Mengunduh data hasil Fragmentasi 

 

Page 45: bab5

  127

Mengunduh  tabel  hasil  fragmentasi  terdiri  dari  dua macam  yaitu  script 

konfigurasi  slave MySQL  dan  file  SQL  hasil  fragmentasi.    Dalam  pengujian  ini 

kedua  file  diberi  ekstensi  “.zip”,  tetapi  pada  dasarnya  kedua  file  tersebut  teks 

murni pada script 5.24 menunjukkan proses mengunduh kedua file tersebut. 

echo "<br>Oke silahkan download : [ <a href=my.ini.zip>Konfigurasi MySQL (my.ini)</a> ] [ <a href=$t>Data Hasil Fragmentasi Horisontal</a> ]</div>";

Script 5.24 Script Mengunduh Data Hasil Fragmentasi 

5.1.5 Web P

  pada  gambar  5.14  ditampilkan  saat 

pertam

age Setting Database DPC 

Web  page  Setting  Database  DPC

a  kali  sistem  di DPC  di  panggil,  dan  belum memiliki  database  dan  atau 

masih  ada  sebuah  file  ‘install.txt’,  sehingga  sistem  akan  secara  otomatis 

mengalihkan tampilan indexnya ke halaman ini.  

 

Dialog  ini  digu   hasil  distribusi  data 

DPW ke

Gambar 5.14 Setting Database DPC 

nakan  untuk mengekstrak  database

 site DPC, Pada Konfigurasi Database digunakan untuk memasukkan nama 

 

Page 46: bab5

  128

file hasil unduhan di proses distribusi data, dengan memilih browse, maka akan 

ditampilkan  explorer  untuk  memilih  file  yang  akan  di  ekstrak.  User  Root 

digunakan untuk memasukkan nama user setingkat  ‘root’ atau  ‘root’  itu sendiri 

dan password  root digunakan untuk memasukkan password dari user  tersebut. 

Nama Database secara default ‘pileg’, nama file tersebut bisa diubah. Dan tombol 

proses digunakan untuk memulai proses memasukkan data ke MySQL database, 

Script  Konfigurasi  Database  yang  digunakan  seperti  pada  Script  5.25.  Form 

dengan  memanfaatkan  <form  …..  enctype=multipat/form‐data>  dan  <input 

type=file  name=sumb  value=’’> mengakibatkan  input  tersebut  akan membuka 

explorer  untuk memilih  sebuah  file  yang  akan  di masukkan  dan  diterima  oleh 

variabel “sumb”. Dengan memanfaatkan teknik ajax, user dan password di chek 

menggunakan  onchange='cek(document.sms.user.value,this.value)',  sehingga  akan 

langsung  ke  valid  tidaknya  user  dan  password  yang  dimasukkan.  Begitu  juga 

dengan teknik yang sama untuk isian Nama Database. 

<form name=sms action=buat.php method=post enctype=multipart/form-data> <b>Konfigurasi Database</b> <table class='table_utama' width=100%> <tr><td>File Sumber</td> <td>:<input type=file name=sumb value=''></td> <tr><td>User Root</td> <td>:<input type=text name=user value='root'></td> <tr><td>Password Root</td> <td>:<input type=password name=passw value='' onchange='cek(document.sms.user.value,this.value)'> <span id=ck></span></td> <tr><td>Nama Database</td> <td>:<input type=text name=db value='pileg' onchange='cekdb(document.sms.user.value, document.sms.passw.value, this.value,document.sms.sumb.value)'> <span id=ck2></span></td> <tr><td></td><td><input type=submit value=Proses></form>

Script 5.25 Script Desain Konfigurasi Database 

 

 

Page 47: bab5

  129

Konfigurasi  Slave  (my.ini)  adalah  file  konfigurasi  untuk  my.ini  yang 

diguna

gunakan untuk melakukan sinkronisasi data 

dari DP

kan untuk  konfigurasi  slave.  File Konfigurasi MySQL  telah disiapkan oleh 

DPW dan diunduh pada  saat Distribusi Data, Browse digunakan untuk memilih 

file tersebut. Folder MySQL, adalah alamat atau folder dari software MySQL yang 

digunakan  untuk menampung  file my.ini.  Setelah  konfigurasi MySQL  selesai  di 

proses,  lalukan  restart  terhadap database server MySQL, agar aturan yang baru 

saja di aplikasikan bisa digunakan. 

5.1.6 Web Page Sinkronisasi Dat

Web page sinkronisasi data di

W  ke DPC maupun  sebaliknya.  Site DPW diletakkan pada  server public, 

sehingga  selalu  aktif  dan menggunakan  domain  atau  nomor  ip  address  yang 

tetap, sedangkan DPC akan aktif dalam melakukan proses sinkronisasi, baik untuk 

melakukan  sinkronisasi  data  pendukung  pemilu  maupun  pelaporan  hasil 

penghitungan suara ke DPW. Sehingga dialog  ini diletakan pada Site DPC. Dialog 

pada  gambar    5.13 memperlihatkan  status  dari  site  kecamatan  dengan  filelog 

laptop‐log.000007  dengan  position  6247  untuk  basis  data  pileg,  lalu  disebelah 

kanannya adalah form untuk melakukan koneksi ke site lain dalam hal ini adalah 

site DPW, dengan menyebutkan host, user dan password.  Jika  koneksi berhasil 

maka  site  DPC  ini  bisa  melakukan  sinkronisasi  ke  DPW.  Sedangkan  dibagian 

bawah ada informasi Status Slave, yang dipanggil dari tombol [Show Slave], dari 

tampilan tersebut akan bisa dilihat status slave dari  lokasi yang dipilih terhadap 

master  di  site  lain.  Sedangan  tombol  [laptop‐log.000007]  digunakan  untuk 

melihat  log  transaksi  sebagai  master,  kejadian  apa  saja  yang  telah  terjadi  di 

master, yang akan mempangaruhi data (insert, update, delete dll). 

 

Page 48: bab5

  130

 

Gambar 5.13 Web Page Sinkronisasi Database 

Untuk  melihat  status  master  pada  sisi  DPC  (Localhost)  menggunakan 

perintah show status bisa dilihat pada script 5.25 berikut ini. 

include '../config/open.php'; $s="show master status"; echo "<fieldset><h2>Status Master '<i>localhost</i>'</h2>"; $hs1=mysql_query($s,$con); if(!$hs1) die("permintaan gagal, coba ulangi lagi TPS"); $dt=mysql_fetch_row($hs1); echo "<table width='100%'> <tr><td>File</td><td>$dt[0]</td> <tr><td>Position</td><td>$dt[1]</td> <tr><td>Binlog_do_DB</td><td>$dt[2]</td> <tr><td>Binlog_ignore_DB</td><td>$dt[3]</td></table></fieldset>";

Script 5.25 Script Status Master DPC 

Status dari master akan terlihat dari nama file log, position, database yang 

dicatat lognya (binlog_do_DB). 

Tiga  button  dibawah  status  adalah  tombol  untuk  melihat  detail  log, 

 

Page 49: bab5

  131

kondisi  slave  DPC  dan  tombol  tutup  untuk  menutup  tampilan  kedua  tombol 

sebelumnya. 

Laptop‐log.00007,  adalah  tombol  yang  menggunakan  teknik  ajax  untuk 

menampilkan data binary  log dari master,  script 5.26 menunjukkan event yang 

digunakan untuk menjalankannya. 

(1) <input type=button name=log value=\"$dt[0]\" onclick='showlog(this.value,0)'> (2) <input type=button name=log value=\"Show Slave\" onclick='sslave(this.value,0)'> (3) <input type=button name=log value='Tutup' onclick='sslave(this.value,0)'>

Script 5.26 Script Event Showlog master 

Dari script 5.26 akan mengirimkan parameter seperti terlihat pada gambar 5.14  

dan response pada gambar 5.15 untuk nomor script (1). 

 

Gambar 5.14 Parameter showlog.php 

 

Gambar 5.15 Response showlog.php 

Script showlog.php yang dijalankan ditampilkan pada script 5.27 dibawah ini. 

$s1="show binlog events"; $hs11=mysql_query($s1,$con); if(!$hs11) die("permintaan gagal, coba ulangi lagi TPS"); $nn=mysql_num_rows($hs11); if($nn)

 

Page 50: bab5

  132

{ echo "<b>$s1</b><table width='100%' border=1><tr bgcolor=blue><td>Nu</td> <td>Pos</td><td>Event_type</td><td>Server_id</td><td>End_log_pos</td><td>Info</td>"; $i=0; while($dt1=mysql_fetch_row($hs11)) { $i++; echo "<tr><td>$i</td><td>$dt1[1]</td><td>$dt1[2]</td> <td>$dt1[3]</td><td>$dt1[4]</td><td>$dt1[5]</td>"; } echo "</table>"; }

Script 5.27 Script showlog.php 

Parameter  dan  response  dari  script  5.27  nomor  (2)  diatas  akan  terlihat 

pada gambar 5.16 dan gambar 5.17. 

 

Gambar 5.16 Parameter slave.php 

 

Gambar 5.17 Response slave.php 

Script slave.php yang dijalankan ditampilkan pada script 5.28 dibawah ini. 

$s1="show slave status"; $sr=mysql_query('slave_running',$con); $hs11=mysql_query($s1,$con); if(!$hs11) die("permintaan gagal, coba ulangi lagi TPS"); if(mysql_num_rows($hs11)) { $dt1=mysql_fetch_row($hs11); for($i=0;$i<26;$i++) { $x2=$dt1[$i]; if($i==14)

 

Page 51: bab5

  133

{ $xx=explode(",",$dt1[$i]); $x2=implode(", ",$xx); } echo "<tr><td>$k[$i]</td><td>$x2</td>"; } echo "</table>"; }

Script 5.28 Script slave.php 

5.1.6     Trigger Suara Mas

i menggunakan metode after insert, trigger ini akan 

diterap

igger pada tabel Inbox 

enerima  sms  dan  dimasukkan  ke  tabel  inbox  ini, 

sehingg

sms

di

mysql> show triggers\G

uk 

Trigger suara masuk in

kan  terhadap  tabel  inbox,  sms,  suara  dan  advokasi  serta  file  temporari 

tmp. 

1. Tr

SMS  Gateway  akan m

a trigger after insert pertama pada script 5.29 di terapkan pada tabel ini, 

untuk kemudian sms masuk di  insertkan ke tabel sms, dimana tabel sms adalah 

tabel  yang mempunyai  ketergantungan  terhadap  tabel  saksi  pada  field  nohp. 

Data    yang  bisa masuk  ke  tabel  sms  hanya  sms  yang  SenderNumber‐nya 

sudah terdaftar   tabel saksi. 

*************************** 1. row *************************** Trigger: addsms Event: INSERT Table: inbox Statement: begin insert into sms(nohp,isi) values(new.sendernumber, new.TextDecoded); delete from tmp where nohp=new.sendernumber; end ming: A Ti FTER Created: NULL sql_mode: NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION Definer: root@localhost 1 row in set (0.00 sec)

Script 5.29 Script Trigger addsms 

2. Trigger pada tabel sms 

 

 

Page 52: bab5

  134

Tabel  sms,  diterapkan  juga  trigger  after  insert,  trigger    ini  akan 

memis

  o a script  o

2. row ***************************

ahkan  apakah  sms  yang  masuk  itu  termasuk  kelompok  suara, 

suaratidaksah atau adv kasi dijelask n pada  5.30. Jika termasuk kel mpok 

suara,  maka  data  akan  dimasukkan  ke  tabel  tmp  (tabel  sementara)  serta  di 

hubungkan  dengan  tabel  saksi  untuk  mendapatkan  data  kdlokasi,  notps.  Jika 

termasuk kelompok advokasi data akan  langsung ditambahkan ke tabel advokasi 

(nohp,  isi).  Sedangkan  jika  termasuk  gugur,  rusak,  sisak  dan  pakai, maka  data 

akan dimasukkan  ke  tabel advokasi dan dihubungkan dengan  tabel  saksi untuk 

mendapatkan kdlokasi dan notps. 

*************************** Trigger: insms Event: INSERT Table: sms Statement: begin set @kunci=new.isi; set @nohp=new.nohp; set @key=upper(substr(@kunci,1,5)); if(@key='SUARA') then begin INSERT INTO tmp SELECT a.kdlokasi,a.notps,substr(@kunci,7,2),

substr(@kunci,10,1), substr(@kunci,12,2), substr(@kunci,15,10),@nohp from saksi a where a.nohp=@nohp;

end; elseif((@key='GUGUR') or (@key='RUSAK') or (@key='SISAK') or (@key='PAKAI')) then begin set @t=substr(@kunci,7,1); if(@t=0) then set @ti='DPD'; elseif(@t=1) then set @ti='DPR'; elseif(@t=2) then set @ti='DPRDI'; else set @ti='DPRDII'; end if; INSERT INTO suaratidaksah SELECT a.kdlokasi,a.notps,@key,@ti,substr(@kunci,9,10) from saksi a where a.nohp=@nohp

on duplicate key update suaratidaksah.jumlah=substr(@kunci,9,10);

 

Page 53: bab5

  135

end; else insert into advokasi(nohp,isi) values(@nohp,@kunci); end if; end Timing: AFTER Created: NULL sql_mode: NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION Definer: root@localhost

Script 5.30 Script Trigger insms 

3. Trigger pada tabel tm

bel  temporari  yang  akan  membantu  dalam  proses 

pemilahan

suar   e

  p  

  te pr

Tabel  ini  sebagai  ta

 dan seleksi data dari beberapa tabel yang terkait. Pada tabel tmp ini di 

terapkan  trigger  after  insert,  script  5.31  akan menjelaskan  bagaimana  proses 

pemasukan data  a, serta p nyeleksian data nu, idcaleg, kodelokasi dan notps 

dan  pada  trigger  ini  juga  diterapkan  metode  on  duplicate  key  update  yang 

digunakan untuk mengatasi transaksi  insert   terhada  data yang sudah ada yang 

mengakibatkan  kesalahan  karena  duplikasi  data,  maka  akan  dihandel  oleh 

metode  ini menjadi proses update  rhadap data. Dan akhirnya  oses  itu akan 

dimasukkan ke tabel suara sebagai produk akhir pelaporan suara. 

*************************** 4. row *************************** Trigger: aitmp Event: INSERT Table: tmp Statement: begin if(new.level=1) then insert into suara select new.kdlokasi,new.notps,a.idcaleg,new.jumlah from kodelokasi c, dapil b, caleg a where c.kdlokasi=new.kdlokasi and c.dp1=b.kddapil and b.kddapil=a.kddapil and a.nu=new.nu and a.nopartai=new.nopartai on duplicate key update suara.suara=new.jumlah; elseif(new.level=2) then insert into suara select new.kdlokasi,new.notps,a.idcaleg,new.jumlah from kodelokasi c, dapil b, caleg a where c.kdlokasi=new.kdlokasi and c.dp2=b.kddapil and b.kddapil=a.kddapil and a.nu=new.nu and a.nopartai=new.nopartai

 

Page 54: bab5

  136

on duplicate key update suara.suara=new.jumlah; elseif(new.level=3) then insert into suara select new.kdlokasi,new.notps,a.idcaleg,new.jumlah from kodelokasi c, dapil b, caleg a where c.kdlokasi=new.kdlokasi and c.dp3=b.kddapil and b.kddapil=a.kddapil and a.nu=new.nu and a.nopartai=new.nopartai on duplicate key update suara.suara=new.jumlah; end if; end Timing: AFTER Created: NULL sql_mode: NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION Definer: root@localhost

Script 5.31 Script Trigger aitmp