alexa-tracking

Main Content

1024
1024
KASKUS
51
244
https://www.kaskus.co.id/thread/530374c4a2cb17f7168b4613/ask-tentang-j2ee-dan-handling-data
[Ask] tentang j2ee dan handling data
permisi agan2 suhu2.......

ane mau tanya tentang TA ane. emoticon-Bingung (S)

ane pake j2ee, dan ane bingung cara handling data yang gede, biar letop ane ga nghang, gmn ya caranya?

fyi, ane pake j2ee tentang log dan pake ETL.
data log nya gede bgt gan.

kata dosen ane, cara baca datanya pake java biasa gan, selewat doang, gausah dimasukin ke memory letop.

tp ane bingung gmn caranya.

mohon pencerahannya suhu2 master programmer.. emoticon-Kiss emoticon-Kiss
emoticon-Sorry emoticon-No Hope emoticon-No Hope
ga ada yg bales emoticon-No Hope
kalo gw dulu....
bikin 1 function yang side effect free. trus bikin 1 worker buat ngisi 1 syncronize queue yang tugasnya baca line. trus bikin worker lagi 1-4 untuk baca dari queue dan execute function itu. karena ga da side effect, tinggal collect resultnya ke queue/list dan stream itu keluar...

ribet emang. tapi cepet.


kalo mau yang lama..lebih gampang. read 1 line pake stream, trus lo ETL trus stream kefile n loop aja terus. udah kelar...
Quote:Original Posted By lunan
kalo gw dulu....
bikin 1 function yang side effect free. trus bikin 1 worker buat ngisi 1 syncronize queue yang tugasnya baca line. trus bikin worker lagi 1-4 untuk baca dari queue dan execute function itu. karena ga da side effect, tinggal collect resultnya ke queue/list dan stream itu keluar...

ribet emang. tapi cepet.


kalo mau yang lama..lebih gampang. read 1 line pake stream, trus lo ETL trus stream kefile n loop aja terus. udah kelar...



brb gan...... ane cobain dulu......emoticon-Ngacir2

emoticon-Ngacir2emoticon-Ngacir2

thx anywayemoticon-Kiss
Quote:Original Posted By djaholic

ane pake j2ee, dan ane bingung cara handling data yang gede, biar letop ane ga nghang, gmn ya caranya?

fyi, ane pake j2ee tentang log dan pake ETL.
data log nya gede bgt gan.


gw baca berulang2 kok engga ngerti yah pertanyaannya apa
sebenernya ini outofmemory karena baca file log atau gimana?
kalo buat baca file doang, harusnya ga sulit
kamu baca 1 row, proses lalu flush, pindah ke row selanjutnya
kemaren gw pakek Talend ETL buat proses file yg contentnya 1juta row lancar2 aja
atau kalo ribet, 1file besar kamu pecah jadi file kecil2 baru diproses setelah itu
Quote:Original Posted By pekoy154


gw baca berulang2 kok engga ngerti yah pertanyaannya apa
sebenernya ini outofmemory karena baca file log atau gimana?
kalo buat baca file doang, harusnya ga sulit
kamu baca 1 row, proses lalu flush, pindah ke row selanjutnya
kemaren gw pakek Talend ETL buat proses file yg contentnya 1juta row lancar2 aja
atau kalo ribet, 1file besar kamu pecah jadi file kecil2 baru diproses setelah itu


jadi gini gan..
ane mau extract data..dari sumber log..
nah sumber lognya itu terdiri dari banyak file gan, nyampe bergiga2,
ane bingung, kl ribuan file log itu di extract, letop ane ga kuat, jdnya nghang gan......

tapi kl file log nya ane pecah2 nantinya tktnya beda2 gan waktunya.

kata dosen sih, tinggal baca per-line nya ajah.
tp ane bingung gmn cara baca per-line biasa......
ane selama ini masih dimasukin ke memory letop gan, jdnya lama......

agan tau cara ngebaca file besar, tapi proses bacanya bisa cepet?

maap gan, kl ngebingungin. emoticon-Kiss
emoticon-Sundul
tinggal extract dan baca aja...gw baca file bergiga2 ga masalah koq. gw baca file 2 juta line n simple ETL cuma makan waktu 6 detik kalo non thread...

kalo ga kuat karena apapun, coba java NIO pake buffer instead of stream...tapi harusnya ga masalah lah manapun. mana coba codingnya sini --_--

stream / buffer harusnya asal di flush setelah process mah ga ada limitnya...
caranya udah bener kayak yang dikasih tau sama dosen agan, baca+proses nya per-line.

teorinya begini, ada salah 2 approach yang bisa dipake,
approach 1
Quote:
- baca file besar per line, simpan ke string / byte array
- simpan string / byte array ke list / array lain
- jika selesai baca file maka proses list data di atas

hal ini akan menyebabkan data disimpan di memory sebesar file yang diproses

approach 2
Quote:
- baca file besar per line, simpan ke string / byte array
- proses string / byte array
- selagi masih ada line, ulangi proses baca + proses

maka nilai maksimum yang akan ada di memory adalah sebanyak 1 line data, dan nggak akan menyebabkan OutOfMemoryError

cmiiw.

contoh code approach 1, misal:
PHP Code:
public static void testRead1(String filethrows Exception {
        
BufferedReader reader null;
        try {
            
reader = new BufferedReader(new FileReader(file));
            
String line null;
            
int lineCount 0;
            List<
String[]> datas = new ArrayList<String[]>();
            
long start System.currentTimeMillis();
            while((
line reader.readLine()) != null) {
                
String[] data line.split(",");
                
datas.add(data);
                
lineCount++;
            }
            
long end System.currentTimeMillis();
            
System.out.println("ELAPSED TIME: " + (end-start) + " ms");
        } finally {
            if(
reader != null) {
                try {
                    
reader.close();
                } catch(
IOException ignore) {}
            }
        }
    } 

hasilnya kalau dijalanin:
[Ask] tentang j2ee dan handling data
perhatiin memory langsung naek, dan kalau sudah selesai:
[Ask] tentang j2ee dan handling data

perhatiin bedanya dengan approach 2:
PHP Code:
public static void testRead2(String filethrows Exception {
        
BufferedReader reader null;
        try {
            
reader = new BufferedReader(new FileReader(file));
            
String line null;
            
int lineCount 0;
            
long start System.currentTimeMillis();
            while((
line reader.readLine()) != null) {
                
String[] data line.split(",");
                
System.out.println("Data ["+(lineCount+1)+"]:");
                
System.out.println("* name: " data[0]);
                
System.out.println("* age: " data[1]);                
                
lineCount++;
            }
            
long end System.currentTimeMillis();
            
System.out.println("ELAPSED TIME: " + (end-start) + " ms");
        } finally {
            if(
reader != null) {
                try {
                    
reader.close();
                } catch(
IOException ignore) {}
            }
        }
    } 


[Ask] tentang j2ee dan handling data

penggunaan memory relatif datar emoticon-Smilie