Efter at have prøvet alle mulige løsninger fandt jeg endelig en løsning til at indsætte 100.000 rækker under 5 sekunder!
Ting jeg prøvede:
1) Erstattet dvale/databasens AUTOINCREMENT/GENERATEDE id'er med selvgenererede ID'er ved hjælp af AtomicInteger
2) Aktivering af batch_inserts med batch_size=50
3) Tømmer cachen efter hvert 'batch_size' antal persist()-kald
4) multithreading (forsøgte ikke denne)
Endelig, hvad der virkede, var at bruge en native multi-insert-forespørgsel og indsættelse af 1000 rækker i en sql insert-forespørgsel i stedet for at bruge persist() på hver enhed. For at indsætte 100.000 enheder opretter jeg en indbygget forespørgsel som denne "INSERT into MyTable VALUES (x,x,x),(x,x,x).......(x,x,x)"
[1000 rækkeindsættelser i én sql-indsættelsesforespørgsel]
Nu tager det omkring 3 sekunder at indsætte 100.000 poster! Så flaskehalsen var selve ormen! For masseindsættelser er det eneste, der ser ud til at virke native indsættelsesforespørgsler!