In-Memory Datenbank -- Speicherdurchsatz?

Für sonstige Unterhaltungen, welche nicht direkt mit Lazarus zu tun haben
Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6208
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: In-Memory Datenbank -- Speicherdurchsatz?

Beitrag von af0815 »

Socke hat geschrieben:Für SQLite ist es ja kein Problem, mehrere Threads zu starten, die verschiedene Auswertungen durchführen.

Mehrere threads aus der Sicht der DB sind mehrer Verbindungen/Benutzer. Da würde ich vorsichtig sein. Das kann durch das locking von Sqllite nach hinten losgehen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: In-Memory Datenbank -- Speicherdurchsatz?

Beitrag von Socke »

marcov hat geschrieben:Hört sich mehr an als ein Programmierfehler. E.g. ein pro query alloziertes Object (object von SQLite, nicht Lazarus) das nicht richtig freigegeben wird. zb transaction context oder so.

Ich glaube einfach, dass die SQLite3.exe für Win32 nicht mit mehr als 2 GB RAM umgehen kann. Es werden nämlich maximal 3 Queries ausgeführt. Lazarus/Free Pascal habe ich in meinen Tests bisher noch gar nicht verwendet.

af0815 hat geschrieben:
Socke hat geschrieben:Für SQLite ist es ja kein Problem, mehrere Threads zu starten, die verschiedene Auswertungen durchführen.

Mehrere threads aus der Sicht der DB sind mehrer Verbindungen/Benutzer. Da würde ich vorsichtig sein. Das kann durch das locking von Sqllite nach hinten losgehen.


SQLite sperrt immer die gesamte Datenbank-Datei, wenn Daten geschrieben werden. Das ist bei mir aber eher ein geringes Problem, da die Sachlage wie folgt aussieht:
  • Es gibt eine Ausgangsdatenmenge; diese verändert sich nicht
  • Es gibt verschiedene SQL-Abfragen
  • Die SQL-Abfragen bauen teilweise aufeinander auf
    • Die Unterabfragen können in SQLite bequem als View bzw. als berechnete Tabelle erstellt werden
    • Tabelle oder View hängt von der Anzahl der darauf aufbauenden Abfragen ab
  • Es gibt also voneinander unabhängige Abhängigkeitsgraphen
Die Abhängigkeitsgraphen können dann in verschiedenen Threads ausgeführt werden; die Datenbanken werden zur Beschleunigung in den Arbeitsspeicher geladen. Verschiedene Auswertungspfade erhalten verschiedene Datenbank-Dateien zur Speicherung der (Zwischen-)Ergebnisse.

Die Dokumentation zum locking spricht immer von Datenbank-Dateien. Daher gehe ich davon aus, dass ich die Ausgangsdaten bzw. Zwischenergebnisse überall gleichzeitig einbinden kann, da diese nur gelesen werden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6208
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: In-Memory Datenbank -- Speicherdurchsatz?

Beitrag von af0815 »

Socke hat geschrieben:
marcov hat geschrieben:Hört sich mehr an als ein Programmierfehler. E.g. ein pro query alloziertes Object (object von SQLite, nicht Lazarus) das nicht richtig freigegeben wird. zb transaction context oder so.

Ich glaube einfach, dass die SQLite3.exe für Win32 nicht mit mehr als 2 GB RAM umgehen kann. Es werden nämlich maximal 3 Queries ausgeführt. Lazarus/Free Pascal habe ich in meinen Tests bisher noch gar nicht verwendet.

Hier Memory Limits for Windows Releases die Infos von MS zu den Speicherlimits.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: In-Memory Datenbank -- Speicherdurchsatz?

Beitrag von Socke »

af0815 hat geschrieben:Hier Memory Limits for Windows Releases die Infos von MS zu den Speicherlimits.

Dass Windows (hier: Windows 7, 64 bit) meine 8 GB RAM ansprechen kann und darf, weiß ich; Neben diesem Limit gibt es aber noch die Begrenzung durch 32-Bit-Programmdateien, die auch unter Windows-64-Bit maximal 4 GB Speicher verarbeiten können. Bei diesen muss aber noch ein Flag in der Programmdatei gesetzt sein, damit Windows diesen auch wirklich bis zu 4 GB RAM zuweist; ansonsten ist schon bei 2 GB Schluss (das kommt davon, wenn man Zeiger in vorzeichenbehafteten Typen speichert und das höchstwertige Bit nicht verwendet).

Daher habe ich mir gerade SQLite3 für Windows 64 Bit gebaut. Damit werde ich als nächstes testen, wie viel Arbeitsspeicher nach 31 Stunden belegt sind ;-)
Im Anhang findet ihr SQLite3 Version 3.7.10 für Windwox x64_86 (Win64). -- Für alle, die danach suchen. Lizenz lasse ich bei Public Domain; Gewährleistungen sind bis auf das absolute gesetzliche Minimum ausgeschlossen. Im Zweifelsfall bitte selber bauen.
Dateianhänge
sqlite3_3.7.10-x64_86.zip
SQLite3 für Windows 64 Bit (Bibliothek und Shell)
(330.22 KiB) 85-mal heruntergeladen
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: In-Memory Datenbank -- Speicherdurchsatz?

Beitrag von Socke »

Socke hat geschrieben:Daher habe ich mir gerade SQLite3 für Windows 64 Bit gebaut. Damit werde ich als nächstes testen, wie viel Arbeitsspeicher nach 31 Stunden belegt sind ;-)

Test abgeschlossen: bei 2 GB war wieder Schluss. Jetzt lasse ich das ganze mal mit einer Datei-Datenbank arbeiten.

[Edit]
Test Abgeschlossen. Die Berechnung war nach etwa 32 Stunden fertig -- also nicht wesentlich mehr als in-memory. Tatsächlich war es auch kein Problem, die fertige Datenbank wieder komplett in den Speicher zu laden.

Immerhin habe ich mit den Statistiken (Fullscan und Autoindex) ein Argument, warum die bisherige Datenbank technologische Schwächen hat.
[/Edit]

Ich habe da auch noch einen interessanten Link gefunden, wie sich SQLite bei großen Datenbankdateien verhält: http://stackoverflow.com/questions/7841 ... abase-file
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten