Kann die .sqlite-Datei in die ME-Projektstruktur aufgenommen werden? für die spätere Verpackung in .ex5
Wenn ja, wie verhält sich das .ex5-Programm, wenn die . sqlite-Datei ver größert wird? in einem bereits kompilierten .ex5-Programm
Vielen Dank für die neue Funktionalität.
Ich halte die gute Hilfe zu den neuen Funktionen für den Schlüssel zum Erfolg bei der Beherrschung dieser Funktionen. Ich vermisse wirklich Beispiele für die Arbeit in der Hilfe selbst.
Bitte beachten Sie auch die folgenden Mängel, die festgestellt wurden:
1) Die Beschreibung der Funktion DatabaseExecute ist nicht wahr, sondern vonDatabasePrepare kopiert.
2) Unvollständige Beschreibung des ersten Parameters der FunktionDatabaseRead:intdatabase,// database handle obtained in DatabaseOpen;
DaDatabasePrepare vollständigere Informationen liefert:Erzeugt ein Abfrage-Handle, das dann mit DatabaseRead()ausgeführt werden kann.
3) ErzeugenDatabaseTransactionXXX-Funktionen wirklich die angegebenen GetLastError()-Fehlerlisten oder führen sie einen "Folgefehler eines früheren Fehlers" aus?
4) Für DatabaseTransactionXXX-Funktionen gibt es keine Informationen über die Behandlung verschachtelter Transaktionen.
5) Es gibt einen Druckfehler in der Beschreibung des Parameters der FunktionDatabaseColumnName(es muss heißen "to get the field name")
string&name// Verweis auf die Variable zur Ermittlung desTabellennamens
Tolle Neuigkeiten, Renat! Es hat sich eine Frage ergeben.
Kann eine .sqlite-Datei in die ME-Projektstruktur aufgenommen werden?
Wenn ja, wie wird sich das .ex5-Programm verhalten, wenn die .sqlite-Datei vergrößert wird? in einem bereits kompilierten .ex5-Programm
Höchstwahrscheinlich werden wir Ressourcen zulassen, und diese Dateien werden beim ersten Start des Programms automatisch auf die Festplatte extrahiert.
Das heißt, dass die Basis im Inneren von ex5 nicht anschwellen wird. Die Datei kann nur auf der Festplatte bearbeitet werden.
Die Basen können entweder auf der Festplatte oder nur im Speicher gehalten werden, indem das Flag DATABASE_OPEN_MEMORY verwendet wird.
Verstehe ich das richtig, dass dies ein offizieller Mechanismus für den Datenaustausch zwischen MT5-Terminals (anstelle des Tötens von SSD-Dateien) und zwischen Programmen innerhalb des Terminals (anstelle von Ressourcen) ist?
Vielen Dank für die neue Funktionalität.
Ich denke, eine gute Hilfe für die neue Funktionalität ist der Schlüssel zum Erfolg, um sie zu beherrschen. Ich vermisse wirklich die Beispiele für die Arbeit in der Hilfe selbst.
Bitte beachten Sie auch die folgenden Mängel, die ich festgestellt habe:
1) Die Beschreibung der Funktion DatabaseExecute ist nicht wahr, sondern von DatabasePrepare kopiert.
2) Unvollständige Beschreibung des ersten Parameters der FunktionDatabaseRead:intdatabase, // database handle obtained in DatabaseOpen;
Da DatabasePrepare vollständigere Informationen liefert: s erzeugt ein Abfrage-Handle, das dann mit DatabaseRead() ausgeführt werden kann.
3) Erzeugen dieDatabaseTransactionXXX-Funktionen wirklich die angegebenen Fehlerlisten GetLastError() oder führen sie "Folgefehler aus einem früheren Fehler" aus?
4) Für DatabaseTransactionXXX-Funktionen gibt es keine Informationen über die Behandlung verschachtelter Transaktionen.
5) Es gibt einen Druckfehler in der Beschreibung des Parameters der Funktion DatabaseColumnName (es muss heißen "to get the field name")
string&name// Verweis auf die Variable zur Ermittlung desTabellennamens
Die Hilfe ist bereits teilweise aktualisiert worden, schauen Sie noch einmal nach. Dies ist noch die erste Version der Hilfe und sie wird aktualisiert werden.
In SQLite gibt es keine verschachtelten Transaktionen, so dass es nicht nötig ist, diese zu versuchen.
Beispiele werden im Thema vorgestellt, es ist überhaupt nichts Kompliziertes dabei. Wir werden später einen Artikel und eine Wrapper-Klasse in der Standardbibliothek erstellen.
Verstehe ich das richtig, dass dies ein offizieller Mechanismus für den Datenaustausch zwischen MT5-Terminals (anstelle von SSD-Killing-Dateien) und zwischen Programmen innerhalb des Terminals (anstelle von Ressourcen) ist?
Hören Sie auf, unverhohlenen Unsinn über "tödliche SSDs" von inkompetenten Benutzern zu verbreiten.
Nein, es handelt sich um Dateibasen - sie können ausgetauscht werden, aber es ist riskant, von verschiedenen Sachverständigen gleichzeitig darauf zuzugreifen, da es bei gleichzeitig geöffneten Datenbanken zu einem Monopol kommen kann.
Geöffnete "In-Memory-only by DATABASE_OPEN_MEMORY flag"-Datenbanken sind nur für ein bestimmtes Programm verfügbar und werden nicht mit anderen geteilt.
Datenbankanwendungen:
- Speichern von Einstellungen und Zuständen von MQL5-Programmen
- Speicherung von Massendaten
- Verwendung von extern aufbereiteten Daten
. Zum Beispiel, exportierte Daten von Metatrader zu SQLite, in Python berechnet diese Daten mit gebrauchsfertigen mathematischen Paketen und legte das Ergebnis auch in SQlite-Format.
Der Datenbank-Editor in ME wird, nun ja, sehr praktisch sein, vielen Dank.
Nein, es handelt sich um Dateibasen - sie können ausgetauscht werden, aber es ist riskant, von verschiedenen EAs aus gleichzeitig auf sie zuzugreifen, da bei gleichzeitig geöffneten Basen möglicherweise ein Monopol besteht.
Python verfügt über eine Bibliothek namensSqlite3Worker für Thread-sichere E/A bei der Arbeit mit einer Datenbank über mehrere Threads.
Vielleicht ist es sinnvoll, über eine Portierung der Implementierung auf mql nachzudenken, um asynchrones Arbeiten mit der Datenbank mehrerer Expert Advisors zu ermöglichen.
Nun, oder Sie leihen sich die Idee und implementieren Ihre eigene asynchrone E/A.
Python verfügt über die BibliothekSqlite3Worker für eine thread-sichere Ein- und Ausgabe, wenn mit der Datenbank in mehreren Threads gearbeitet wird.
Vielleicht sollte man eine Portierung der Implementierung auf mql in Betracht ziehen, um asynchrones Arbeiten mit der Datenbank mehrerer Expert Advisors zu ermöglichen.
Nun, oder Sie leihen sich die Idee und implementieren Ihre eigene asynchrone E/A.
Haben Sie die obige Leistungstabelle gesehen? In MQL5 ist es oft schneller als in C++.
Wir haben natürlich Multithreading, und alles ist korrekt.
Die Frage bezieht sich auf etwas anderes - was passiert, wenn verschiedene Programme/Prozesse unabhängig voneinander auf dieselbe Datenbankdatei zugreifen. Es handelt sich nicht um ein einziges Programm (MQL5), sondern um mehrere unabhängige Programme, die nichts voneinander wissen und nicht dasselbe Datenbank-Handle verwenden.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Im Build 2265 haben wir die regulären Datenbankfunktionen auf Basis von SQLite 3.30.1 implementiert:
Da wir uns maximal auf die Leistung konzentrieren, sind hier die Ergebnisse der LLVM 9.0.0 vs MQL5 Tests. Zeit in Millisekunden, je weniger, desto besser:Datenbanken können entweder auf der Festplatte oder nur mit dem Flag DATABASE_OPEN_MEMORY im Speicher gehalten werden. Die Einbindung umfangreicher Einfügungen/Änderungen in DatabaseTransactionBegin/Commit/Rollback-Transaktionen beschleunigt die Vorgänge um das Hundertfache.
Die Geschwindigkeit in MQL5 ist absolut die gleiche wie in nativem C++ mit einem der besten Compiler. Eine Reihe von Benchmarks zum Nachspielen ist beigefügt.
Wir haben auch eine einzigartige DatabaseReadBind-Funktion implementiert, mit der Sie Datensätze direkt in die Struktur einlesen können, was Massenoperationen vereinfacht und beschleunigt.
Hier ist ein einfaches Beispiel: