Ho un database SQLite utilizzato da due processi. Mi chiedo, con la versione più recente di SQLite, mentre un processo (connessione) avvia una transazione per scrivere nel database l'altro processo sarà in grado di leggere dal database contemporaneamente?Posso leggere e scrivere su un database SQLite contemporaneamente da più connessioni?
risposta
ho raccolto informazioni da varie fonti, per lo più da sqlite.org, e metterli insieme:
In primo luogo, per impostazione predefinita, più processi possono avere lo stesso database SQLite aperto allo stesso tempo, e diversi accessi di lettura può essere soddisfatto in parallelo.
In caso di scrittura, una singola scrittura nel database blocca il database per un breve periodo di tempo, nulla, nemmeno la lettura, può accedere al file del database.
A partire dalla versione 3.7.0, è disponibile una nuova opzione “Write Ahead Logging” (WAL), in cui la lettura e la scrittura possono procedere contemporaneamente.
Per impostazione predefinita, WAL non è abilitato. Per attivare WAL, fare riferimento alla documentazione di SQLite.
journal_mode = WAL risolve il mio problema! –
SQLite3 permette esplicitamente multiple connections:
(5) Can più applicazioni o più istanze dello stesso accesso alle applicazioni un singolo file di database, allo stesso tempo?
Più processi possono avere lo stesso database aperto allo stesso tempo. È possibile che più processi eseguano un SELEZIONA allo stesso tempo. Ma solo un processo può apportare modifiche al database in qualsiasi momento nell'ora , tuttavia.
Per i collegamenti di condivisione, utilizzare SQLite3 shared cache:
A partire dalla versione 3.3.0, SQLite include uno speciale "shared-cache" modalità (disabilitato per default)
Nella versione 3.5.0, la modalità cache condivisa è stata modificata in modo che la stessa cache possa essere condivisa su un intero processo anziché solo all'interno di un singolo thread .
5.0 Abilitazione Shared-Cache Modalità
modalità condivisa-cache è attivata su una base per-processo. Utilizzando l'interfaccia C , è possibile utilizzare la seguente API per attivare o disattivare globalmente la modalità cache condivisa :
int sqlite3_enable_shared_cache (int);
Ogni sqlite3_enable_shared_cache chiamata() effetti successivo del database connessioni create utilizzando sqlite3_open(), sqlite3_open16(), o sqlite3_open_v2(). Le connessioni al database che esistono già sono inalterate. Ogni chiamata a sqlite3_enable_shared_cache() sovrascrive tutte le chiamate precedenti allo all'interno dello stesso processo.
- 1. SQLite: condivisione di connessioni tra thread per leggere e scrivere
- 2. Interrogazione su più database contemporaneamente
- 3. È possibile leggere e scrivere in un file contemporaneamente?
- 4. Visualizzazione Sqlite su più database
- 5. Come posso leggere e scrivere dati JPEG su base pixel?
- 6. Yii più connessioni al database
- 7. EntityFramwork, utilizzando più database/connessioni
- 8. Come leggere da TCP e scrivere su stdout?
- 9. Flushing e database SQLite su Android
- 10. ConcurrentHashMap leggere e scrivere blocchi
- 11. Codeigniter - più connessioni al database
- 12. Come leggere i dati dal database SQLite?
- 13. SQLite tenta di scrivere un errore di database readonly
- 14. PHP leggere e scrivere JSON da file
- 15. H2 Database connessioni multiple
- 16. Scrivere e leggere da un fifo da due diversi script
- 17. Boost.asio: posso fare async_read e async_write contemporaneamente da un thread?
- 18. SQLite - Il modo più veloce per leggere i dati dal database SQLite?
- 19. Il modo più semplice per scrivere e leggere un XML
- 20. Più file per un singolo database SQLite
- 21. Database SQLite su PhoneGap/iOS - È possibile più di 5mb
- 22. Connessioni di database e F #
- 23. Come posso eseguire più database Neo4j su un singolo server?
- 24. Come posso eseguire iterazioni su più elenchi contemporaneamente in Perl?
- 25. Come posso bloccare un database SQLite?
- 26. Come posso contare il numero di connessioni aperte in un database SQLite?
- 27. Come posso leggere un database/file pickle Python da C?
- 28. Come leggere i dati da un database SQLite, in un dizionario prima di codificarlo in JSON?
- 29. Più database SQLite per più lingue?
- 30. Come posso leggere PRAGMA da SQLite usando ServiceStack OrmLite?
domanda correlata, vedere qui .. http: // stackoverflow.it/questions/12117016/strategies-for-concurrent-read-writing-and-reading-in-sqlite/24038860 # 24038860 – Nepster