Schnell eine fortlaufende nummer erzeugen SQL, kein Primkey

sence

Bekanntes Mitglied
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:
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!
 
S

SlaterB

Gast
reserviere mit einem Mal gleich 10.000 Ids oder noch mehr, die kann dann doch wohl dieser Prozess cachen, sind nur für ihn gedacht,
wenn sie nicht genutzt werden, dann verkraftbar, oder muss es immer +1 sein?

edit:
dass du den Haupt-Code-Block zweimal schreibst ist sehr ungünstig,
was immer du an Transaktion oder Session machen musst schreibe lieber ans Anfang und Ende per if/else,
das wichtigste dazwischen nur einmal
 

sence

Bekanntes Mitglied
parabool:

dann hätte ich aber pro neue Nummer, einen neuen Datensatz.
Also wieder mehr SQL Querys, welche das System ausbremsen.
Object obj = new Object():
session.save(obj).
tx.commit();
return obj.id;

leider nicht performant genug.

Werde wohl nicht um einen Cache herum kommen.

Denke werde 500 IDS reservieren, diesen Bereich gleich updaten, damit dieser "syncron" zwichen mehren Applikationen ist und dann sollte es klappen.

Das mit dem Hauptblock werde ich berückstichtigen. Danke!
 

sence

Bekanntes Mitglied
Hey, das Problem ist, dass es den Import vorgang ausbremst, wenn ich schnell viele IDS erzeuge.
für jede ID einen DB Eintrag machen, ist nicht gerade effizient oder ?

So könnte der Cache aussehen, vorschläge?
teste gleich mal die Geschwindigkeit, mit neuen Datensätzten Erzeugen.

Java:
Long pool = null;
	
	Long lastID = 0L;
	Long idsLeft = null;	
	Long cacheSize = 500L; 
	
	public Long nextNumber() {			
		
		if(pool == null || pool == 0L) {
			pool = cacheSize; // Cachesize reservieren.
			System.out.println("Speichere in DB den Pool: " + pool);
			idsLeft = cacheSize; 
			lastID = 0L;
		}
		
		
		if(idsLeft != null && idsLeft > 0 ) {
			lastID ++;
			idsLeft --;
			return lastID;
		}else{
			System.out.println("Erhöhe Cache Size um: " + cacheSize + " und speichere in DB: " );
			pool += cacheSize;
			System.out.println("Speichere in DB : " + pool);
			lastID = (pool - (cacheSize) );
			idsLeft = cacheSize;
			
			idsLeft --;
			lastID++;
			return lastID;
		}
	
			
	}

hab gerade mal das getestet mit Objecten erzeugen und Speichern, also nur primkeys, das dauert zulange :/

bleibe bei der Cache veriante.
Danke @ all
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Einfache Navigations-App schnell selber Programmieren? Bitte um Ideen und Anregungen. Allgemeine Java-Themen 17
K Große JSON-Dateien schnell und effizient verarbeiten Allgemeine Java-Themen 16
T Collections Liste schnell/nebenläufig durchgehen Allgemeine Java-Themen 2
M Bilderstapel schnell durchschalten? Speicherprobleme. Allgemeine Java-Themen 3
A Möglichkeiten, ein Bild schnell auszuwerten Allgemeine Java-Themen 56
parite.b schnell frage ;) API CONTENTS ? Allgemeine Java-Themen 5
E brauche schnell Ausführbare Datei Allgemeine Java-Themen 4
G ganzzahlige Potenz schnell berechnen Allgemeine Java-Themen 4
T Serialisierung: Wie macht RMI das so schnell? Allgemeine Java-Themen 14
G schnell Strings vergleichen Allgemeine Java-Themen 4
G Datenbank-Anwendung schnell erstellen. Allgemeine Java-Themen 7
J Datei Inhalt vergleichen (schnell & effizient!) Allgemeine Java-Themen 10
M Schnell kleine Hilfe gesucht! Allgemeine Java-Themen 3
C Daten möglichst schnell einem Baum zuordnen Allgemeine Java-Themen 2
M 2-dimensionalen array schnell kopieren Allgemeine Java-Themen 6
G Soundsamples schnell hintereinander abspielen Allgemeine Java-Themen 4
T Bilder schnell in BufferedImage laden Allgemeine Java-Themen 4
A mein Frame wird nicht schnell genung aktualisiert Allgemeine Java-Themen 7
F Große Dateien schnell einlesen Allgemeine Java-Themen 14
KonradN Mal eine Frage zu Binary Serialization Allgemeine Java-Themen 15
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
dokan wie kann ich eine funktionierende Suchleiste erstellen Allgemeine Java-Themen 1
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
J Integration pay Pale in eine JavaFx Desktop Application Allgemeine Java-Themen 1
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
berserkerdq2 Gibt es eine saubere Dokumentation von Jfoenix? Allgemeine Java-Themen 1
M Eigene Datenstruktur um eine Menge zu speichern Allgemeine Java-Themen 3
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
E Es ist nicht möglich, eine Batch-Anweisung auszuführen. Allgemeine Java-Themen 9
T Eine Frage des Designs Allgemeine Java-Themen 2
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
H Eine Linie verkürzen Allgemeine Java-Themen 5
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 Wie synchronisiere ich eine for-Schleife Allgemeine Java-Themen 12
berserkerdq2 Wie mache ich in IJVM eine if verzweigung? Allgemeine Java-Themen 27
F Gibt es mittlerweile eine Alternative zu DaisyDiff Allgemeine Java-Themen 2
_user_q Was brauche ich, um eine eigene "Search for updates"-Funktion einzubauen? Allgemeine Java-Themen 1
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
pizza_dox_9999 Wie füge ich eine "eigene" ScriptEngine dem ScriptEngineManager? Allgemeine Java-Themen 3
F Kennt ihr eine Library um 2 HTML Seiten zu diffen? Allgemeine Java-Themen 8
Y ImagePanel von anderer Klasse in eine MainFrame Klasse hinzufügen. Allgemeine Java-Themen 1
OnDemand Anzeigen was eine Applikation macht Allgemeine Java-Themen 1
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
J Eine Frage zu den Threads und Task Allgemeine Java-Themen 1
Tobero Wie bekomme ich in welchem Quadrat sich eine Position in einem Grid befindet Allgemeine Java-Themen 11
Tobero Wie kann man eine Poisson Disc Sampler? Allgemeine Java-Themen 7
M Openjdk - gibt es auch eine Openjre? Allgemeine Java-Themen 7
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
J Öffnen eine jar-Datei Allgemeine Java-Themen 11
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
R Wo müsste ich im Code eine Änderung vornehmen? Allgemeine Java-Themen 6
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
S Gibt es eine Moeglichkeit die Runtime Ausführung zu analysieren..? Allgemeine Java-Themen 7
S Habt ihr eine Idee wie man Serializierung testen kann..? Allgemeine Java-Themen 6
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
Drachenbauer warum bekomme ich hier eine NullPointerException Allgemeine Java-Themen 6
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
N Eine stelle der Fibonacci-Zahlenfolge ausgeben. Allgemeine Java-Themen 4
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
W Collections Suche etwas Sorted-List-Artiges...hat jemand eine Idee? Allgemeine Java-Themen 13
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
J Datenstruktur für eine Map erstellen Allgemeine Java-Themen 2
sascha-sphw Java 9 module Zugriff auf eine resource einer anderen JAR Allgemeine Java-Themen 0
pkm Kann eine ServerSocket-Klasse nicht stateful sein? Allgemeine Java-Themen 4
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
I Eine Anwendung so gut wie möglich beschützen Allgemeine Java-Themen 9
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
X Wie mache ich hier eine Rekursion rein ? Allgemeine Java-Themen 7
K OOP Suche Hilfe + Erklärung für eine Hausaufgabe Allgemeine Java-Themen 1
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M Login in eine Webseite mit Java Allgemeine Java-Themen 3
A NetBeans Suche Programmierer für eine Belegarbeit Allgemeine Java-Themen 11
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
L Übergabe an eine eher einfache Java- Applikation wegen Kündigung Allgemeine Java-Themen 1
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
M Schlüsselworte Was ist eine Java Spezifikation + JSR? Allgemeine Java-Themen 11
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
E RMI FWH: RMI- Wie erstelle ich stubs dynamisch, bzw. unterdrücke eine Statisch-Warnung? Allgemeine Java-Themen 0
J Eine bestimmte Zahl im Integer ändern Allgemeine Java-Themen 9
Q-bert Strings aus der JList in eine Datenbank speichern Allgemeine Java-Themen 1
D Möglichkeit mit GAE eine Table auszulesen und eine csv zu schreiben Allgemeine Java-Themen 22
S Korrekte Pfadangaben damit eine .jar Datei unter Windwos läuft. Allgemeine Java-Themen 24
D Eine Forschleife mit Threads abarbeiten um es zu schneller zu machen. Ist das möglich? Allgemeine Java-Themen 20
S Wie kann ich eine kleine Stelle in meinem Code mit multiplen Threads abarbeiten..? Allgemeine Java-Themen 20
B Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? Allgemeine Java-Themen 8
R bei eclipse von java in eine andere programmiersprache wechseln? Allgemeine Java-Themen 2
D Pivot-Wahl beim QuickSort steigert die Effizienz, eine Lüge??? Allgemeine Java-Themen 17
C Eclipse einstellen, dass eine bestimmte JDK benutzt werden soll Allgemeine Java-Themen 3
M Klassen Eine Klasse in mehreren Klassen einbinden Allgemeine Java-Themen 11
A Best Practice Java - eine Art Plugin-Struktur Allgemeine Java-Themen 3
S wie rufe ich mit .jar datei eine .bat auf? Allgemeine Java-Themen 15

Ähnliche Java Themen

Neue Themen


Oben