Pernahkah kita dihadapakan terhadap permasalahan untuk mengambil sebagian atau keseluruhan tabel dari database di kantor pusat atau sebaliknya? Pada sebagian perusahaan-perusahaan yang besar yang mempunyai beberapa cabang yang tersebar di wilayah yang berbeda-beda akan lebih ringan jika pengelolaan database untuk sistem-sistemnya terdistribusi di masing-masing cabang. Namun ini akan membuat permasalahan dimana data di kantor cabang menjadi tidak sinkron dengan data di kantor pusat.
Nah bagaimana caranya agar kantor cabang bisa menyamakan datanya dengan kantor pusat?
Berikut ini akan kita pelajari salah satu metode untuk melakukan dumping data menggunakan CodeIgniter.
Sebelumnya kita pernah membuat Multiple Database di CodeIgniter pada artikel sebelumnya. Dengan cara yang sama kita buat koneksi untuk menghubungkan dua buah data database dari kantor pusat dan database di kantor cabang.
Berikut langkah-langkah yang harus kita jalankan:
- Kita asumsikan bahwa sudah mempunyai struktur tabel yang sama antara di kantor pusat dan kantor cabang
- Buat koneksi dengan multiple database seperti yang pernah dijelaskan pada artikel Multiple Database di CodeIgniter.
- Buat model dengan nama Mdump.php dengan sintaks sebagai berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php defined('BASEPATH') or exit('No direct script access allowed'); class Mdump extends CI_Model { public function __construct() { parent::__construct(); } public function dumpTable($table = null) { $db2 = $this->load->database('database_kedua', TRUE); $db2->select('*'); $db2->from($table); $data = $db2->get()->result_array(); if ($data) { $this->db->insert_on_duplicate_update_batch($table, $data); } } } /* End of file Mdump.php */ |
Perintah query untuk insert_on_duplicate_update_batch dapat dipelajari pada artikel Insert On Duplicate Key Update Batch pada CodeIgniter.
- Buat controller dengan nama Dump.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<?php defined('BASEPATH') or exit('No direct script access allowed'); class Dump extends CI_Controller { public function __construct() { parent::__construct(); $this->load->model('Mdump'); } public function index() { // Ambil data masing-masing tabel dengan memanggil fungsi getTable('nama_tabel') $this->getTable('tabel1'); $this->getTable('tabel2'); $this->getTable('tabel3'); //dan seterusnya sampai jumlah tabel yang akan ingin kita sinkronkan } public function getTable($table = null) { $this->benchmark->mark('awal'); echo "Proses tabel " . $table . PHP_EOL; $this->Mdump->dumpTable($table); echo "Data yang berubah = " . $this->db->affected_rows() . PHP_EOL; echo "Jumlah record = " . $this->db->count_all($table) . PHP_EOL; $this->benchmark->mark('akhir'); echo "Waktu = " . $this->benchmark->elapsed_time('awal', 'akhir') . PHP_EOL; } } /* End of file Dump.php */ |
- Selanjutnya panggil controller dari CronJob yang akan kita sesuaikan waktu sinkronisasinya sesuai dengan kehendak kita. Cara pemanggilannya adalah sebagai berikut:
1 2 3 4 5 6 7 8 9 |
1 0 * * * /usr/bin/php -q (full path to)/index.php Dump Minutes (0-59) | Hours (0-23) | | Days (1-31) | | | Months (1-12) | | | | Days of the Week (Numeric, 0-6) | | | | | * * * * * /usr/bin/php -q (full path to)/index.php Dump |
(full path to) adalah tempat aplikasi dumping tabel ini berada.
Bisa dipelajari juga cara-cara pemanggilan perintah melalui Cron.
Demikian teknik dumping data tabel dari database yang berbeda. Semoga bermanfaat.