Preben01 Skrevet 13. februar 2008 Rapporter Del Skrevet 13. februar 2008 (endret) 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 16. februar 2008 av Preben01 Lenke til kommentar
RusleBiff Skrevet 15. februar 2008 Rapporter Del Skrevet 15. februar 2008 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 Lenke til kommentar
Ueland Skrevet 15. februar 2008 Rapporter Del Skrevet 15. februar 2008 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? Lenke til kommentar
Preben01 Skrevet 15. februar 2008 Forfatter Rapporter Del Skrevet 15. februar 2008 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
Preben01 Skrevet 16. februar 2008 Forfatter Rapporter Del Skrevet 16. februar 2008 Sett hash-kolonnen din UNIQUE. Dette gjøres ved hjelp av ALTER TABLE. <a href="http://dev.mysql.com/doc/refman/5.0/en/alter-table.html" target="_blank">http://dev.mysql.com/doc/refman/5.0/en/alter-table.html</a> 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
mpolden Skrevet 20. mai 2008 Rapporter Del Skrevet 20. mai 2008 Det vil funke, men det er nok feil fremgangsmåte. Gjør heller slik Preben01 foreslo og endre indeks-typen på kolonnen til UNIQUE. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå