Discussão do artigo "SQLite: trabalho nativo com bancos de dados SQL em MQL5" - página 7
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Será 2840 na versão beta amanhã:
Muito feliz, obrigado
O Beta 2840 está disponível, experimente-o.
Será 2840 na versão beta amanhã:
exemplo:
Incluiremos um novo tipo de json no assistente de criação de banco de dados posteriormente.
Se você tiver descoberto isso, mostre a implementação dessa tarefa.
No âmbito dessa tarefa, entendo corretamente que em ambos os casos (ao ler a base no Terminal2 e gravar na base do Terminal1) ela deve ser bloqueada por meio do mecanismo de transação?
Qual é a maneira mais econômica de determinar que o banco de dados foi atualizado?
Fundamentalmente errado. Você está descrevendo um aplicativo cliente-servidor distribuído, com um esquema de 1 escritor, n leitores. Ao projetar esses sistemas (e qualquer sistema distribuído em geral), você deve tentar evitar bloqueios usando formas de organização de dados e acesso a eles sem bloqueios. Se a tecnologia usada não permitir que você passe sem bloqueio, talvez ela não seja a melhor solução para a sua tarefa. No entanto, para outras tarefas, a tecnologia pode ser excelente.
No seu caso, é melhor implantar um servidor completo (você pode fazer isso no mesmo computador que o cliente) e gravar as cotações na fila de mensagens, como no Kafka, por exemplo. O cliente lerá essas citações do índice necessário. Esse é um esquema de acesso a dados sem bloqueio.
Então, a troca de dados tem menos possibilidades do que via arquivos?
Categoricamente, não. O compartilhamento por meio de arquivos não é atômico, portanto, requer bloqueios tanto no lado do leitor quanto do gravador. Essa é a maneira mais segura de obter um impasse e se perder na captura de erros difíceis de encontrar e incompreensíveis.
Fundamentalmente errado. Você está descrevendo um aplicativo cliente-servidor distribuído com um esquema de 1 escritor, n leitores. Ao projetar esses sistemas (e qualquer sistema distribuído em geral), você deve tentar evitar bloqueios, usando formas de organização de dados e acesso a eles sem bloqueios. Se a tecnologia usada não permitir que você passe sem bloqueio, talvez ela não seja a melhor solução para a sua tarefa. No entanto, para outras tarefas, a tecnologia pode ser excelente.
No seu caso, é melhor implantar um servidor completo (você pode fazer isso no mesmo computador que o cliente) e gravar as cotações na fila de mensagens, como no Kafka, por exemplo. O cliente lerá essas citações do índice necessário. Esse é um esquema de acesso a dados sem bloqueio.
Categoricamente, não. O compartilhamento por meio de arquivos não é atômico de forma alguma, portanto, requer bloqueios no lado do leitor e do gravador. Essa é a maneira mais segura de obter um deadlock e se perder na captura de erros difíceis de ver e incompreensíveis.
Obrigado por uma resposta tão detalhada! Infelizmente, esqueci completamente o problema que estava resolvendo na época. É por isso que não posso compartilhar minhas ideias sobre o assunto.
O Beta 2840 está disponível, experimente-o.
Perguntas sobre essa solução
- Há algum problema com o fato de vários EAs usarem o mesmo banco de dados sqlite simultaneamente?
- Se o MT5 travar, alguns dados poderão ser perdidos? Com que frequência ele grava dados no disco?
Boa tarde, caros desenvolvedores!
A função "DatabaseExport" não quer funcionar de forma alguma... dá o erro 5601 (erro de execução de consulta, mas não executo a consulta) quando especifico o nome da tabela nos parâmetros,
e quando eu especifico a consulta SQL, ele dá o erro 4022 (cancelamento da execução do programa), provavelmente um erro dentro da função MQL, parte do código da minha biblioteca: