Startseite › Foren › Deutsches LiveCode-Forum › Datenbank-Abfrage
- Dieses Thema hat 5 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 3 Jahren, 7 Monaten von
RetepM.
-
AutorBeiträge
-
-
August 12, 2021 um 12:05 Uhr #33239
Hallo Forum,
Entschuldigung für die längere Einleitung:
Ich benutze seit einigen Jahren livecode (aktuell die Version 5.5.5) und erstelle damit eine Oberfläche für einen Datenbank-Client. Der Stack läuft auch unter v 9.6.2.Die DB (SQLite oder MySQL) enthält z.Z. in 3 Tabellen ca. 11, 6 und 4 Mio Datensätze. Bei den Daten geht es um Wörter, die ich aus dem Internet auslesen, dann mit den Tabellen abgleiche und den Werten Worteigenschaften zuteile. Worteigenschaften wären Haus n4, Hause n4d, Hauses n4ge, Häusern 4p, Häusern n4pa.
Wenn ich also in meiner Internet-Liste das Wort Häusern habe, schreibt der Client in das DataGrid eines Substacks:
Häusern → n4pa →NN→Haus.Hätte ich in der Internet-Liste das Wort Lasterhaus, wird das nicht gefunden, der Client entfernt dann in einer Schleife das jeweils erste Zeichen und würde in diesem Fall in das DataGrid schreiben:
Lasterhaus → n4 →NN→Haus->CheckNun mein Problem:
In der Regel enthalten die Listen aus dem Internet über 100.000 Zeilen (Wörter). Diese werden in das DataGrid geladen und in einer Schleife abgearbeitet. Leider steigt livecode mit einer Zu-Wenig-Speicher-Meldung nach ca. 40.000 Durchgängen (das können schon mal über 300.000 DB-Abfragen sein) aus.
Ich habe schon versucht, die Ergebnisse nicht in das DataGrid sondern gleich in eine externe Datei zu schreiben, auch das verhindert leider die Zu-Wenig-Speicher-Meldung nicht. Ebenso wenn ich die Liste mit den 100.000 Zeilen nicht vollständig, sondern in Abständen von ca. 1.000 Zeilen lade und abarbeite.Hat Jmd. Eine Idee, wie man das Speicherproblem lösen kann? Ich selbst bin ratlos!
Grüße -
August 12, 2021 um 14:03 Uhr #33247
Hi,
folgende Fragen:
* Hat das schon mal alles geklappt und das Speicherproblem tritt erst seit kurzem auf?
* Hast Du den konkreten Text der Fehlermeldung?
* Kann es sein, dass es irgendwann in einer Endlosschleife gerät?LG
Torsten -
August 12, 2021 um 16:04 Uhr #33269
Ich vergaß: OS für Textdaten-Verarbeitung ist Windows 10!
———————————————-
* Hat das schon mal alles geklappt und das Speicherproblem tritt erst seit kurzem auf?
———————————————-
Leider, nein!
———————————————-
* Hast Du den konkreten Text der Fehlermeldung?
———————————————-
Dafür lasse ich das Teil heute Abend laufen…
———————————————-
* Kann es sein, dass es irgendwann in einer Endlosschleife gerät?
———————————————-
Der Teufel ist ein Eichhörnchen:-) Aber… Nein, denn es hängt auch von der Höhe der CPU-Last und dem Arbeitsspeicher im Windows Task-Manager ab. Beide müssten in den Varianten
1.) Daten in externe Files oder
2.) Ausgangsdaten partiell laden
sich immer wieder erniedrigen. Im Prinzip ist jedoch immer genug vorhanden.Gruß
Peter -
August 13, 2021 um 10:49 Uhr #33333
Fehlermeldung, die typische von MS Visual C++, tausendmal gesehen…, aber ich wollte es mir trotzdem noch einmal genau anschauen, deshalb erst jetzt 🙂
————————-
RunTime Error!Program: Pfad
Blah, blah blah
————————-
Worauf ich jetzt gekommen bin, vielleicht macht es Sinn, das komplette Programm nach ca. 20.000 Abfragen zu unterbrechen und den Ablauf, dann an dieser Stelle wieder neu zu starten. Dann müssten CPU-Last und Arbeitsspeicher wieder normalisiert sein. Schaun wir mal…
Gruß
Peter -
August 13, 2021 um 16:00 Uhr #33352
Hi Peter,
Speichermangel bedeutet ja, dass irgendwo ein Wert/Variable zu groß wird.
Ich hatte auch schon mal solche Phänomene und in einem Fall lag es daran, dass an einer Strelle statt eines „put into“ ein „put after“ vorhandemn war, so dass sich die Variable immer mehr aufblähte. Beim Testen mit wenigen Daten fiel das nicht auf, aber dann….Happy Coding
Torsten -
August 14, 2021 um 10:57 Uhr #33392
Hi,
ich benutze „after“ ziemlich oft, weil das Programm verschiedene Konditionen bzw. Inhalte merken/schreiben muss. Nach Ablauf ist ein „empty“ aber immer Pflicht.Das livecode Datagrid ist ein Riesenteil. Normalerweise passen von der oben beschriebenen Form mindestens 100.000 Zeilen rein und man kann dann immer noch gut damit arbeiten… Nur beim Eintrag von DB-Abfragen gibt es Schwierigkeiten, aber wahrscheinlich nicht durch DataGrid selbst 🙂
Wenn ich mir diese Diskussion durch den Kopf gehen lasse, komme ich zu dem Schluss, das Problem liegt vermutlich an der Anzahl der DB-Abfragen. Erkenntnis: Unterbreche ich nur die (Haupt-)Schleife manuell, stabilisieren sich CPU- und Arbeitsspeichelast. Ich werde das jetzt durch ein Script zur Kontrolle abarbeiten lassen. Vielleicht muss man Zwischendurch auch mal die DB-Connection neu aufsetzen.
Gruß
Peter
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.