Gå til innhold

[løst] mysql + perl + skalering ?


Anbefalte innlegg

Jeg har en database som øker med omlag 1 000 000 records hver dag, i en tabell. Alle radene har en hash som baserer seg på innholdet, som også gjør at jeg ikke legge inn samme data to ganger.

 

Nå er databasen 25 millioner rader, og preformance messig merker du at ting skjer.

Siden jeg bruker hash verdien før jeg legger inn data, så har jeg indexert denne raden.

Men det går treigt , og tar meg ca 50 minutter for å importere 300.000 records.

 

 

Ok, så hva er problemet? Vel, importeringen av data tar for lang tid. Jeg vet det er store datamengder, men hva er den RASKESTE måten å importere 2-300.000 linjer med data inn i en mysql base, samtidig som jeg sjekker uniknessen?

 

Jeg luker vekk en del duplikater allerede på perlnivå ved å bruke en perl-hash, men det som tar tid er den kontinuerlige kryssjekken med mysql om dataen ligger der fra før.

 

Gangen i det hele er..

 

<perl>kjære mysql, har du data XYZ (sha1 hash verdi)?

<mysql>tenke ... hmm.. tenke....

<mysql>nei ..

<perl> ah oki.. da legger jeg inn denne ene raden ....

 

<perl> 1 down, 299.999 to go ...

 

Det må da finnes en bedre måte? Hvor du får lagt inn store mengder data, men samtidig sjekker at det ikke legges inn data som er der ifra før.

 

Håper noen mysql guruer der ut kan hjelpe meg litt her...

 

Thanks ;)

Endret av Preben01
Lenke til kommentar
Videoannonse
Annonse
Sett hash-kolonnen din UNIQUE. Dette gjøres ved hjelp av ALTER TABLE. http://dev.mysql.com/doc/refman/5.0/en/alter-table.html

 

Tillater den kun nye ikke-eksisterende hasher å bli lagt inn da? og failer om den har duplikat ?

Forstår jeg deg riktig da?

 

1) Hvor stor fysisk dataplass tar databasen?

2) Har du indekser? #2 er inne på noe.

3) Hvor sterk er serveren det ligger på

4) Er det flere servere?

 

 

1. 1 gig

2. Ja har indexer på hash som er hva jeg spør etter i queryen.

3. En grei maskin en 2ghz med 1gig minne. Det er kun dev. boks, og prod vil bli raskere

4. Nei, det er kun 1 maskin. Men jeg har vært innom tanken og kanskje spre importen over flere bokser..

 

Takk for svar :)

Lenke til kommentar

 

Tillater den kun nye ikke-eksisterende hasher å bli lagt inn da? og failer om den har duplikat ?

Forstår jeg deg riktig da?

 

1) Hvor stor fysisk dataplass tar databasen?

2) Har du indekser? #2 er inne på noe.

3) Hvor sterk er serveren det ligger på

4) Er det flere servere?

 

 

1. 1 gig

2. Ja har indexer på hash som er hva jeg spør etter i queryen.

3. En grei maskin en 2ghz med 1gig minne. Det er kun dev. boks, og prod vil bli raskere

4. Nei, det er kun 1 maskin. Men jeg har vært innom tanken og kanskje spre importen over flere bokser..

 

Takk for svar :)

 

Løste det med å sette hash som primary key, derfor failer queryen når den har duplikater (så handler jeg erroren i perl). Og så sourcet jeg inn filer. Og da gikk ting 1/100 av tiden . :)

Sikkert ikke beste måte å gjøre det på , men det er superraskt og funker.

Lenke til kommentar
  • 3 måneder senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...