Wednesday, 14 June 2017

Menulis File Temporary di Memory untuk Input/Output yang Lebih Cepat

Ketika menulis sebuah file, baik file biasa atau csv dengan fputcsv, jika kita menulis ke filesystem, jika datanya cukup banyak (15 ribu baris pun bisa dikatakan banyak), proses input/output nya akan lambat sekali. Bagaimana solusinya ?

Solusinya adalah dengan menulis file ke memory!

Snippet :
$allocated_csv = $output_dir.DIRECTORY_SEPARATOR."allocated-raw.csv" ;
if (($handle = fopen($allocated_csv, "r")) !== FALSE) {
//maksimal 1024*(1024*100) = 100MB
$handle_memory = fopen('php://temp/maxmemory:104857600', 'w');
$allocated_data = array();
while (($data = fgetcsv($handle)) !== FALSE) {
$allocated_data = array($nomor_peserta_arr[$data[0]], $data[0], $data[1], $data[2]) ;
fputcsv($handle_memory, $allocated_data);
}
fclose($handle);
rewind($handle_memory);
$allocated_csv_memory = stream_get_contents($handle_memory);
fclose($handle_memory);
$allocated_csv_tmp = '/tmp/allocated-raw.csv';
$handle = fopen($allocated_csv_tmp, 'w');
fwrite($handle, $allocated_csv_memory);
fclose($handle);
$sql = "LOAD DATA INFILE '{$allocated_csv_tmp}' REPLACE INTO TABLE allocated FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n'";
$conn = Doctrine_Manager::getInstance()->getCurrentConnection();
$conn->execute($sql);
}
Referensi

  1. Create CSV file in memory PHP, http://www.metashock.de/2014/02/create-csv-file-in-memory-php/

No comments:

Post a Comment