Senin, 30 September 2013

Melakukan Insert Secara Bertahap

Dear All,

Sudah lama saya tidak membuat posting di blog kita tercinta ini. Sekaarang saya akan membuat post ini khusus ditunjukan untuk menjawab pertanyaan dari Mas Sapei Kurdi pada postingan sebelumnya.

Intinya pada pertanyaan tersebut adalah bagaimana kita bisa melakukan insert secara bertahap dikarenakan seandainya kita melakukan insert dalam jumlah banyak secara sekaligus maka akan dikhawatirkan akan mengakibatkan database menjadi lambat bahkan DOWN.




Disini membuat  contoh, saya memiliki data sebanyak 900 record. Saya ingin melakukan insert per 100 record saja. berikut contoh data yang saya miliki :

100|Nama|Budi|Alamat100
101|Nama|Budi|Alamat101

kemudian data tersebut saya rubah agar bisa dibaca oleh database Soliddb menggunakan shell script convert_data_dumy.sh. berikut isi file scriptnya

#!/bin/sh
#!/bin/bash

input="data_dumy.txt"
output="data_insert.txt"

cat $input| awk -F "|" '{print " insert into dumy values("$1",\x27"$2"\x27,\x27"$3"\x27,\x27"$4"\x27); "}' > $output

script diatas menghasilkan file data_insert.txt, dan berikut contoh hasil convertnya :

 insert into dumy values(100,'Nama','Budi','Alamat100');
 insert into dumy values(101,'Nama','Budi','Alamat101');

terakhir adalah melakukan split, sesuai keinginan kita melakuan insert per berapa ?
disini saya melakukan contoh membaginya menjadi per 100 saja.
kemudan saya membuat script untuk melakukan split dan melakukan insert ke Database.
saya membuat shell script split_and_load.sh. berikut isi file scriptnya :

#!/bin/sh
#!/bin/bash

echo "Started at $(date)."
echo "Insert started at $(date).">> log_insert.txt

time0=$(date +%s)


baris=100
split -l $baris -d data_insert.txt

max=`ls x* | wc -l`
#max=31
for ((i=0; i<=$max; ++i )) ;
do
        if [ $i -le 9 ] ; then
          file_name="x0$i"
        else
          file_name="x$i"
        fi

echo "commit work;" >> $file_name

solsql -f"$file_name" "tcp 1315" dba dba

done

rm -v x*  >> log_insert.txt

time1=$(date +%s)
duration=`expr $time1 - $time0`

echo "insert Done"
echo "INSERT done. Total time is $duration seconds.">> log_insert.txt

setelah kita menjalankan script tersebut maka semua data akan di insert ke database dan lognya dapat dilihat pada file log_insert.txt

DOWNLOAD FILE LATIHAN

Special Thanks to Master Soliddb : Langgeng Darmawan dan Trianugraha





Tidak ada komentar:

Posting Komentar