Discussion de l'article "SQLite Gestion native des bases de données SQL dans MQL5" - page 9

Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Maxim Kuznetsov #:
SQLite est conçu pour un fil de discussion ou un auteur et de nombreux lecteurs. De nombreux auteurs ne s'intéressent pas à SQLite, mais plutôt à d'autres bases qui ne sont pas "légères".
Ce n'est pas à propos de MQL - c'est juste la façon dont c'est vraiment et partout.
Et c'est une autre raison pour laquelle j'aimerais voir PostgreSQL fonctionner.
C'est une autre raison pour laquelle j'aimerais que PostgreSQL fonctionne.
Alors faites-le, quel est le problème ? Autorisez la DLL et utilisez-la.
Je ne suis pas un utilisateur de PostgreSQL, mais j'ai utilisé MySQL, MonetDB, SQL Relay et ODBC depuis mt5.
Quand il y a un besoin, il est plus facile et plus rapide de le faire soi-même que d'attendre les faveurs de la nature.
la vitesse d'interrogation diminuera et les besoins en mémoire augmenteront....
mais tout va bien :-)
SQLite est conçu pour un thread ou un auteur et de nombreux lecteurs. Beaucoup de rédacteurs ne sont pas sur ce sujet, sur ce sujet d'autres bases qui ne sont pas "légères".
Il ne s'agit pas de MQL - c'est juste la façon dont c'est vraiment et partout.Peut-être ne savez-vous pas comment préparer SQLite, il n'y a pas de goulots d'étranglement en lui, notamment comme un seul serveur TCP, qui détruit tous les flux entrants, ce serveur est dans toutes les autres bases de données ...
SQLite est un cadeau, s'il est correctement préparé, la vitesse des requêtes d'écriture sera supérieure à Redis, et à propos de la lecture elle-même, alors que lorsque vous lisez à partir de la base les threads ne se bloquent pas les uns les autres et tout se passe aussi vite que possible en se reposant sur les ressources de votre système, vous avez également la possibilité de déployer la base de données en RAM, peu importe comment, lors de la création, et vous pouvez grâce à un logiciel spécial créer un disque en RAM et sur celui-ci placer la base de données et créer un lien symbolique, si vous utilisez par exemple pour les conseillers, ce qui fournira la performance la plus élevée possible.
Et peut-être ne comprenez-vous pas pourquoi le partage du cache est nécessaire dans SQLite..., il est nécessaire d'économiser les ressources mémoire pour les entrées-sorties, de sorte que les Expert Advisors et les scripts consomment moins de mémoire au final, et ce uniquement parce qu'un thread séparé est alloué pour leur travail, un thread séparé n'est pas alloué pour les indicateurs.
Lorsque le mode de cache partagé est utilisé, la connexion avec la base est ouverte pour l'ensemble du processus, et non pour des threads distincts, ce qui permet d'économiser des ressources, mais entraîne des erreurs similaires à celles que j'ai décrites ci-dessus et le cache partagé ralentit le travail de la base.
La décision des développeurs de MQL d'une part est compréhensible pour moi, mais d'autre part pas beaucoup, car j'ai beaucoup d'expérience avec la plate-forme et je n'ai pas rencontré de cas où quelqu'un a exécuté plus de 200 threads simultanément, dans 1 dans le terminal limite de 100 graphiques, de sorte que vous pouvez attacher 1 Expert Advisor et 1 script à chacun, mais vous pouvez également exécuter des services sur le nombre de services je pense qu'il n'y a pas de limite, mais ce n'est au moins pas pratique et intensif en ressources dans tous les cas, et si ces threads ont ouvert leurs propres connexions à la base de données est une goutte d'eau dans l'océan de la mémoire relativement alors.
Une telle utilisation du terminal est au moins peu pratique, et au plus insensée, car un développeur compétent créera un Expert Advisor multi-devises en tant que thread unique, et ne s'engagera pas dans de telles absurdités.
Chers développeurs, veuillez supprimer le cache commun ou m'indiquer ce que j'ai manqué.
J'ai tiré l'essentiel de la documentation officielle sur le"SQLite Shared-Cache" :
"Cela peut réduire de manière significative la quantité de mémoire et d'entrées-sorties requise par le système."
Voici le lien, lisez-le.
Dans MetaEditor, ces boutons (sauf Run) pour travailler avec la base de données ne fonctionnent pas encore ?
Ils sont toujours bloqués.
Cette requête ne renvoie rien :
La tentative d'inclure une clé étrangère (FOREIGN KEY ) échoue :
La documentation contient cette 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
parce qu'elle a été compilée avec SQLITE_OMIT_FOREIGN_KEY ou SQLITE_OMIT_TRIGGER défini).
SQLITE_OMIT_TRIGGER
SQLITE_OMIT_FOREIGN_KEY
Il n'y a pas de problème avec la version :
//---
Comment activer l'option FOREIGN KEY?
Cette requête ne renvoie rien :
La tentative d'inclure une clé étrangère (FOREIGN KEY ) échoue :
La documentation contient les informations suivantes : https://www.sqlite.org/foreignkeys.html#fk_enable
Il n'y a pas de problème avec la version :
//---
Comment activer les FOREIGN KEY?
FOREIGN KEY est activé par défaut, nous n'utilisons pas SQLITE_OMIT_FOREIGN_KEY ou SQLITE_OMIT_TRIGGER.
PRAGMA foreign_keys=ON ; ne doit pas être utilisé..
Pour vérifier les performances, vous pouvez prendre l'exemple https://www.sqlite.org/foreignkeys.html.
CREATE TABLE artist( artistid INTEGER PRIMARY KEY, artistname TEXT ); CREATE TABLE track( trackid INTEGER, trackname TEXT, trackartist INTEGER, FOREIGN KEY(trackartist) REFERENCES artist(artistid) );
Lorsque vous travaillez dans l'éditeur, tout fonctionne correctement, sans erreur.
FOREIGN KEY est activé par défaut, nous n'utilisons pas SQLITE_OMIT_FOREIGN_KEY ou SQLITE_OMIT_TRIGGER.
PRAGMA foreign_keys=ON ; ne doit pas être utilisé.Pour vérifier les performances, vous pouvez prendre l'exemple https://www.sqlite.org/foreignkeys.html.
Lorsque vous travaillez dans l'éditeur, tout fonctionne correctement, sans erreur.
Merci pour votre réponse !
Pour une raison ou une autre, je n'obtiens pas le résultat escompté :
//---
Où se trouve l'erreur ?
Et c'est ce que je voudrais faire aussi :
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading
Discussion autour de l'article "SQLite : travail natif avec les bases de données SQL dans MQL5".
Anatoli Kazharski, 2022.10.05 01:54 AM
Dans MetaEditor, ces boutons (sauf Exécuter) pour travailler avec la base de données ne fonctionnent pas encore ?
Ils sont toujours bloqués.
Demandez à quelqu'un de reproduire l'exemple ci-dessus.
La dernière ligne du tableau des pistes (surlignée) ne doit pas être ajoutée.
J'ai testé le même schéma dans SQLiteStudio et tout fonctionne correctement.
Voici à quoi devrait ressembler l'avertissement lorsque l'on essaie d'ajouter une ligne avec un ID qui n'existe pas dans la table parent :