Discusión sobre el artículo "SQLite: trabajo nativo con bases de datos en SQL en MQL5" - página 9

 

Maxim Kuznetsov #:

SQLite está diseñado para un hilo o un escritor y muchos lectores. Muchos escritores no se trata de eso, se trata de otras bases que no son "ligeras".

No se trata de MQL - es sólo la forma en que es realmente y en todas partes.

Y esa es otra razón por la que me gustaría ver PostgreSQL trabajo.

 
JRandomTrader #:

Y esa es otra razón por la que me gustaría que PostgreSQL funcionara.

Así que hazlo, ¿cuál es el problema? Permita la DLL y utilícela.

No soy usuario de PostgreSQL, pero he usado MySQL,MonetDB, SQL Relay y ODBC de mt5.

Cuando hay una necesidad, es más fácil y rápido hacerlo uno mismo que esperar favores de la naturaleza

 
Maxim Kuznetsov #:

la velocidad de consulta disminuirá y los requisitos de memoria aumentarán....

pero no pasa nada :-)

SQLite está diseñado para un hilo o un escritor y muchos lectores. Muchos escritores no son sobre eso, sobre eso otras bases que no son "ligeras".

No se trata de MQL - es sólo la forma en que es realmente y en todas partes.

Tal vez usted no sabe cómo preparar SQLite, no hay cuellos de botella en ella, a saber, como un único servidor TCP, que destruye todos los flujos entrantes, este servidor está en todas las otras bases de datos ...

SQLite es un regalo, si se prepara adecuadamente, la velocidad de las solicitudes de escritura será mayor que Redis, y sobre la lectura en sí, mientras que cuando se lee de los hilos de base no se bloquean entre sí y todo sucede lo más rápido posible descansando en sus recursos del sistema, también se le da la oportunidad de implementar la base de datos en la memoria RAM, no importa cómo, al crear, y se puede a través de un software especial para crear un disco en la memoria RAM y en él para colocar la base de datos y crear un enlace simbólico, si se utiliza, por ejemplo, para los asesores, que proporcionará el mayor rendimiento posible.

Y tal vez usted no entiende por qué es necesario compartir la caché en SQLite ..., es necesario ahorrar recursos de memoria para la salida de entrada, de modo que los asesores expertos y secuencias de comandos consumen menos memoria en el final, y sólo porque un hilo separado se asigna para su trabajo, un hilo separado no se asigna para los indicadores.

Cuando se utiliza el modo de caché compartida, la conexión con la base se abre para todo el proceso, no para hilos separados, lo que ahorra recursos, pero como consecuencia conduce a errores similares que he descrito anteriormente y la caché compartida ralentiza el trabajo de la base.

La decisión de los desarrolladores de MQL, por un lado es comprensible para mí, pero por otro lado no mucho, ya que tengo mucha experiencia con la plataforma y no he conocido casos de que alguien corrió más de 200 hilos simultáneamente, en 1 en el terminal límite de 100 gráficos, por lo que puede adjuntar 1 Asesor Experto y 1 script a cada uno, pero también se puede ejecutar servicios en el número de servicios que creo que no hay límite, pero al menos no es conveniente y de uso intensivo de recursos en cualquier caso, y si estos hilos abrieron sus propias conexiones a la base de datos es una gota en el océano de la memoria relativamente entonces.

Tal uso de la terminal es al menos inconveniente, y como mucho no tiene sentido, porque un desarrollador competente hará un Asesor Experto multidivisa como un solo hilo, y no se dedica a tal absurdo.

Estimados desarrolladores, por favor, elimine la memoria caché común o empujarme en lo que me perdí.

Saqué lo esencial sobre"SQLite Shared-Cache" de la documentación oficial:

"Esto puede reducir significativamente la cantidad de memoria e IO requerida por el sistema".

Aquí está el enlace, léelo.

 

En el MetaEditor, ¿estos botones (excepto Ejecutar) para trabajar con la base de datos aún no funcionan?


Siempre están bloqueados.

 

Esta consulta no devuelve nada:

PRAGMA foreign_keys;

El intento de incluir una FOREIGN KEY falla:

    string query = "PRAGMA foreign_keys=ON;";
    if(!DatabaseExecute(m_db_handle, query)) {
      Print(__FUNCTION__, " > Query failed with code: ", GetLastError());
    }

La documentación tiene esta información: 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

porque se compiló con SQLITE_OMIT_FOREIGN_KEY o SQLITE_OMIT_TRIGGER definidos).

SQLITE_OMIT_TRIGGER

Al definir esta opción se omite el soporte para objetos TRIGGER. Ni los comandos CREATE TRIGGER ni DROP TRIGGER están disponibles en este caso, y si se intenta ejecutar cualquiera de ellos se producirá un error de análisis sintáctico. Esta opción también desactiva la aplicación derestricciones declave externa , ya que el código que implementa los desencadenadores y que se omite con esta opción también se utiliza para implementaracciones de clave externa.

SQLITE_OMIT_FOREIGN_KEY

Si se define esta opción, no se reconoce la sintaxis de lasrestricciones de clave externa.


No hay ningún problema con la versión:

//---

¿Cómo activar FOREIGN KEY?

 
Anatoli Kazharski #:

Esta consulta no devuelve nada:

El intento de incluir una FOREIGN KEY falla:

La documentación contiene esta información: https: //www.sqlite.org/foreignkeys.html#fk_enable


No hay ningún problema con la versión:

//---

¿Cómo activar FOREIGN KEY?

FOREIGN KEY esta habilitado por defecto, no usamos SQLITE_OMIT_FOREIGN_KEY o SQLITE_OMIT_TRIGGER.

PRAGMA foreign_keys=ON; no debe utilizarse.


.

Para comprobar el rendimiento se puede tomar el ejemplo 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)
);

Cuando se trabaja en el editor, todo funciona correctamente sin errores.

 
Renat Fatkhullin #:

FOREIGN KEY está activado por defecto, no usamos SQLITE_OMIT_FOREIGN_KEY o SQLITE_OMIT_TRIGGER.

PRAGMA foreign_keys=ON; no debe utilizarse.


Para comprobar el rendimiento se puede tomar el ejemplo https://www.sqlite.org/foreignkeys.html.

Cuando se trabaja en el editor, todo funciona correctamente sin errores.

Gracias por la respuesta.

Por alguna razón no obtengo el resultado que espero:

//---

¿Dónde está el error?

Y esto es lo que me gustaría tratar también:

Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading

Discusión del artículo "SQLite: trabajo nativo con bases de datos SQL en MQL5".

Anatoli Kazharski, 2022.10.05 01:54 AM

En MetaEditor estos botones (excepto Ejecutar) para trabajar con la base de datos no funcionan todavía?


Siempre están bloqueados.

 

Pida a alguien que reproduzca el ejemplo anterior.

La última fila de la tabla de seguimiento (resaltada) no debe añadirse.

 

He probado el mismo esquema en SQLiteStudio y todo funciona correctamente.

Este es el aspecto que debería tener la advertencia cuando se intenta añadir una fila con un ID que no existe en la tabla padre:


 
Gracias, lo comprobaremos.