Do FAQ SQLite eu sabia que:
Vários processos podem ter o mesmo banco de dados aberto ao mesmo tempo. Vários processos podem estar fazendo um
SELECTao mesmo tempo. Porém, apenas um processo pode fazer alterações no banco de dados a qualquer momento.
Assim, tanto quanto eu entendo que eu posso: 1) Leia db de vários segmentos ( SELECT) 2) Leia db de vários segmentos ( SELECT) e escrever a partir único segmento ( CREATE, INSERT, DELETE)
Mas li sobre o Write-Ahead Logging, que oferece mais simultaneidade, pois os leitores não bloqueiam os gravadores e um escritor não bloqueia os leitores . A leitura e a escrita podem prosseguir simultaneamente.
Finalmente, eu tenho completamente confuso quando eu descobri que , quando especificado:
Aqui estão outros motivos para obter um erro SQLITE_LOCKED:
- Tentando
CREATEouDROPuma tabela ou índice enquanto umaSELECTinstrução ainda está pendente.- Tentando gravar em uma tabela enquanto a
SELECTestiver ativo nessa mesma tabela.- Tentando fazer dois
SELECTna mesma tabela ao mesmo tempo em um aplicativo multithread, se o sqlite não estiver definido para isso.- fcntl (3, a chamada F_SETLK no arquivo DB falha. Isso pode ser causado por um problema de bloqueio do NFS, por exemplo. Uma solução para esse problema é afastar o banco de dados e copiá-lo para que ele tenha um novo valor de Inode
Então, eu gostaria de esclarecer por mim mesmo, é necessário evitar o bloqueio? Posso ler e escrever ao mesmo tempo em dois threads diferentes? Obrigado.
isolation_level=None. Sem o modo de cache compartilhado, como faço para compartilhar instâncias entre threads?