Replikasi data dari database lain dapat diambil dengan berbagai parameter. Salah satunya adalah dengan mengambil data berdasarkan tanggal update. Berdasarkan tanggal update ini kita dapat membuat otomasi perintah melalui cronjob hanya dari data yang mengalami perubahan dalam satu hari.
Script ini bisa kita aplikasikan dalam artikel Replikasi Data Tabel dari Database Lain dengan CodeIgniter yang sudah pernah dibahas. Sedangkan untuk koneksi dengan dua database dapat di lihat pada artikel Multiple Database di CodeIgniter. Kita dapat memodifikasi aplikasi replikasi yang sudah kita buat tersebut. atau membuat yang baru seperti petunjuk berikut.
Disini asumsi kita adalah tabel sudah mempunyai field/kolom last_update yang mencatat perubahan data pada tanggal tertentu.
- Buat model Mdump.php dengan kode berikut ini:
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 |
Ambil data berdasarkan tanggal public function dumpTableBylastUpdate($table, $lastawal, $lastakhir) { $db2 = $this->load->database('mirror', TRUE); $db2->select('*'); $db2->from($table); $db2->where('last_update >=', $lastawal); $db2->where('last_update <=', $lastakhir); $data = $db2->get()->result_array(); if ($data) { $this->db->insert_on_duplicate_update_batch('aggregat.' . $table, $data); } } //Akhir Ambil data berdasarkan last update 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 */ |
Disini kita memodifikasi file Mdump.php pada artikel Replikasi Data Tabel dari Database Lain dengan CodeIgniter.
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
<?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 //Ambil data berdasarkan tanggal last_update $this->getTableByLastUpdate('tabel4'); } 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; } //Fungsi ambil data tabel berdasarkan tanggal update public function getTableByDate($table = null) { $time = '23:00:00'; // mengenerate tanggal $tanggal_awal = date('Y-m-d H:i:s',strtotime('-1 days' . $time)); $tanggal_akhir = date('Y-m-d H:i:s',strtotime('now' . $time)); $this->benchmark->mark('awal'); echo "Proses tabel " . $table . PHP_EOL; echo "Ambil data antara tanggal " . $tanggal_awal . " s/d " . $tanggal_akhir . PHP_EOL; $this->Mdump->dumpTableBylastUpdate($table, $tanggal_awal, $tanggal_akhir); echo "Data yang berubah = " . $this->db->affected_rows() . PHP_EOL; $this->benchmark->mark('akhir'); echo "Waktu yang dibutuhkan = " . $this->benchmark->elapsed_time('awal', 'akhir') . PHP_EOL; } } /* End of file Dump.php */ |
- Agar script ini berjalan dengan otomatis dapat kita panggil melalui perintah cronjob di server.
Demikian teknik pengambilan data dengan periode tanggal update sebagai filteringnya.
Semoga bermanfaat.