Seite 1 von 1

Erfahrungsbericht: HSQL-DB mit Memory-Tables statt Cached Tables

Verfasst: So 6. Aug 2017, 15:49
von Freischreiber
Hallo,

aus Neugier und Ungeduld habe ich meine gesplittete HSQL-DB von gecacheten Tabellen auf reine Memory-Tabellen (Arbeitsspeicher-Tabellen) umgestellt.

Grund war dieser Hinweis auf unterschiedliche Performance: http://www.hsqldb.org/web/hsqlPerformance.html
Datenbanken mit Memory-Tabellen im "in-process"-Modus sind am schnellsten. :D

Da ich meine DB durch dieses Makro einbinde: https://forum.openoffice.org/en/forum/v ... 80#p293026
(siehe Punkt 3x), mußte ich nur ein Wort in dem Makro ändern:
sURL_args = ";default_schema=true;shutdown=true;hsqldb.default_table_type=memory;get_column_name=false"
(Danach Makro ausführen und Base-Neustart)

Auch diese Memory-Tables sind persistent: http://hsqldb.org/doc/guide/ch01.html#N1023C
Das habe ich ausprobiert durch Schreiben/Ändern von Datensätzen, was die übliche .log-Datei erzeugt hat. Nach Ausschalten des PC und Wiederhochfahren wurde die .log-Datei wie bei Cache-Tabellen auch in die DB eingebunden und die Änderungen waren da.

Der Geschwindigkeitsunterschied ist deutlich. Das Springen in einer geöffneten Tabelle zum letzten Datensatz dauert statt 5-6 Sekunden nur noch unter einer Sekunde. Der Arbeitsspeicher-Verbrauch ist nicht viel höher als bei gecacheten Tabellen, allerdings habe ich nur Tabellen mit einigen tausend Datensätzen. Für terabyte-große Tabellen ist das natürlich nichts.

Ob die Umstellung auf Memory-Tables bei der eingebetteten HSQL-Datenbank, die Libreoffice mitliefert, auch geht, weiß ich nicht.

Gruß
Freischreiber

Re: Erfahrungsbericht: HSQL-DB mit Memory-Tables statt Cached Tables

Verfasst: So 6. Aug 2017, 17:10
von Freischreiber
Hm. Bin jetzt nicht sicher, ob diese Änderung am Makro wirklich zu Memory-Tabellen geführt hat. Oder ob das nicht nur für die Erzeugung neuer Tabellen gilt.

Der Geschwindigkeitszuwachs könnte auch von einem Java-Update herkommen... :?

Weiß jemand, wie man prüfen kann, ob die Tabellen vollständig im Arbeitsspeicher sind oder gecached?

Gruß
Freischreiber

Re: Erfahrungsbericht: HSQL-DB mit Memory-Tables statt Cached Tables

Verfasst: So 6. Aug 2017, 19:54
von RobertG
Hallo Freischreiber,

Du hast nur den default-table-type verändert. Das würde in der internen Datenbank auch gehen - allerdings müsset der Nutzer dann in die *.odb-Datei eintauchen und die Datei database/properties mit einem Packprogramm aufsuchen und ändern. In database/script ist dann zu sehen, wie die *.odb-Datei die Dateien als cached-Dateien anlegt: CREATE CACHED TABLE "Tabellenname" ...

Wenn also in Extras > SQL nur CREATE TABLE "Tabellenname" ... angegeben wird, dann wird der Defaultwert "CACHED" genommen. Du musst also explizit CREATE MEMORY TABLE "Tabellenname" ... angeben, damit daraus eine MEMORY-Tabelle wird.

Ich sehe gerade, dass ich den Default-Wert im Handbuch falsch stehen habe. Widerspricht dem Auszug aus database/properties und database/script. Wird natürlich sofort in der Überarbeitung geändert.

Ich weiß nicht, ob es für Memory-Tabellen irgendwo eine Begrenzung gibt. Ich habe mich bei einer MySQL-Datenbank vor kurzem damit auseinandersetzen müssen, wie ich bei einer Memory-Tabelle die Begrenzung hoch setzen kann, da sich MySQL sonst weigerte, die Tabelle überhaupt zu erstellen.

Gruß

Robert

Re: Erfahrungsbericht: HSQL-DB mit Memory-Tables statt Cached Tables

Verfasst: Mo 7. Aug 2017, 08:54
von Freischreiber
Hallo Robert,

ja, inzwischen habe ich gefunden, wie man bestehende Tabellen ändern kann:
https://stackoverflow.com/questions/591 ... sqldb?rq=1
Also bei der externen HSQL-DB 2.x mit

Code: Alles auswählen

SET TABLE "mytable" TYPE MEMORY
In der properties-Datei steht bei der 2.x-Version nichts vom Standard-Tabellentyp, das wird offenbar nur über den aufrufenden Link gemacht, wie im Makro.

In der internen 1.8-DB kann man die script-Datei anscheinend direkt editieren, um von cached auf memory zu stellen. Wenn ich das bei der 2.x-script-Datei mache, erhalte ich Fehlermeldungen wegen Indexeinträgen. Also nehme ich das SQL-Kommando.

Eine Begrenzung gibt es wahrscheinlich durch die Hardware oder das Betriebssystem. Bei Windows müßte außerdem, sobald der Arbeitsspeicher überschritten ist, die Auslagerungsdatei das RAM erweitern. Das lasse ich mal auf mich zukommen.

Gruß und vielen Dank
Freischreiber

Re: Erfahrungsbericht: HSQL-DB mit Memory-Tables statt Cached Tables

Verfasst: Mo 7. Aug 2017, 16:48
von Freischreiber
So, ich trau mich heute was.
- alle Tabellen auf memory gestellt
- .data-Datei gelöscht, da die nur Daten für gecachete Tabellen enthält - die ich nicht mehr habe.

Sämtliche Dateibankinhalte sind in der .script-Datei gespeichert. Jetzt verstehe ich auch, warum sich die .data-Datei in der Größe nie geändert hatte über die Zeit. Die war immer nur der Cache für die Tabelleninhalte, die komplett in der .script-Datei stehen.