Hallo,
bei einem Import einer großen CSV Datei, sowie an weiteren Stellen (andere Objekte)
benötige ich eine fortlaufende Nummer.
Soweit kein Problem, letzten Wert aus SQL holen, incrementieren, und wieder speichern.
Wenn ich nun aber die CSV Datei importiere > 80.000 Datensätzte
wird der Import durch die generierung der Nummer sehr stark ausgebremst.
Selbst das reflection Parsen der Datensätze geht schneller :O)
Ich arbeite mit Hibernate als SQL Schnitstelle.
bis jetzt schauts so aus:
Die Nummer darf nicht gecached werden, da eventuell, sofern einmal das Programm zwei mal im Einsatz ist, nicht die IDś zwei mal vergeben werden könnten.
Vielen Dank!
bei einem Import einer großen CSV Datei, sowie an weiteren Stellen (andere Objekte)
benötige ich eine fortlaufende Nummer.
Soweit kein Problem, letzten Wert aus SQL holen, incrementieren, und wieder speichern.
Wenn ich nun aber die CSV Datei importiere > 80.000 Datensätzte
wird der Import durch die generierung der Nummer sehr stark ausgebremst.
Selbst das reflection Parsen der Datensätze geht schneller :O)
Ich arbeite mit Hibernate als SQL Schnitstelle.
bis jetzt schauts so aus:
Java:
public Long getConsecutiveNumber(Session p_session) {
if(p_session == null) { // keine Session übergeben
Long toRet = 0L;
Session session = hibernate.InitSessionFactory.getInstance().getCurrentSession();
Transaction tx = session.beginTransaction();
ConsecutiveNumber CN = (ConsecutiveNumber) session.get(ConsecutiveNumber.class, 1);
if(CN == null) { // Noch nicht vorhanden
CN = new ConsecutiveNumber();
CN.setNumber(1L);
CN.setId(1);
session.save(CN);
toRet = 1L;
}else{
toRet = CN.getNumber() + 1;
CN.setNumber(toRet);
session.update(CN);
tx.commit();
}
return toRet;
}else{ // Session vorhanden
Long toRet = 0L;
ConsecutiveNumber CN = (ConsecutiveNumber) p_session.get(ConsecutiveNumber.class, 1);
if(CN == null) { // Noch nicht vorhanden
CN = new ConsecutiveNumber();
CN.setNumber(1L);
CN.setId(1);
p_session.save(CN);
toRet = 1L;
}else{
toRet = CN.getNumber() + 1;
CN.setNumber(toRet);
p_session.update(CN);
}
return toRet;
}
}
Die Nummer darf nicht gecached werden, da eventuell, sofern einmal das Programm zwei mal im Einsatz ist, nicht die IDś zwei mal vergeben werden könnten.
Vielen Dank!