Discussione sull’articolo "SQLite: Gestione nativa dei database SQL in MQL5" - pagina 7
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Domani sarà 2840 in beta:
Molto soddisfatto, grazie
La beta 2840 è disponibile, provatela.
Domani sarà 2840 in beta:
esempio:
In seguito includeremo il nuovo tipo json nella creazione guidata del database.
Chi l'ha capito, è pregato di mostrare l'implementazione di tale compito.
Nell'ambito di questo compito, ho capito bene che in entrambi i casi (quando si legge la base sul Terminal2 e si scrive sulla base nel Terminal1) dovrebbe essere bloccato attraverso il meccanismo delle transazioni?
Qual è il modo più economico per determinare che il database è stato aggiornato?
Fondamentalmente sbagliato. State descrivendo un'applicazione client-server distribuita, con uno schema di 1 scrittore, n lettori. Quando si progettano sistemi di questo tipo (e in generale tutti i sistemi distribuiti) si dovrebbe cercare di evitare i blocchi, utilizzando modalità di organizzazione dei dati e di accesso agli stessi prive di blocchi. Se la tecnologia utilizzata non consente di fare a meno dei blocchi, forse non è la soluzione migliore per il vostro compito. Tuttavia, per altri compiti la tecnologia potrebbe essere ottima.
Nel vostro caso è meglio implementare un server completo (potete farlo sulla stessa macchina del client) e scrivere le citazioni sulla coda di messaggi, ad esempio Kafka. Il client leggerà queste citazioni dall'indice richiesto. Si tratta di uno schema di accesso ai dati privo di lock.
Quindi risulta che lo scambio di dati ha meno possibilità rispetto ai file?
Categoricamente no. La condivisione tramite file non è affatto atomica, quindi richiede blocchi sia sul lato del lettore che su quello dello scrittore. Questo è il modo più sicuro per ottenere un deadlock e perdersi nella cattura di errori difficili da trovare e incomprensibili.
Fondamentalmente sbagliato. Si sta descrivendo un'applicazione client-server distribuita con uno schema di 1 scrittore, n lettori. Quando si progettano sistemi di questo tipo (e qualsiasi altro sistema distribuito in generale) si dovrebbe cercare di evitare qualsiasi blocco, utilizzando modalità di organizzazione dei dati e di accesso agli stessi prive di blocchi. Se la tecnologia utilizzata non consente di fare a meno dei blocchi, forse non è la soluzione migliore per il vostro compito. Tuttavia, per altri compiti la tecnologia potrebbe essere ottima.
Nel vostro caso è meglio implementare un server completo (potete farlo sulla stessa macchina del client) e scrivere le citazioni nella coda di messaggi, ad esempio Kafka. Il client leggerà queste citazioni dall'indice richiesto. Si tratta di uno schema di accesso ai dati privo di lock.
Categoricamente no. La condivisione tramite file non è in alcun modo atomica, quindi richiede blocchi sia sul lato del lettore che su quello dello scrittore. Questo è il modo più sicuro per ottenere un deadlock e perdersi nella cattura di errori difficili da vedere e incomprensibili.
Grazie per la risposta così dettagliata! Sfortunatamente, ho completamente dimenticato il problema che stavo risolvendo in quel momento. Per questo motivo non posso condividere i miei pensieri sull'argomento.
La beta 2840 è disponibile, provatela.
Domande su questa soluzione
- Ci sono problemi se più EA utilizzano lo stesso database sqlite contemporaneamente?
- Se MT5 si blocca, alcuni dati possono andare persi? Con quale frequenza vengono scritti i dati su disco?
Buon pomeriggio, cari sviluppatori!
La funzione "DatabaseExport" non vuole funzionare in nessun modo...dà errore 5601 (errore di esecuzione della query, ma non eseguo la query) quando specifico il nome della tabella nei parametri,
e quando specifico la query SQL, dà l'errore 4022 (annullamento dell'esecuzione del programma), probabilmente un errore all'interno della funzione MQL, parte del codice della mia libreria: