Gå til innhold

Millioner av inserts i MySQL (PHP)


Anbefalte innlegg

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
Videoannonse
Annonse

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

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 av Crowly
Lenke til kommentar
  • 2 uker senere...

 

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
  • 2 uker 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...