Vários aplicativos ou várias instâncias do mesmo aplicativo podem acessar um único arquivo de banco de dados ao mesmo tempo?
Vários processos podem ter o mesmo banco de dados aberto ao mesmo tempo. Múltiplos processos podem estar fazendo um SELECT ao mesmo tempo. Porém, apenas um processo pode fazer alterações no banco de dados a qualquer momento.
O SQLite usa bloqueios de leitor/gravador para controlar o acesso ao banco de dados. (No Win95/98/ME, que não tem suporte para bloqueios de leitor/gravador, uma simulação probabilística é usada.) Mas tome cuidado: esse mecanismo de bloqueio pode não funcionar corretamente se o arquivo de banco de dados for mantido em um sistema de arquivos NFS. Isso ocorre porque o bloqueio do arquivo fcntl() é interrompido em muitas implementações do NFS. Você deve evitar colocar arquivos de banco de dados SQLite no NFS se vários processos tentarem acessar o arquivo ao mesmo tempo. No Windows, a documentação da Microsoft diz que o bloqueio pode não funcionar em sistemas de arquivos FAT se você não estiver executando o daemon Share.exe. As pessoas que têm muita experiência com o Windows me dizem que o bloqueio de arquivos de rede é muito problemático e não é confiável. Se o que eles dizem é verdade,
Não temos conhecimento de nenhum outro mecanismo de banco de dados SQL incorporado que suporte tanta simultaneidade quanto o SQLite. O SQLite permite que vários processos tenham o arquivo de banco de dados aberto de uma só vez e que vários processos leiam o banco de dados de uma só vez. Quando algum processo deseja gravar, ele deve bloquear todo o arquivo de banco de dados durante sua atualização. Mas isso normalmente leva apenas alguns milissegundos. Outros processos apenas esperam que o escritor termine e continuem com seus negócios. Outros mecanismos de banco de dados SQL incorporados geralmente permitem que apenas um único processo se conecte ao banco de dados de uma só vez.
No entanto, os mecanismos de banco de dados cliente/servidor (como PostgreSQL, MySQL ou Oracle) geralmente suportam um nível mais alto de simultaneidade e permitem que vários processos sejam gravados no mesmo banco de dados ao mesmo tempo. Isso é possível em um banco de dados cliente/servidor porque sempre há um único processo de servidor bem controlado disponível para coordenar o acesso. Se seu aplicativo precisa de muita simultaneidade, considere o uso de um banco de dados cliente/servidor. Mas a experiência sugere que a maioria dos aplicativos precisa de muito menos simultaneidade do que seus projetistas imaginam.
Quando o SQLite tenta acessar um arquivo bloqueado por outro processo, o comportamento padrão é retornar SQLITE_BUSY. Você pode ajustar esse comportamento a partir do código C usando as funções API sqlite3_busy_handler() ou sqlite3_busy_timeout().
Sim.
Das perguntas frequentes :