Diskussion zum Artikel "SQLite: Natives Arbeiten mit SQL-Datenbanken in MQL5" - Seite 9
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
Maxim Kuznetsov #:
SQLite ist für einen Thread oder einen Schreiber und viele Leser konzipiert. Vielen Schreibern geht es nicht darum, es geht um andere Grundlagen, die nicht "leicht" sind.
Es geht nicht um MQL - es ist einfach so, wie es wirklich und überall ist.
Und das ist ein weiterer Grund, warum ich gerne sehen würde, dass PostgreSQL funktioniert.
Und das ist ein weiterer Grund, warum ich PostgreSQL gerne arbeiten sehen würde.
Also tun Sie es, wo ist das Problem? Erlauben Sie die DLL und benutzen Sie sie.
Ich bin kein PostgreSQL-Benutzer, aber ich habe MySQL, MonetDB, SQL Relay und ODBC von mt5 verwendet.
Wenn es nötig ist, ist es einfacher und schneller, es selbst zu tun, als auf die Gunst der Natur zu warten.
die Abfragegeschwindigkeit sinkt und der Speicherbedarf steigt....
aber alles ist in Ordnung :-)
SQLite ist für einen Thread oder einen Writer und viele Reader ausgelegt. Viele Schreiber sind nicht darüber, darüber andere Grundlagen, die nicht "leicht" sind.
Es geht nicht um MQL - es ist einfach so, wie es wirklich und überall ist.Vielleicht wissen Sie nicht, wie man SQLite vorbereiten, es gibt keine Engpässe in ihm, nämlich wie ein einziger TCP-Server, der alle eingehenden Ströme zerstört, ist dieser Server in allen anderen Datenbanken ...
SQLite ist ein Geschenk, wenn es richtig vorbereitet ist, wird die Geschwindigkeit der Schreibanfragen höher sein als Redis, und über das Lesen selbst, während, wenn Sie von der Basis Threads lesen nicht gegenseitig blockieren und alles geschieht so schnell wie möglich ruht in Ihrem System-Ressourcen, sind Sie auch die Möglichkeit, die Datenbank im RAM bereitstellen gegeben, es spielt keine Rolle, wie, bei der Erstellung, und Sie können durch spezielle Software, um eine Scheibe im RAM zu erstellen und auf sie, um die Datenbank zu platzieren und erstellen Sie einen symbolischen Link, wenn Sie zum Beispiel für Berater, die die höchstmögliche Leistung bieten wird.
Und vielleicht verstehen Sie nicht, warum Cache-Sharing in SQLite notwendig ist..., ist es notwendig, um Speicherressourcen für die Eingabe-Ausgabe zu speichern, so dass Expert Advisors und Skripte weniger Speicher am Ende verbraucht, und nur, weil ein separater Thread für ihre Arbeit zugeordnet ist, ist ein separater Thread nicht für Indikatoren zugeordnet.
Wenn der gemeinsame Cache-Modus verwendet wird, wird die Verbindung mit der Basis für den gesamten Prozess geöffnet, nicht für einzelne Threads, was zwar Ressourcen spart, aber in der Folge zu ähnlichen Fehlern führt, die ich oben beschrieben habe, und der gemeinsame Cache verlangsamt die Arbeit der Basis.
Die Entscheidung der MQL-Entwickler auf der einen Seite ist für mich verständlich, aber auf der anderen Seite nicht sehr viel, da ich eine Menge Erfahrung mit der Plattform und haben nicht erfüllt Fälle, dass jemand lief mehr als 200 Threads gleichzeitig, in 1 in der Terminal-Grenze von 100 Charts, so dass Sie 1 Expert Advisor und 1 Skript zu jedem anhängen können, aber Sie können auch Dienste auf die Anzahl der Dienste laufen Ich denke, es gibt keine Begrenzung, aber es ist zumindest nicht bequem und ressourcenintensiv in jedem Fall, und wenn diese Threads öffneten ihre eigenen Verbindungen zur Datenbank ist ein Tropfen in den Ozean von Speicher relativ dann.
Eine solche Nutzung des Terminals ist zumindest unbequem und macht höchstens keinen Sinn, denn ein kompetenter Entwickler wird einen Multicurrency Expert Advisor als einen einzigen Thread erstellen und sich nicht mit solchem Unsinn beschäftigen.
Liebe Entwickler, bitte entfernen Sie den gemeinsamen Cache oder weisen Sie mich auf etwas hin, das ich übersehen habe.
Ich habe das Wesentliche über"SQLite Shared-Cache" aus der offiziellen Dokumentation entnommen:
"Dies kann die vom System benötigte Menge an Speicher und IO erheblich reduzieren."
Hier ist der Link, lesen Sie ihn.
In MetaEditor funktionieren diese Schaltflächen (außer Ausführen) für die Arbeit mit der Datenbank noch nicht?
Sie sind immer gesperrt.
Diese Abfrage gibt nichts zurück:
Der Versuch, einen FOREIGN KEY einzuschließen, schlägt fehl:
Die Dokumentation enthält diese Information: https: //www.sqlite.org/foreignkeys.html#fk_enable
Tip: If the command "PRAGMA foreign_keys" returns no data instead of a single row containing "0" or "1", then the version of SQLite you are using does not support foreign keys (either because it is older than 3.6.19 or
weil sie mit SQLITE_OMIT_FOREIGN_KEY oder SQLITE_OMIT_TRIGGER definiert kompiliert wurde ).
SQLITE_OMIT_TRIGGER
SQLITE_OMIT_FOREIGN_KEY
Mit der Version ist alles in Ordnung:
//---
Wie kann man FOREIGN KEY aktivieren?
Diese Abfrage liefert keine Ergebnisse:
Der Versuch, einen FOREIGN KEY einzuschließen, schlägt fehl:
Die Dokumentation enthält diese Informationen: https: //www.sqlite.org/foreignkeys.html#fk_enable
Mit der Version ist alles in Ordnung:
//---
Wie kann man FOREIGN KEY aktivieren?
FOREIGN KEY ist standardmäßig aktiviert, wir verwenden weder SQLITE_OMIT_FOREIGN_KEY noch SQLITE_OMIT_TRIGGER.
PRAGMA foreign_keys=ON; sollte nicht verwendet werden..
Um die Leistung zu überprüfen, können Sie das Beispiel https://www.sqlite.org/foreignkeys.html verwenden .
CREATE TABLE artist( artistid INTEGER PRIMARY KEY, artistname TEXT ); CREATE TABLE track( trackid INTEGER, trackname TEXT, trackartist INTEGER, FOREIGN KEY(trackartist) REFERENCES artist(artistid) );Bei der Arbeit im Editor funktioniert alles korrekt und ohne Fehler.
FOREIGN KEY ist standardmäßig aktiviert, wir verwenden weder SQLITE_OMIT_FOREIGN_KEY noch SQLITE_OMIT_TRIGGER.
PRAGMA foreign_keys=ON; sollte nicht verwendet werden.Um die Leistung zu überprüfen, können Sie das Beispiel https://www.sqlite.org/foreignkeys.html verwenden .
Bei der Arbeit im Editor funktioniert alles korrekt und ohne Fehler.
Vielen Dank für die Antwort!
Aus irgendeinem Grund erhalte ich nicht das Ergebnis, das ich erwarte:
//---
Wo liegt der Fehler?
Und das ist es, womit ich auch zu tun haben möchte:
Forum zum Thema Trading, automatisierte Handelssysteme und Testen von Handelsstrategien
Diskussion über den Artikel "SQLite: Native Arbeit mit SQL-Datenbanken in MQL5".
Anatoli Kazharski, 2022.10.05 01:54 AM
In MetaEditor funktionieren diese Schaltflächen (außer Execute) für die Arbeit mit der Datenbank noch nicht?
Sie sind immer blockiert.
Bitten Sie jemanden, das obige Beispiel zu reproduzieren.
Die letzte Zeile in der Spurentabelle (hervorgehoben) sollte nicht hinzugefügt werden.
Ich habe dasselbe Schema in SQLiteStudio getestet und alles funktioniert korrekt.
So sollte die Warnung aussehen, wenn versucht wird, eine Zeile mit einer ID hinzuzufügen, die in der übergeordneten Tabelle nicht vorhanden ist: