pianoforte Skrevet 18. juli 2014 Del Skrevet 18. juli 2014 Har et PHP-skript som setter inn 1-2 millioner rader i én MySQL-tabell. Det tar i dag ca 90 sekunder å kjøre skriptet. Det er forsåvidt helt akseptabelt, men om det er mulig vil jeg kjøre koden mer effektivt for å spare tid og (aller viktigst) belastning på server. Alle radene settes i samme tabell i samme database og hver rad inneholder to int-verdier og en float. Måten jeg gjør det på i dag er å ha én insert-statement per rad, og alt sammen bakt inn i én transaction. Finnes det bedre måter å gjøre det på? Og er InnoDB beste valg? Og et spørsmål til: Denne tabellen vil med tiden kunne nå opptil en milliard rader. Er det noe spesielt jeg må tenke på i den sammenheng? Lenke til kommentar
laurell Skrevet 18. juli 2014 Del Skrevet 18. juli 2014 Her ingen ekspert på området, men tenker meg det at du trenger veldig mye diskplass til så mye data og ikke minst datakraft til å gjøre spørringer mot en slik base i MySQL. Jeg foreslår at du sjekker ut NoSQL (kanskje MongoDB for din del) og mulig legger dataen din på skyen og tar spørringer der. Lenke til kommentar
Crowly Skrevet 18. juli 2014 Del Skrevet 18. juli 2014 (endret) Hvor leser du dette i fra? Hvis det er fra filer så ta en titt på LOAD DATA INFILE, for Mysql. Dette er nok det raskeste alternativet. Hvis dette kjøres på Ubuntu, så må du gi mysql lese rettigheter, i Apparmor, til mappen fila ligger i. Dette gjøres i /etc/apparmor.d/usr.sbin.mysqld /path/til/fil-mappe/* r // for alle under mapper i tillegg /path/til/fil-mappe/** r Mysql støtter også å sette inn flere forekomster i samme insert, er ikke helt sikker på maks, men det fungerer i alle fall med 50 om gangen INSERT INTO (felt1, felt2, felt3) VALUES (1,2,3), (4,5,6), (7,8,9) Å bruke prepared statesments er nok litt raskere enn å sende hele insert'en hver gang. Endret 18. juli 2014 av Crowly Lenke til kommentar
quantum Skrevet 29. juli 2014 Del Skrevet 29. juli 2014 om innodb er hensiktsmessig er helt umulig å si siden vi ikke vet noe om hverken dataene dine eller hensikten din. dette henger også sammen med krav til konsistens, hvis du kan tillate deg å leve med defektene i myisam kan du kanskje hente noe ved å bruke det tabellformatet også. myisam har feks ikke transaksjoner. du kan også tjene på tuning av mysql, bufferstørrelser osv. les manualen og bruk google. ellers er nok tipset til crowly over her noe å prøve ut. Lenke til kommentar
siDDis Skrevet 7. august 2014 Del Skrevet 7. august 2014 1 Milliard rader går fint, men vedlikehald av indekser kan ta noko tid. Iallefall ikkje bruk MongoDB, den er bare LOL http://aphyr.com/posts/284-call-me-maybe-mongodb 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å