
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
DOWNLOAD FILE LATIHAN
Special Thanks to Master Soliddb : Langgeng Darmawan dan Trianugraha
Tidak ada komentar:
Posting Komentar