webForumDet fria alternativet

Stor import till MySQL

3 svar · 355 visningar · startad av NoiseMaker

NoiseMakerMedlem sedan sep. 2001171 inlägg
#1

Hej!

Om jag har en teckenpositionerad textfil med drygt 6 miljoner "poster" som jag vill importera i en live MySQL-tabell nån gång i månaden med kortaste möjliga driftstopp och importid, hur gör jag då? Har kommit fram till följande förslag:

Skriva en regexp i t.ex. min texteditor som gör Inserts av alla rader och sedan kör MySQL LOAD. Nackdelen med detta är att det är två steg för att få det att funka och jag måste tömma tabellen innan jag kör importen.. det skapar downtime

Annat förlag är att låta ett scriptspråk typ PHP stå och lasta in ett visst antal poster i minuten.. men hur minneshanteringen blir där med tanke på att textfilen är omkring en gig stor vågar jag inte ens tänka på.

Kan man inte låta MySQL köra en egen RegExp som är lågprioriterad prestandamäsigt sett. Alltså så att varje gång databastjänsten har lite krut över så kör den regexpen och uppdaterar posterna.. man tycker ju att det borde gå.

Någon med något smart förlag.. hur går man till väga med så här stora importer?

Imorgon är det fredag!

spangoMedlem sedan juni 20008 205 inlägg
#2

Re: Stor import till MySQL

NoiseMaker skrev:

Annat förlag är att låta ett scriptspråk typ PHP stå och lasta in ett visst antal poster i minuten.. men hur minneshanteringen blir där med tanke på att textfilen är omkring en gig stor vågar jag inte ens tänka på.

Du behöver ju inte läsa in hela filen på en gång. Om varje post ligger på en rad räcker det ju med att du läser in en rad åt gången, inte sant?

NoiseMakerMedlem sedan sep. 2001171 inlägg
#3

joo tanken slog mig med.. kunde ju köra en low-priority update-query med kanske 100 poster var 10 sekund.. på det viset skulle det ta knappt 4 dygn att itterera filen..

hmm.. kan inte MySQL hantera en RegExp ändå? ;-)

GunnarDMedlem sedan juni 20014 290 inlägg
#4

Ett annat sätt är att "importera" informationen till en likadan tabel och sedan köra en rename på tabellen.

Då har du nästan ingen "downtime".

Nackdelen är att du kommer att ha 2st lika stora tabeller vilket kanske inte är så bra om du inte har plats för det.

http://dev.mysql.com/doc/mysql/en/rename-table.html

133 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)