[Linux-programlama] Buyuk Boyutta Dosyalar ile islemler

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Guray SATICI (guray.satici@gmail.com)
Date: Mon 03 Jan 2005 - 11:58:48 EET


Merhabalar ..
Daha once de sordugum bi soru vardi ..
Buyuk boyutlu dosyalar ile islemler konu basligi altindaydi ..

Simdi bu konu uzerinde belli bir noktaya varmis durumdayim ..
Soyleki .. 2.5 GB lik ve 1 GB lik iki dosyam mevcuttu ..
Bunlari cat | grep | cut | sort komutlarini kullana kullana .. 2.5 GB
lik dosyayi 400 MB a kadar ve 1 GB kusurluk dosyami da 70 MB a kadar
indiriyorum ..
Buraya kadar bir sorunum yok .. Hatta 70 MB lik dosyami da satir satir
asagidaki c kodu sayesinde mysql veritabanima atabiliyorum. yaklasik
olarak 5.3 milyon satir .. ve 5.3 milyon kayit olarak veritabanimda
yer aliyor. Yalniz ayni kod ile 400 MB lik dosyayi veritabanina
aktaramiyorum. Core Dumped aliyorum. Isletim sistemi FreeBSD .. biraz
yabancisiyim ama .. sorun cikaracagini sanmiyorum. Kodda nasil bir
duzenleme yapmaliyim ki bu 400 MB lik dosyayi veritabanina
gondereyim????

Ilk soru merakimdan ..
Asil sorunum bu 400 MB lik dosyamdan iki tane olusu (gun icerisinde
hede.old ne hede.new seklinde) ve bu dosya icinde su sekilde satirlar
var ..

hede file :
abc
def
ghi
jkl

seklinde satir satir en fazla 128 karakterden ibaret textlerden ibaret ..
ama gunluk olarak bu text ler degisebiliyor. Misal def gidiyor ve
yerine xyz gelebiliyor. Satirlarda degisim soz konusu .. Alfabetik
bir liste ama

Benim asil yapmak istedigim .. gunluk olarak gelen bu dosyalar
arasindaki farklari ayirmak
Bunun icin c kodumda nasil bir degisiklik yapabilirim???

Ondan sonra bu degisiklikleri veritabanina atacagim zaten

Muhim olan benim icin bu hede.old ve hede.new dosyalari arasindaki
degisiklikleri bulmak

Bu islem icin nasil bir yol izlemeliyim yada??
C kodunda yapmam gerekn duzenlemeler nelerdir sizce?
  

C File --------

#include <stdio.h>
#include <string.h>
#include <mysql/mysql.h>
unsigned long satirOku(FILE *dosya,unsigned long maksimumBoy,char *veri )
{ char tmp;long say=0;
        while(fread(&tmp,1,1,dosya))
                { if (maksimumBoy>say && tmp!='\n')
                                veri[say++]=tmp;
                        else {veri[say++]='\0'; return say;}
                }
        return say;
}
int main(char **args)
{
        MYSQL_RES *result;
        MYSQL_ROW row;
        MYSQL *connection, mysql;
        int state;
        FILE *fp;
        unsigned long satirBoy;
        char line[80];
        char s[100];

        mysql_init(&mysql);
        connection = mysql_real_connect(&mysql, "localhost", "root",
"pass", "domain", 0, 0, 0);
        if( connection == NULL )
        { printf(mysql_error(&mysql));
                return 1;
        }
        fp = fopen("n","r");
        while ( satirOku(fp,50,line))
        {
                strcpy(s, "insert into dom2 values ('");
                strcat(s,line);
                strcat(s,"')");
                /*s = "insert into dom values ('" +line+ "')";*/
                state = mysql_query(connection, s);
                if( state != 0 )
                {
                  printf(mysql_error(connection));
                  return 1;
                }

        }
        mysql_close(connection);
        printf("Done.\n");

}

_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.