Diskussion zum Artikel "Wie man auf die MySQL-Datenbank von MQL5 (MQL4) aus zugreift" - Seite 29
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
Danke für die Aufklärung. Ich kann nicht alles wissen, deshalb frage ich ja.
Ich habe die Lösung für mich hier gefunden.
P.S: Überprüft für SELECT - es funktioniert
Nun, die Konvertierung von Abfrageergebnissen ist erlaubt, aber vergessen Sie nicht, dass Sie eine utf8mb4-Definition auf Tabellenebene haben, d.h. für alle Felder wird standardmäßig varchar verwendet, und wenn Sie eine Bedingung für ein Textfeld in Ihrer Abfrage haben, wird MySQL versuchen, es implizit zu konvertieren. Und wenn Sie berücksichtigen, dass Sie vielleicht einen Index auf einer Textspalte aufgebaut haben, dann kann es sein, dass der Optimierer ihn während einer solchen Konvertierung nicht erkennt ... daher Probleme mit der Abfrageleistung.
Es gibt ein Beschreibungsfeld. Etwas wie "Kommentare", das Feld ist nicht notwendig, nur eine Texterklärung. Es wird keinen Index geben.
MySQL utf8mb4 tut standardmäßig. Können Sie mir sagen, wie man in DDL das nächste Mal angeben? Was zu ändern und auf welche Kodierung
Jede Ideen?
Ich erhalte ständig diesen Fehler:
Konnten Sie dieses Problem jemals lösen, Boaz?
Gibt es eine Möglichkeit, die Anzahl der Felder zu kennen, die nach MySqlCursorFetchRow abgerufen werden können?
Vielleicht eine versteckte Funktion wie RowFieldsSize ...
Wie ich verstehe, wenn es kein Feld gibt, gibt MySqlGetFieldAsString leer zurück. Aber auch, wenn String Field speziell ein leeres Feld enthält, gibt es auch leer zurück. Das heißt, es ist nicht immer möglich, die Anzahl der Felder mit brachialer Gewalt zu ermitteln.
Als Krücke kann man zwar erst per SQL-Befehl herausfinden, dann aber wieder selektieren, aber das ist schon ein unnötiges Select.
Bitte entwickeln Sie die Bibliothek weiter, eine sehr nützliche Sache. Natürlich vor langer Zeit ein paar mysql zu bauen in mt
Abfrage einfügen und aktualisieren - nur 16 kb Abfragelimit ?
Wenn die Abfrage mehr als 16.000 Zeichen ist, stürzt metatrader ab (schließt). wenn weniger, ist es in Ordnung.
Ich füge ein Beispiel von UPDATE für 32.000 Zeichen bei.
Feld zum Aktualisieren in der Datenbank - LONGTEXT
Abfrage einfügen und aktualisieren - nur 16kb Abfragelimit ?
Wenn die Abfrage mehr als 16.000 Zeichen ist, stürzt metatrader ab (schließt). wenn weniger, ist es in Ordnung.
Ich füge ein Beispiel von UPDATE für 32.000 Zeichen bei.
Feld zum Aktualisieren in der Datenbank - LONGTEXT
Dies ist eher eine Zeilenbegrenzung in MQL :-(
und man kann kompakter schreiben:
REPLACE d1 ("t", "o", "h", "l", "c") VALUES (time1,open1,high1,low1,close1), (time2,open2,high2,low2,close2) ....
und/oder in zwei Abfragen aufgeteilt werden, indem sie in einer einzigen Transaktion kombiniert werden
Zum Beispiel habe ich Daten 50 000 Elemente und ich aktualisieren sie in der Tabelle alle 0,1 sec (Zahlen). Ist MT5 in der Lage, diese Daten aus MySQL zu übernehmen und sie alle 0,1 Sekunden zu aktualisieren? Gibt es irgendeine Einschränkung der in diesem Artikel beschriebenen Funktionalität in Bezug auf KB pro 1 Abfrage?
Hallo! Frage für Experten - wie viele Daten und wie oft kann ich von MySQL zu MT5 lesen?
Zum Beispiel habe ich Daten 50 000 Elemente und ich aktualisieren sie in der Tabelle alle 0,1 sec (Zahlen). Ist MT5 in der Lage, diese Daten aus MySQL zu übernehmen und sie alle 0,1 Sekunden zu aktualisieren? Gibt es irgendeine Einschränkung der Funktionalität in diesem Artikel auf KB für 1 Abfrage gegeben?
Nun, die Frage ist sicherlich interessant ...
Ich muss sagen, dass es keine Beschränkungen für die Anzahl der zurückgegebenen SELECT-Abfragezeilen gibt.
Die Größenbeschränkung für die Abfrage selbst liegt bei 64 Kb. Wenn Sie also versuchen, 50k Datenzeilen zu aktualisieren, ist es besser, sie in Stapel aufzuteilen, z.B. je 1000 Zeilen, und somit 50 Abfragen zu senden.
Was die Geschwindigkeit von 100 ms betrifft, so werden Sie, wenn Sie die Datenbank auf einem Server haben und Ihr Terminal, auf dem Sie MQL mit einer Verbindung zur Datenbank ausführen, etwas entfernt ist, höchstwahrscheinlich auf eine Netzwerklatenz in der Größe des ping.... stoßen.
Wenn Sie zum Beispiel einen Ping von 60 ms zwischen dem Datenbankserver und dem Terminal haben, wird die tatsächliche Antwort vom Server verzögert = 60 ms (Abfrage) + Abfrageverarbeitungszeit auf der Datenbankseite + 60 ms (Antwort).
Dieses Projekt ist nur ein einfacher Wrapper für den Zugriff auf die Funktionalität der dynamischen mysql-Bibliotheken.
Der Funktionsumfang ist auf die wichtigsten praktisch nützlichen Funktionen beschränkt, man kann es erweitern, hinzufügen, was man braucht, z.B. Unterstützung für asynchrone Abfragen hinzufügen, und dann kann man alle 50 Abfragen auf 1000 Zeilen senden, ohne auf die Ausführung jeder einzelnen zu warten.
P.S.: Auf Github können Sie die Quellen der Bibliothek und die voreingestellten Grenzen sehen(https://github.com/elugovoy/MQLMySQL-Project/tree/master/MQLMySQL).
P.P.S.: Sie können die Bibliothek auch herunterladen, nach eigenem Ermessen verändern, kompilieren und testen.
Gibt es eine Möglichkeit, die Anzahl der Felder zu kennen, die nach MySqlCursorFetchRow abgerufen werden können?
Vielleicht gibt es eine versteckte Funktion wie RowFieldsSize ...
Wie ich verstehe, wenn es kein Feld gibt, gibt MySqlGetFieldAsString leer zurück. Aber auch, wenn String Field speziell ein leeres Feld enthält, gibt es auch leer zurück. D.h. es ist nicht immer möglich, die Anzahl der Felder mit brachialer Gewalt zu ermitteln.
Als Krücke kann man zwar erst per sql-Befehl herausfinden, dann aber wieder selektieren, aber das ist schon ein unnötiges Select.
Bitte entwickeln Sie die Bibliothek, sehr nützliche Sache. Natürlich, ein paar mysql sollte in mt vor langer Zeit gebaut werden
Hm... und welche Art von Abfragen sind so knifflig bei Ihnen, dass es notwendig ist, die Anzahl der Felder, die von ihm zurückgegeben werden, zu bestimmen?
Normalerweise wird im SELECT-Befehl nur aufgeführt, was in einer bestimmten Situation benötigt wird. Verwenden Sie nicht SELECT *, sondern wählen Sie nur das aus, was Sie brauchen :) das ist normale Praxis.
Sie sollten keine Krücken machen, Sie können den Quellcode von Github nehmen und einen Wrapper für mysql_fetch_fields() MySQL API Funktion hinzufügen