vc pode setar na mao timeout para operações, devido a lock na tabela q
vc pode fazer... (q nao é o caso dele)
O problema de deixar a sessão aberta é se por acaso seu app encerrar,
vc pode perder dados ou corromper o arquivo do banco e perde-lo.
Em 16 de fevereiro de 2012 16:45, André Luiz R. Silva
<macoli...@gmail.com> escreveu:
Nada a ver o q vc falou.
Timeout no sqlite é unica e exclusivamente para operacoes sql, e vc setar ou nao, nao causa perda de dados por corromper arquivos, o timeout é para "banco, se em x tempo vc nao conseguir fazer y operacao, me retorne erro e nao fique tentando infinitamente". E no caso o lock que eu disse é vc dar um lock na tabela para inserir algo e ninguem usar aquela tabela enquanto vc esta com o lock, acabou sua operacao, vc da o commit e acabou o lock.
A conexao se encerra com close, nao com o retorno do timeout do try do lock qune vc deu na tabela.
Mais uma vez, sqlite nao usa socket, é abertura de arquivos, nao tem timeout.
O timeout de transaction é praticamente impossivel de acontecer, sei
pq já criei daemons em C/C++ e Perl, com bancos de sqlite com mais de
5 GBs de dados, com milhares de inserts , selects, deletes e updates
ao mesmo tempo. O unico problema que existia era em caso inserts e
updates, que caso acontececem ao mesmo tempo e o disco demorasse a
gravar, o sqlite criava arquivos de journal (q hoje é configuravel)
para fazer a inserção/update qdo o banco tivesse folga.
Aqui (http://www.sqlite.org/lockingv3.html) eles explicam como fizeram
os Locks de arquivo (que influenciam no timeout).
A implementação de timeout do sqlite é completamente diferente de um
SGDB, o timeout dele é unica e exclusivamente para o lock dado no
arquivo (flock igual fosse num arquivo comum) para a gravação em disco
de um insert/update, ou qdo vc chama o lock EXCLUSIVE via PRAGMA.
(http://www.sqlite.org/pragma.html) .
O funcionamento do Sqlite é MUUUITO diferente de um SQL Server,
Postgres ou MySQL, mesmo sendo um SGDB. Por ele ser mais simples, é
muito mais rápido q qquer outro SGBD. As unicas coisas em comum do
SQLite com os outros citados é a linguagem entre banco e client, ser
SQL e o ACID.
E SQL é uma linguagem de banco, só isso.
Eu trabalho com sqlite desde 2002 (versão 2.4.X), sei direitinho todos
os problemas que o sqlite pode dar.
Por isso eu digo, setar timeout no SQLite nao vai fazer nada em
relação a proteção de dados.
Existem até alguns tunnings para se fazer no sqlite, através de
pragmas que melhoram bastante o desempenho do banco, mas num app
mobile, dificilmente vai dar diferença.
Em 16 de fevereiro de 2012 18:50, André Luiz R. Silva
Em 17 de fevereiro de 2012 00:26, André Luiz R. Silva