Optimalizace insertů – migrace dat

Rndoom04
Člen | 72
+
0
-

Dobrý den,
prosím o popostrčení ohledně optimalizace insertů do databáze.

Pracuji na migrování dat z jednoho e-shopu do druhého (k oboum mám zdrojové kódy). Na původním jsem si napsal API, které přečte databázi a vrátí jako JSON (produkty, varianty, objednávky, …). Aktuálně řeším produkty a varianty.

Data přečtu a přes foreach zpracuji:

  • Založím produkt | 1 insert
  • Přiřadím ho do kategorie (pokud neexistuje, založím) | 1–2 inserty
  • Přiřadím výrobce (pokud neexistuje, založím) | 1–2 inserty
  • Nastavím šablonu variant (vždy existuje, protože e-shop používá jen jednu) | 1 insert
  • Přiřadím varianty (a pokud neexistují, založím a přiřadím) | 1–24 insertů
  • Přidám do fronty požadavek na stažení obrázků (to dlouho trvá, proto samotné stahování řeším až jiným scriptem). | 1 insert

Každý produkt má tedy n-insertů do databáze a celkově zpracování jednoho produktu trvá +/- vteřinu. Produktů jsou stovky.

Výhodu to má v tom, že většina insertů se provede na začátku (varianty, kategorie) a další produkty už je jen používají. V selectech asi problém není, celkově je jich fakt málo a profilováním zaberou z celého scriptu max 2 sekundy.

No, aktuálně mě netrápí zvednout počet sekund zpracování a prostě počkat, ale spíše pro příště. Jak by se to dalo ulehčit? Existuje nějaká metoda, kam bych si ty inserty „uložil“ a pak je hromadně poslal do databáze? Nebo se to dělá jinak? :)

Děkuji za pomoc.

Milo
Nette Core | 1283
+
+2
-

Pokud to děláš na MySQL, zkus to celé uzavřít do transakce.

Obecně dělej multiinserty, třeba 100 až 1000 řádků najednou.

Pepino
Člen | 247
+
0
-

@Rndoom04 udělej to spustitelné přes příkazovou řádku.