Zadejte hledaný výraz...

Import dat z CSV, jak optimalizovat?

David Musil
verified
rating uzivatele
(69 hodnocení)
9. 10. 2017 12:59:27
Ahoj,
pro klienta importujeme velke mnozstvi autodilu. Import je z CSV souboru. Celkove jsou desitky takovych souboru a v nich je cca 4 miliony zaznamu.
Importni skript (cron) prochazi postupne tyto soubory a vzdy v jednom souboru projde treba tisic radku, ulozi pozici v tomto souboru a za 5 minut jede z novu, od tohoto mista a porad dokola.
Pri nacteni jednoho radku je jeden dotaz, zda uz polozka existuje a pripadne se vlozi/edituje. Od doby, co je importovano cca pul milionu radku, tak behem dvou minut se stihne projit treba jen 90 polozek. Bohuzel je tam klasicky webhosting, neni tam VPS. Na skript jsou cca dve minuty, pak ho to killne.
Z toho mi vyplyva, ze tim jak se tabulka plni, strasne se zpomaluje proces vyhledavani. Porovnava se kod produktu (dlouhy retezec) a ID vyrobce. Ted to bohuzel dela 1.04 sekund na jeden dotaz ohledne toho, zda dil existuje. A to uz je hrozne moc.
Polozkam vsak chybi unikatni klic na kod produktu, protoze ten muze existovat ve dvou zaznamech kvuli dobe dodani, nese jine ceny, apod. A tady je myslim problem. Prijde mi, ze ten unikatni klic by to hodne dokazal zrychlit, nebo se pletu?
Tabulka je MySQL (InnoDB).
Jak na to? Prejit na VPS nebo klienta nechat prekopat ceniky, coz je asi nerealne vzhledem k mnozstvi? Pomohl by hodne ten unikatni klic na kod produktu? Problemy jsou nejvetsi pri tom overeni, zda ten produkt uz je v databazi.
9. 10. 2017 12:59:27
https://webtrh.cz/diskuse/import-dat-z-csv-jak-optimalizovat/#reply1305509
wizardd
verified
rating uzivatele
(1 hodnocení)
9. 10. 2017 13:22:44
1 vteřina na 0,5 mil řádků je celkem dost - jsou na daných sloupcích, podle kterých se hledá, indexy? Druhá varianta - naimportovat si to na localhostu, nebo na nějakém VPS a pak přemigrovat celou databázi, nebo jen příslušnou velkou tabulku.
Každopádně, ten hosting asi nebude nejvhodnější na provoz takovéto aplikace/databáze
9. 10. 2017 13:22:44
https://webtrh.cz/diskuse/import-dat-z-csv-jak-optimalizovat/#reply1305508
Martin
verified
rating uzivatele
(62 hodnocení)
9. 10. 2017 13:23:49
Určitě bych nejdřív přešel na výkoné VPS, pokud možno s SSD disky a velkou pamětí. Osobně jsem v minulosti importoval taky miliony záznamů z CSV a na hostingu mi to VPSko nějak nastavili, aby si databáze zabrala dost paměti (jinde nebyla potřeba) a dost to pomohlo.
Podle čeho to vyhledává, když to nemá nějaký unikátní parametr? Nebo to má nějaký jakoby unikátní, ale jsou tam od toho 2 záznamy, s různými parametry, jestli to chápu?
Má to nějaké kategorie? Pokud ano, hledá se produkt jen v dané kategorii, nebo v celé DB?
9. 10. 2017 13:23:49
https://webtrh.cz/diskuse/import-dat-z-csv-jak-optimalizovat/#reply1305507
Marián
verified
rating uzivatele
(4 hodnocení)
9. 10. 2017 13:29:32
Tiez som riesil tento identicky problem (X CSV suborov, miliony zaznamov + porovnavanie s dalsimi milionmi v DB). A jedine riesenie bolo VPS.
9. 10. 2017 13:29:32
https://webtrh.cz/diskuse/import-dat-z-csv-jak-optimalizovat/#reply1305506
lukaspulda
verified
rating uzivatele
(24 hodnocení)
9. 10. 2017 16:11:22
Staci index na data dle kterych se vyhledava.
Pokud jde o optimalizaci poctu db dotazu, nemusite se dotazovat na kazdy radek. Pokus to jde, nactete stav cele tabulky a overujte jednotlive polozky pole v ramci php cyklu. Vysledky pak nahrajte zpet do db.
9. 10. 2017 16:11:22
https://webtrh.cz/diskuse/import-dat-z-csv-jak-optimalizovat/#reply1305505
David Musil
verified
rating uzivatele
(69 hodnocení)
9. 10. 2017 17:31:00
Napsal lukaspulda;1416323
Staci index na data dle kterych se vyhledava.
Pokud jde o optimalizaci poctu db dotazu, nemusite se dotazovat na kazdy radek. Pokus to jde, nactete stav cele tabulky a overujte jednotlive polozky pole v ramci php cyklu. Vysledky pak nahrajte zpet do db.
Opravdu nacist najednou pul milionu zaznamu? To mi neprijde dobre.
Pujdeme cestou VPS, diky vsem za rady. Verim ze takovy projekt si to stejne zaslouzi a je moje chyba, ze jsem cekal, ze to zvladne bezny hosting s par priplatkovymi sluzbami navic.
9. 10. 2017 17:31:00
https://webtrh.cz/diskuse/import-dat-z-csv-jak-optimalizovat/#reply1305504
storyboard
verified
rating uzivatele
9. 10. 2017 23:48:23
Jen pro upřesnění: tohle se bude dělat pravidelně, nebo je to jednorázový import, po kterém budou následovat pouze aktualizace? Pokud jednorázově, tak by se to samo sebou dalo udělat a připravit off line a předpřipravit import do databáze v nějaké optimalizované formě.
A... absence unikátního klíče mne taky zarazila.
9. 10. 2017 23:48:23
https://webtrh.cz/diskuse/import-dat-z-csv-jak-optimalizovat/#reply1305503
lukaspulda
verified
rating uzivatele
(24 hodnocení)
10. 10. 2017 10:47:37
Napsal musil.david;1416350
Opravdu nacist najednou pul milionu zaznamu? To mi neprijde dobre.
Porovnej 1x select a 500 000 řádků a hromadný update a hromadný insert VS 500 000x provádět select/update/insert. 500 000 řádků je pro DB málo, není to žádný velký počet. Mnohem větší zátěž pro DB je neustále v datech hledat, přepočítávat indexy po každým update/insert apod.
10. 10. 2017 10:47:37
https://webtrh.cz/diskuse/import-dat-z-csv-jak-optimalizovat/#reply1305502
Pro odpověď se přihlašte.
Přihlásit