Diskussion zum Artikel "SQLite: Natives Arbeiten mit SQL-Datenbanken in MQL5" - Seite 7
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Morgen werden es 2840 in der Beta sein:
Sehr zufrieden, danke
Beta 2840 ist verfügbar, bitte testen Sie sie.
Morgen werden es 2840 in der Beta sein:
Beispiel:
Wir werden später den neuen json-Typ in den Datenbankerstellungsassistenten aufnehmen.
Wer es herausgefunden hat, zeige bitte die Umsetzung einer solchen Aufgabe.
Verstehe ich das richtig, dass im Rahmen dieser Aufgabe in beiden Fällen (beim Lesen der Basis auf Terminal2 und beim Schreiben auf die Basis in Terminal1) eine Blockierung durch den Transaktionsmechanismus erfolgen soll?
Wie kann man am einfachsten feststellen, dass die Datenbank aktualisiert wurde?
Grundlegend falsch. Sie beschreiben eine verteilte Client-Server-Anwendung mit einem Schema von 1 Schreiber, n Leser. Bei der Entwicklung solcher Systeme (und generell bei allen verteilten Systemen) sollten Sie versuchen, Sperren zu vermeiden, indem Sie sperrenfreie Methoden für die Datenorganisation und den Zugriff auf die Daten verwenden. Wenn die verwendete Technologie es nicht erlaubt, auf Sperren zu verzichten, dann ist sie vielleicht nicht die beste Lösung für Ihre Aufgabe. Für andere Aufgaben kann die Technologie jedoch großartig sein.
In Ihrem Fall ist es besser, einen vollwertigen Server einzusetzen (Sie können dies auf demselben Rechner wie der Client tun) und Angebote in die Nachrichtenwarteschlange zu schreiben, z. B. in Kafka. Der Client liest diese Zitate aus dem gewünschten Index. Dies ist ein sperrfreies Datenzugriffsschema.
Es stellt sich also heraus, dass der Datenaustausch weniger Möglichkeiten hat als über Dateien?
Kategorisch nein. Die gemeinsame Nutzung von Dateien ist überhaupt nicht atomar, so dass Sperren sowohl auf der Leser- als auch auf der Schreiberseite erforderlich sind. Dies ist der sicherste Weg, um in eine Sackgasse zu geraten und sich in schwer zu findenden und unverständlichen Fehlern zu verlieren.
Grundlegend falsch. Sie beschreiben eine verteilte Client-Server-Anwendung mit einem Schema von 1 Schreiber, n Leser. Bei der Entwicklung solcher Systeme (und generell bei allen verteilten Systemen) sollten Sie versuchen, Sperren zu vermeiden und sperrenfreie Verfahren für die Datenorganisation und den Zugriff auf die Daten zu verwenden. Wenn die verwendete Technologie es nicht erlaubt, auf Sperren zu verzichten, dann ist sie vielleicht nicht die beste Lösung für Ihre Aufgabe. Für andere Aufgaben kann die Technologie jedoch großartig sein.
In Ihrem Fall ist es besser, einen vollwertigen Server einzusetzen (Sie können dies auf demselben Rechner wie der Client tun) und Angebote in die Nachrichtenwarteschlange zu schreiben, z. B. in Kafka. Der Client liest diese Zitate aus dem gewünschten Index. Dies ist ein sperrfreies Datenzugriffsschema.
Kategorisch nein. Die gemeinsame Nutzung von Dateien ist in keiner Weise atomar, so dass Sperren sowohl auf der Leser- als auch auf der Schreiberseite erforderlich sind. Dies ist der sicherste Weg, um in eine Sackgasse zu geraten und sich in schwer zu erkennenden und unverständlichen Fehlern zu verlieren.
Vielen Dank für diese ausführliche Antwort! Leider habe ich völlig vergessen, welches Problem ich zu diesem Zeitpunkt gelöst habe. Deshalb kann ich meine Gedanken zu diesem Thema nicht teilen.
Beta 2840 ist verfügbar, bitte testen Sie sie.
Fragen zu dieser Lösung
- Gibt es Probleme, wenn mehrere EAs gleichzeitig dieselbe Sqlite-Datenbank verwenden?
- Können bei einem Absturz des MT5 einige Daten verloren gehen? Wie oft werden Daten auf die Festplatte geschrieben?
Guten Tag, liebe Entwickler!
Die Funktion "DatabaseExport" will in keiner Weise funktionieren...sie gibt den Fehler 5601 (Abfrageausführungsfehler, aber ich führe die Abfrage nicht aus), wenn ich den Tabellennamen in den Parametern angebe,
und wenn ich die SQL-Abfrage angebe, gibt sie den Fehler 4022 (Abbruch der Programmausführung), wahrscheinlich ein Fehler innerhalb der MQL-Funktion, ein Teil des Codes aus meiner Bibliothek: