Hört sich nach einem normalen Datenimport an. Du bekommst eine Eingabedatei, baust daraus Objekte und fügst diese dann in eine Datenbank ein.
Da gibt es mehrere Möglichkeiten zur Steigerung der Performance, die auch ein wenig von den eigentlichen Daten abhängen :
* Eingabedatei besteht aus alten Daten (verändert oder gleichbleibend) und neuen :
Du könntest die Tabelle löschen und einfach alles wieder inserten. Bei MySql habe ich mit dieser Strategie gute Erfahrungen gemacht. --> keine Duplicate-Key Errors. Nicht empfehlenswert, wenn Du einige Millionen Zeilen einfügen willst 
Oder Du verwendet die Syntax "insert into ... on duplicate key update ...". Hierbei wird bei einem doppelten Schlüssel geupdatet und Du erhälst keinen Fehler.
* Eingabedatei besteht nur aus neuen Daten :
Tja, der beste Fall. Einfach nur inserten 
* Allgemein :
In Paketen arbeiten. Das bedeutet z.B. 1000 Zeilen der Eingabedatei bearbeiten, 1000 Objekte erzeugen und einfügen/updaten. Speicher aufräumen (Listen/Objekte leeren/nullen, VM zur GC ankitzeln). Mit den nächsten 1000 weitermachen usw. 1000 Soll nur ein Beispiel sein, je nach Power kann man das natürlich varieren.
Wenn möglich, Transaktion(en) nutzen. Oder, wenn auf der Datentabelle/mit der Datenbank zusätzlich noch gearbeitet wird, Pausen einplanen. Ein paar Millisekunden reichen schon aus, um das Dauerfeuer auf die Datenbank zu unterbrechen/pausieren. Andere Nutzer werden dir es danken 
Die Datenbanktabellen regelmäßig durch "optimize" optimieren, Indizes setzen etc.
Mit MySql (Diablo-Java, MyIsam /DB-Server: FreeBSD, DualCore ca. 2*3Ghz, 16GB) habe ich bis zu 50k-60k Inserts pro Minute durch Firmennetz erreicht.