HSQLDB (extern) für große Datenmengen optimieren
Verfasst: Fr, 25.04.2008 15:01
Hallo Forum,
ich habe ein kleines Problem mit der Performance von HSQLDB+Base. In eine Tabelle einer externen HSQLDB werden aus einer größeren CSV-Datei ca. 140.000 Datensätze eingefügt. Datensatz bzw. Tabelle hat 10 INTEGER und 8 DECIMAL Felder.
Wenn ich diese Tabelle in Base öffne, dauert es schomal 5 min bis ich die erste Seite der Werte vollständig ansehen kann. Wenn ich auf den Doppelpfeil ">>" klicke um ans Ende der Datensätze zu navigieren, dauert es weitere 8 min.
Eine einfache Abfrage (SELECT * FROM "Tabelle" WHERE "JAHR" >= 2008) soll mir ca. 40.000 Datensätze liefern. Dauer: 3 min bis ich die erste Seite der Datensätze sehe. Und ein einfaches COUNT(*), welches die genaue Anzahl dieser Datensätze ausgibt, dauert ca. 2 min.
Normalerweise würde ich Optimierungen an der DB erst anstreben, wenn ich mit der Logik vertig bin. Aber ich fürchte, dass ich bei diesen Werten sehr lange Pausen haben werde, bis ich die Logik fehlerfrei implementiert habe. Deshalb muss ich an dieser Stelle prüfen, ob das Problem bei HSQLDB oder Base liegt und ob ich dieses irgendwie in den Griff bekomme.
Ich benutze "CREATE CACHED TABLE". Und so sieht die ".properties" Datei aus:
Wie man sieht habe ich schon versucht einige Werte zu verändern. Leider ohne messbaren Erfolg.
Mein Testsystem:
Windows XP, 1 GB RAM, 1,8 GHz
Java 6.0
OOo 2.4 + externe HSQLDB über JDBC
Kennt sich jemand mit dem Problem großer Datenmengen aus und weiß hier evt. eine Lösung?
Habe ich falsche HSQLDB-Einstellungen?
Habe ich die falsche Datenbank hierfür, sprich kann HSQLDB das gar nicht?
Sollte ich mir lieber doch die Mühe machen und PostgreSQL einsetzen?
Für hilfreiche Antworten danke ich euch im Voraus!
Grüße
Alex
ich habe ein kleines Problem mit der Performance von HSQLDB+Base. In eine Tabelle einer externen HSQLDB werden aus einer größeren CSV-Datei ca. 140.000 Datensätze eingefügt. Datensatz bzw. Tabelle hat 10 INTEGER und 8 DECIMAL Felder.
Wenn ich diese Tabelle in Base öffne, dauert es schomal 5 min bis ich die erste Seite der Werte vollständig ansehen kann. Wenn ich auf den Doppelpfeil ">>" klicke um ans Ende der Datensätze zu navigieren, dauert es weitere 8 min.
Eine einfache Abfrage (SELECT * FROM "Tabelle" WHERE "JAHR" >= 2008) soll mir ca. 40.000 Datensätze liefern. Dauer: 3 min bis ich die erste Seite der Datensätze sehe. Und ein einfaches COUNT(*), welches die genaue Anzahl dieser Datensätze ausgibt, dauert ca. 2 min.
Normalerweise würde ich Optimierungen an der DB erst anstreben, wenn ich mit der Logik vertig bin. Aber ich fürchte, dass ich bei diesen Werten sehr lange Pausen haben werde, bis ich die Logik fehlerfrei implementiert habe. Deshalb muss ich an dieser Stelle prüfen, ob das Problem bei HSQLDB oder Base liegt und ob ich dieses irgendwie in den Griff bekomme.
Ich benutze "CREATE CACHED TABLE". Und so sieht die ".properties" Datei aus:
Code: Alles auswählen
#HSQL Database Engine 1.8.0.9
hsqldb.script_format=0
runtime.gc_interval=0
sql.enforce_strict_size=true
hsqldb.cache_size_scale=10
readonly=false
hsqldb.nio_data_file=false
hsqldb.cache_scale=16
version=1.8.0
hsqldb.default_table_type=cached
hsqldb.cache_file_scale=8
hsqldb.log_size=8
modified=yes
hsqldb.cache_version=1.7.0
hsqldb.original_version=1.8.0
hsqldb.compatible_version=1.8.0
Mein Testsystem:
Windows XP, 1 GB RAM, 1,8 GHz
Java 6.0
OOo 2.4 + externe HSQLDB über JDBC
Kennt sich jemand mit dem Problem großer Datenmengen aus und weiß hier evt. eine Lösung?
Habe ich falsche HSQLDB-Einstellungen?
Habe ich die falsche Datenbank hierfür, sprich kann HSQLDB das gar nicht?
Sollte ich mir lieber doch die Mühe machen und PostgreSQL einsetzen?
Für hilfreiche Antworten danke ich euch im Voraus!
Grüße
Alex