Discusión sobre el artículo "SQLite: trabajo nativo con bases de datos en SQL en MQL5" - página 7
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Mañana será 2840 en beta:
Muy contento, gracias
Beta 2840 está disponible, por favor pruébela.
Mañana será 2840 en beta:
ejemplo:
Más adelante incluiremos el nuevo tipo json en el asistente de creación de bases de datos.
Quien lo haya resuelto, por favor que muestre la implementación de dicha tarea.
En el marco de esta tarea, ¿entiendo correctamente que en ambos casos (al leer la base en Terminal2 y escribir en la base en Terminal1) se debe bloquear a través del mecanismo de transacción?
¿Cuál es la forma más económica de determinar que la base de datos ha sido actualizada?
Fundamentalmente erróneo. Estás describiendo una aplicación cliente-servidor distribuida, con un esquema de 1 escritor, n lectores. Cuando se diseñan este tipo de sistemas (y cualquier sistema distribuido en general) se debe intentar evitar cualquier bloqueo utilizando formas de organización de datos y de acceso a los mismos sin bloqueos. Si la tecnología utilizada no permite prescindir de los bloqueos, quizá no sea la mejor solución para su tarea. Sin embargo, para otras tareas la tecnología puede ser estupenda.
En tu caso es mejor desplegar un servidor completo (puedes hacerlo en la misma máquina que el cliente) y escribir citas en la cola de mensajes, mira Kafka, por ejemplo. El cliente leerá estas citas desde el índice requerido. Este es un esquema de acceso a datos libre de bloqueos.
Entonces, ¿resulta que el intercambio de datos tiene menos posibilidades que a través de ficheros?
Categóricamente no. El intercambio a través de ficheros no es atómico en absoluto, por lo que requiere bloqueos tanto en el lado del lector como en el del escritor. Esta es la forma más segura de llegar a un punto muerto y perderse en la captura de errores difíciles de encontrar e incomprensibles.
Fundamentalmente erróneo. Estás describiendo una aplicación cliente-servidor distribuida con un esquema de 1 escritor, n lectores. Cuando se diseñan este tipo de sistemas (y cualquier sistema distribuido en general) se debe intentar evitar cualquier bloqueo, utilizando formas libres de bloqueos para la organización de los datos y el acceso a ellos. Si la tecnología utilizada no permite prescindir de los bloqueos, quizá no sea la mejor solución para su tarea. Sin embargo, para otras tareas la tecnología puede ser estupenda.
En tu caso es mejor desplegar un servidor completo (puedes hacerlo en la misma máquina que el cliente) y escribir citas en la cola de mensajes, mira Kafka, por ejemplo. El cliente leerá estas citas desde el índice requerido. Se trata de un esquema de acceso a datos sin bloqueo.
Categóricamente no. Compartir a través de archivos no es atómico de ninguna manera, por lo que requiere bloqueos tanto en el lado del lector como del escritor. Esta es la forma más segura de llegar a un punto muerto y perderse en la captura de errores difíciles de ver e incomprensibles.
Gracias por una respuesta tan detallada. Por desgracia, olvidé por completo qué problema estaba resolviendo en ese momento. Por eso no puedo compartir mis ideas sobre el tema.
Beta 2840 está disponible, por favor pruébala.
Preguntas sobre esta solución
- ¿Hay algún problema si varios EAs utilizan la misma base de datos sqlite simultáneamente?
- Si MT5 se bloquea, ¿pueden perderse algunos datos? ¿Con qué frecuencia se escriben los datos en el disco?
¡Buenas tardes, estimados desarrolladores!
La función "DatabaseExport" no quiere funcionar de ninguna manera...da error 5601 (error de ejecución de la consulta, pero no ejecuto la consulta) cuando especifico el nombre de la tabla en los parámetros,
y cuando especifico la consulta SQL, da error 4022 (cancelación de la ejecución del programa), probablemente error dentro de la función MQL, parte del código de mi librería: