Discussão do artigo "SQLite: trabalho nativo com bancos de dados SQL em MQL5" - página 9
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
Maxim Kuznetsov #:
O SQLite foi projetado para uma thread ou um escritor e muitos leitores. Muitos escritores não se referem a ele, mas a outras bases que não são "leves".
Não se trata de MQL - é assim que as coisas são na realidade e em toda parte.
E esse é outro motivo pelo qual eu gostaria de ver o PostgreSQL funcionando.
E esse é outro motivo pelo qual eu gostaria de ver o PostgreSQL funcionando.
Então faça isso, qual é o problema? Permita a DLL e use-a.
Não sou usuário do PostgreSQL, mas já usei MySQL, MonetDB, SQL Relay e ODBC do mt5.
Quando há necessidade, é mais fácil e rápido fazer você mesmo do que esperar por favores da natureza
a velocidade da consulta cairá e os requisitos de memória aumentarão....
mas está tudo bem :-)
O SQLite foi projetado para uma thread ou um escritor e muitos leitores. Muitos escritores não se preocupam com isso, mas com outras bases que não são "leves".
Não se trata de MQL - é assim que as coisas são na realidade e em toda parte.Talvez você não saiba como preparar o SQLite, não há gargalos nele, ou seja, como um único servidor TCP, que destrói todos os fluxos de entrada, esse servidor está em todos os outros bancos de dados ...
O SQLite é um presente, se for preparado adequadamente, a velocidade das solicitações de gravação será maior que a do Redis, e sobre a leitura em si, enquanto quando você lê a partir dos threads de base não bloqueia um ao outro e tudo acontece o mais rápido possível, descansando nos recursos do seu sistema, você também tem a oportunidade de implantar o banco de dados na RAM, não importa como, ao criar, e você pode, por meio de um software especial, criar um disco na RAM e nele colocar o banco de dados e criar um link simbólico, se você usar, por exemplo, para consultores, o que fornecerá o melhor desempenho possível.
E talvez você não entenda por que o compartilhamento de cache é necessário no SQLite..., ele é necessário para economizar recursos de memória para entrada e saída, de modo que os Expert Advisors e os scripts consumam menos memória no final, e somente porque um thread separado é alocado para o trabalho deles, um thread separado não é alocado para os indicadores.
Quando o modo de cache compartilhado é usado, a conexão com a base é aberta para todo o processo, e não para threads separadas, o que economiza recursos, mas, como consequência, leva a erros semelhantes aos que descrevi acima e o cache compartilhado torna o trabalho da base mais lento.
A decisão dos desenvolvedores de MQL, por um lado, é compreensível para mim, mas, por outro lado, não muito, pois tenho muita experiência com a plataforma e não encontrei casos em que alguém executou mais de 200 threads simultaneamente, em 1 no limite do terminal de 100 gráficos, para que você possa anexar 1 Expert Advisor e 1 script a cada um, mas você também pode executar serviços no número de serviços, acho que não há limite, mas pelo menos não é conveniente e consome muitos recursos em qualquer caso, e se esses threads abriram suas próprias conexões com o banco de dados é uma gota no oceano de memória relativamente então.
Esse uso do terminal é, no mínimo, inconveniente e, no máximo, não faz sentido, porque um desenvolvedor competente criará um Expert Advisor em várias moedas como um único thread e não se envolverá em tal absurdo.
Prezados desenvolvedores, por favor, removam o cache comum ou me indiquem o que deixei passar.
Extraí a essência do"SQLite Shared-Cache" da documentação oficial:
"Isso pode reduzir significativamente a quantidade de memória e IO exigida pelo sistema."
Aqui está o link, leia-o.
No MetaEditor, esses botões (exceto Run) para trabalhar com o banco de dados ainda não funcionam?
Eles estão sempre bloqueados.
Essa consulta não retorna nada:
A tentativa de incluir uma FOREIGN KEY falha:
A documentação tem esta informação: 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 foi compilado com SQLITE_OMIT_FOREIGN_KEY ou SQLITE_OMIT_TRIGGER definido).
SQLITE_OMIT_TRIGGER
SQLITE_OMIT_FOREIGN_KEY
Não há nada de errado com a versão:
//---
Como ativar a FOREIGN KEY?
Essa consulta não retorna nada:
A tentativa de incluir uma FOREIGN KEY falha:
A documentação tem esta informação: https: //www.sqlite.org/foreignkeys.html#fk_enable
Não há nada de errado com a versão:
//---
Como ativar a FOREIGN KEY?
FOREIGN KEY é habilitada por padrão, não usamos SQLITE_OMIT_FOREIGN_KEY ou SQLITE_OMIT_TRIGGER.
PRAGMA foreign_keys=ON; não deve ser usado..
Para verificar o desempenho, você pode usar o exemplo 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) );Ao trabalhar no editor, tudo funciona corretamente, sem erros.
FOREIGN KEY é ativado por padrão, não usamos SQLITE_OMIT_FOREIGN_KEY ou SQLITE_OMIT_TRIGGER.
PRAGMA foreign_keys=ON; não deve ser usado.Para verificar o desempenho, você pode usar o exemplo https://www.sqlite.org/foreignkeys.html.
Ao trabalhar no editor, tudo funciona corretamente, sem erros.
Obrigado pela resposta!
Por algum motivo, não estou obtendo o resultado esperado:
//---
Onde está o erro?
E é com isso que eu gostaria de lidar também:
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Discussão do artigo "SQLite: trabalho nativo com bancos de dados SQL em MQL5".
Anatoli Kazharski, 2022.10.05 01:54 AM
No MetaEditor, esses botões (exceto Execute) para trabalhar com o banco de dados ainda não funcionam?
Eles estão sempre bloqueados.
Peça a alguém para reproduzir o exemplo acima.
A última linha da tabela de trilhas (destacada) não deve ser adicionada.
Testei o mesmo esquema no SQLiteStudio e tudo funciona corretamente.
Esta é a aparência do aviso ao tentar adicionar uma linha com um ID que não existe na tabela pai: