sql >> Databáze >  >> RDS >> Mysql

Potřebujete vložit 100 000 řádků do mysql pomocí hibernace za méně než 5 sekund

Po vyzkoušení všech možných řešení jsem nakonec našel řešení, jak vložit 100 000 řádků pod 5 sekund!

Věci, které jsem zkusil:

1) Nahrazena id hibernace/databáze AUTOINCREMENT/GENERATED ids sama vygenerovanými ID pomocí AtomicInteger

2) Povolení batch_inserts s batch_size=50

3) Vyprázdnění mezipaměti po každém počtu volání persist() 'batch_size'

4) multithreading (o tento se nepokusil)

Nakonec to, co fungovalo, bylo použití nativního dotazu s více vkládáními a vložení 1000 řádků do jednoho SQL vkládacího dotazu namísto použití persist() na každou entitu. Pro vložení 100 000 entit vytvořím nativní dotaz jako tento "INSERT into MyTable VALUES (x,x,x),(x,x,x).......(x,x,x)" [1000 vložení řádků v jednom dotazu na vložení SQL]

Nyní trvá vložení 100 000 záznamů přibližně 3 sekundy! Takže úzkým hrdlem byl samotný orm! Zdá se, že u hromadných vkládání funguje pouze nativní dotazy na vkládání!



  1. Schéma databáze, autoinkrementace

  2. Vnořený příkaz select v SQL Server

  3. Jak nainstalovat Oracle na Mac

  4. MySQL:NENÍ RÁD