Diskussion zum Artikel "Wie man auf die MySQL-Datenbank von MQL5 (MQL4) aus zugreift" - Seite 12

 
Maxim Kuznetsov:

Es gibt eine Menge GUIs/IDEs von Drittanbietern dafür - und sqlite selbst ist nur eine reine Datenbank-Engine und eine API, um sie in Anwendungen einzubetten...

API ist wirklich für alles, einschließlich NET. Ich werde nach GUI suchen - es könnte Ihnen gefallen).
 
Yuriy Asaulenko:
API ist wirklich für alles, einschließlich NET. Ich werde nach GUI suchen - es könnte Ihnen gefallen).
https://www.mql5.com/de/articles/862
SQL и MQL5: Работаем с базой данных SQLite
SQL и MQL5: Работаем с базой данных SQLite
  • 2014.02.14
  • //www.mql5.com/ru/users/sergeev">
  • www.mql5.com
Данная статья рассчитана на программистов, проявившим интерес к использованию SQL в своих проектах. В статье читателям представляется функциональность SQLite, а также рассматриваются ее преимущества. Статья не требует знание функций SQLite, но минимальные знания SQL приветствуются.
 

Danke, habe es gelesen. Es gibt einen sehr guten Punkt, den der Autor des aktuellen Artikels, der hierher kam, ..... und alles verdorben hat).


Eugeniy Lugovoy | 14 Apr 2014 at 15:09 RU

Die Möglichkeit, es zu benutzen, ist da und das ist gut. Eine andere Sache ist, dass SQLite nicht für ernsthafte Projekte verwendet werden sollte. Ich würde es auf jeden Fall nicht empfehlen. Ich selbst bin mehr als einmal mit dem Problem von Kollisionen konfrontiert worden. Wenn zum Beispiel ein Handelsroboter an verschiedene Charts angehängt ist, aber dieselbe Basis verwendet, und die Adresse auf eine Allzwecktabelle (z. B. Registrierung/Änderung von Sitzungen, Konten) verweist, dann erhalten Sie auf jeden Fall eine Fehlermeldung wie "Tabelle gesperrt". Dabei spielt es keine Rolle, dass alle Transaktionen abgeschlossen sind, Cursor geschlossen sind und die Datenbank im gemeinsamen Modus geöffnet wurde. Dieses Problem ist auch den SQLite-Entwicklern bekannt.

Meiner Meinung nach ist MS Access die beste der Dateidatenbanken mit SQL-Unterstützung. Man kann noch so sehr auf die Small-Soft-Leute schimpfen, aber ich habe SQLite zugunsten von MS Access aufgegeben und bereue es nicht im Geringsten. Der OleDB-Treiber Jet 4.0 ist auch unter Win98 installiert, so dass die Projekte unter allen OC-Windows funktionieren.

Ich habe bereits früher geschrieben, dass Access wahrscheinlich wirklich das Beste ist, was ich verwende. Im Extremfall MS SQL Server, zumal es jetzt eine frei verfügbare Version gibt. Und MySQL ist zu sperrig, nur die Serververteilung ~450 MB

 
Yuriy Asaulenko:

Danke, ich habe es gelesen. Es gibt einen sehr guten Punkt, den der Autor des aktuellen Artikels anspricht (..... und alles ruiniert hat).


Eugeniy Lugovoy | 14 Apr 2014 at 15:09 RU

Die Möglichkeit, es zu benutzen, ist da und das ist gut. Eine andere Sache ist, dass SQLite nicht für ernsthafte Projekte verwendet werden sollte. Ich würde es auf jeden Fall nicht empfehlen. Ich selbst bin mehr als einmal mit dem Problem von Kollisionen konfrontiert worden. Wenn zum Beispiel ein Handelsroboter an verschiedene Charts angeschlossen ist, aber dieselbe Basis verwendet, und der Zugriff auf eine Allzwecktabelle erfolgt (z. B. Registrierung/Änderung von Sitzungen, Konten), dann erhalten Sie auf jeden Fall eine Fehlermeldung wie "Tabelle gesperrt". Dabei spielt es keine Rolle, dass alle Transaktionen abgeschlossen sind, Cursor geschlossen sind und die Datenbank im gemeinsamen Modus geöffnet wurde. Dieses Problem ist auch den SQLite-Entwicklern bekannt.

Meiner Meinung nach ist MS Access die beste der Dateidatenbanken mit SQL-Unterstützung. Man kann noch so sehr auf die Small-Soft-Leute schimpfen, aber ich habe SQLite zugunsten von MS Access aufgegeben und bereue es nicht im Geringsten. Der OleDB-Treiber Jet 4.0 ist sogar unter Win98 installiert, so dass die Projekte unter allen OC-Windows funktionieren.

Ich habe schon früher geschrieben, dass Access wahrscheinlich wirklich das Beste ist. Im Extremfall MS SQL Server, vor allem jetzt, wo es eine frei verfügbare Version gibt.

MS Access ist eine der schlechtesten Optionen. Auf VDS bewegt es sich kaum. Was kann nicht über die gleiche SQLite gesagt werden - es ist sehr schnell. Es gibt ein Problem (aber es ist das gleiche mit MySQL und im Allgemeinen mit jedem anderen) - jetzt ist das Modell "ein Expert Advisor = ein Handel und plus irgendwo gibt es Indikatoren, Chart und Terminal", aber es kann sich leicht ändern, plus alles in Code-Basis ist nicht für die konkurrierende Arbeit konzipiert, es impliziert Monopol Nutzung der Ressource, gibt es keine notwendige Blockierung, Synchronisation und so weiter. Übrigens gehört es zu den Perversionen, mehr als einen Expert Advisor (auch wenn es Instanzen desselben sind) auf einem realen Konto zu betreiben.

Und wenn Sie Zuverlässigkeit mit Plüsch wollen - setzen Sie Oracle (Sie werden überrascht sein, aber für die Bedürfnisse von Robotern ist es kostenlos) und APEX, schreiben Sie einen Konnektor zu ihm...Und eine weitere Option - um Daten durch Web-Request zu REST-Modell zu fahren.

PS/ warum argumentieren - bis MQ nicht einen verallgemeinerten Konnektor zu SQL ausrollt, sind alle Versuche, korrekt mit DBMS zu arbeiten, zum Scheitern verurteilt. Dies ist genau der Fall, wenn eine Komponente nicht durch die Kräfte der Gemeinschaft realisierbar ist.

 
Maxim Kuznetsov:

Und wenn Sie Zuverlässigkeit mit Pluspunkten wollen - setzen Sie Oracle (Sie werden überrascht sein, aber für die Bedürfnisse von Robotern ist es kostenlos) und APEX, schreiben Sie einen Konnektor zu ihm... Und eine weitere Option ist, Daten durch Web-Request zu REST-Modell zu fahren.

Ja, ich weiß über Oracle Bescheid. Ich habe sogar ein paar ihrer Zertifikate herumliegen. Leider sind sie nicht brauchbar.

Was Access betrifft, so ist es nicht so langsam. Ich habe es verwendet, um Angebote in TS zu übersetzen (Verbindung: Terminal - Basis - TS). Historie, aktuelle Kurse, Zustände, Protokolle, etc. in der Datenbank. Und das ist für Intrade. Es gab keine Beschwerden über die Geschwindigkeit der Datenbank.

Ich fürchte, dass SQLite nicht für ein ähnliches Problem Aussage, aus den Gründen, die von Eugeniy Lugovoy angegeben funktionieren wird .

 
Yuriy Asaulenko:

Ja, ich weiß über Oracle Bescheid. Ich habe sogar ein paar ihrer Zertifikate herumliegen. Leider haben sie sich nicht bewährt.

Was Access betrifft, so ist es nicht so langsam. Ich habe es benutzt, um Zitate in TS zu übersetzen (Verbindung: Terminal - Basis - TS). Historie, aktuelle Kurse, Zustände, Protokolle, etc. in der Datenbank. Und das ist für Intrade. Es gab keine Beschwerden über die Geschwindigkeit der Datenbank.

Ich fürchte, dass SQLite für eine ähnliche Problemstellung nicht funktionieren wird, aus den von Eugeniy Lugovoy genannten Gründen .

Wenn es kein Geheimnis ist, welcher Mechanismus wurde in TC für das Korrekturlesen von Daten aus Assets verwendet?
 
Maxim Kuznetsov:
Wenn es kein Geheimnis ist, welcher Mechanismus wurde in TC verwendet, um Daten aus Assets auszulesen?

TC - Standard C# ADO.NET. C-Puffer, deren Aktualisierungen und Schreiben in die Datenbank. Terminal schreibt Daten in die Datenbank über (kann mich nicht mehr erinnern) - entweder ODBC, aber eher über Jet. Ich schaue später nach, wenn Sie interessiert sind. Terminal hat einen eingebauten Export zur Datenbank (egal, ob der Treiber auf dem Computer ist).

PS Sieht aus wie OLEDB

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\moex\moex.accdb;Persist Security Info=False

.

 

Grüße an alle! Leute, ich habe hier schon lange nicht mehr reingeschaut. Es ist wirklich heiß hier auf Diskussionen :) Ich will mich mal erklären :)

Vor ein paar Jahren war ich an Projekten beteiligt, bei denen die Anforderungen ganz anders waren (zusätzliche Marktanalyse durch Software von Drittanbietern, Veröffentlichung im Web mit Erhaltung der Historie, Anwendung genetischer Algorithmen, Handelsemulation usw.), aber es war sinnvoll, die Daten in der Datenbank zu haben. Da die Anforderungen unterschiedlich waren, war die Wahl des DBMS entsprechend. Am Ende entschied ich mich, MT4 RDBMS-Treiber für jedes DBMS zu schreiben, um native Treiber zu verwenden, aber nicht ODBC/OLEDB. D.h. für mysql - libmysql, für oracle - OCI/Instant client, für SQLite - seine DLL mit api, aber für Microsoft Datenbanken (Access/MS SQL) gibt es nur OLEDB Option. All dies wurde geschrieben und existiert bis jetzt, hier habe ich nur den Artikel für MySQL-Basen gebildet, weil für den postsowjetischen Raum ist es noch näher in meiner subjektiven Meinung.

Generell habe ich mich lange und intensiv mit Datenbanken beschäftigt, und das Aufkommen, die Entwicklung und die Popularität von SQLite konnte mich nicht unberührt lassen :) Ich habe einen Rapper unter v3 geschrieben und in einem separaten Thread ist alles in Ordnung (z.B. wenn ein Chart den EA belastet), allerdings habe ich beim Testen auf mehreren Charts unerwartet ein Table Lock bekommen. Ich habe speziell Test-EAs geschrieben, um Daten (Zeilen) nur durch sein eigenes Symbol zu aktualisieren, d.h. die Tabelle ist die gleiche, aber die Zeilen sind unterschiedlich, um nicht zu verursachen loc. das Ergebnis - Tabelle loc. Und dies trotz der Tatsache, dass der Vrapper selbst Mutexe verwendet, um Operationen durchzuführen, dh bis eine Aktualisierung nicht abgeschlossen ist (+autocommit), wird die andere nicht starten. einfach gesagt - loc nirgendwo auftreten, außer innerhalb der SQLite selbst. Ich suchte die Foren und fand, dass es in der Tat ein solches Problem ist. Ich habe den Ripper unter OLEDB neu geschrieben (die Struktur aller Ripper ist fast identisch, bis auf die Befehle zum Aufrufen der API des gewünschten DBMS) und auf MS Access.... überprüft dieselben Skripte - keine Probleme. MS SQL - keine Probleme, PostgreSQL - keine Probleme, verbunden mit Oracle - auch alles ok.

Und obwohl es schon ziemlich lange her ist, aber das Gefühl von SQLite blieb ... Ich habe nicht mehr experimentiert. Die einzige ähnliche Datenbank (Datei und kompakt mit SQL), an die ich mich erinnere, war MSSQL Compact Edition, aber meine Hände haben die Implementierung in dieser Richtung nicht erreicht.

Letztendlich sind mir zwei Projekte geblieben - eines für MySQL (einschließlich MariaDB) und eines für OLEDB, was zwar die Möglichkeiten im Vergleich zu nativen Treibern (z.B. das gleiche DBMS Oracle) einschränkt, aber für die Umsetzung von Produktionsprojekten völlig ausreichend ist. In dieser Hinsicht lege ich Wert auf Stabilität und Leistung der Lösung und auf die Minimierung der Wartungskosten. Sollte es in Zukunft notwendig sein, auf ein anderes DBMS umzusteigen, werden die Kosten minimal sein - bei einer Vereinfachung müssen Sie nur die Abfragen unter Berücksichtigung der Syntax der neuen Unterdatenbank neu schreiben, und im Allgemeinen wird die Logik des Projekts nicht beeinträchtigt.

Ich danke Ihnen und wünsche Ihnen viel Erfolg!

 
Pavel Kolchin:

Ich habe mir die Mühe gemacht, "out of the box" zu prüfen - es funktioniert nicht.

Grüße Pavel,

Bitte geben Sie die folgenden Informationen über Ihre Umgebung an:

- Version und Bitrate des Betriebssystems

- Version, Build und Bitrate des Terminals

- MySQL-Version

Es ist ziemlich seltsam, dass der Kernel keine Funktion enthält, um einen Mutex zu erstellen, und libmysql keine Funktion enthält, um die Anzahl der von der Operation betroffenen Zeilen zu bestimmen...

Ich werde versuchen, eine ähnliche Umgebung zu erstellen und zu überprüfen.

 
Eugeniy Lugovoy:


win 7 x64 - mt5 x64 neueste Version (v5 b1455)

Ich kann nicht auf MySQL zugreifen, aber das ist nicht schade.

Server: Localhost über UNIX-Socket

Servertyp: Percona-Server

Server Version: 5.5.35-33.0-log - Percona Server (GPL), Release rel33.0, Revision 611

Protokoll Version: 10

Benutzer: ***

Server-Kodierung: UTF-8 Unicode (utf8)

in mql4 funktioniert