Jump to content
nunopicado

SQLite para "Multi-User"

Recommended Posts

nunopicado

Boas

Tenho um programa para fazer (Lazarus) que implica o seguinte:

- Lista de clientes e numeros de telefone

- Entrada de novos clientes (muito esporadicamente, pois a lista está preenchida noutro programa, que seria importada durante o desenvolvimento, e novos clientes aparece um por acaso)

- Entrada de registo de chamadas telefonicas ("o cliente ligou, queria isto ou aquilo ou aquel'outro")

- Mensagens internas entre os utilizadores do programa, que seriam de texto simples, uma ou duas frases, e também esporádicamente (tipo, "quando acabares de atender esse cliente, tens outro à espera" ou "ligou fulano tal, tu não estavas e ele quer falar contigo")

- Registo de alguns produtos vendidos, as suas caracteristicas e data de venda, para efeitos de garantia (se saissem uma média de 5 por semana já eu ficava contente :D )

Como podem ver, a carga de trabalho vai ser mínima. O programa antigo, cuja base de dados são simples ficheiros sequenciais binários, não chega a 1MB por ano (embora não inclui as mensagens internas e o registo de equipamento);

Lembrei-me de por em SQLite, mas não sei até que ponto é possível pelo seguinte:

- Vão haver 8 utilizadores com possibilidade de aceder à base de dados.

- Dificilmente se dará o caso de mais do que 1 acederem ao mesmo tempo, dada a pouca carga de informação transmitida, mas o que é certo é que pode acontecer.

- O programa ficaria todo num servidor de dados (Win Server 2003), com o EXE a ser corrido por um atalho em cada PC.

- É quase certo que várias instancias do programa fiquem abertas ao mesmo tempo (1 em cada PC cliente), embora eu tenha em ideia fazer com que o programa só abra a BD no momento de escrever, e depois volte a fechar.

Pergunto: O SQLite aguentaria esse tipo de trabalho? Caso acontecesse haver mais do que um acesso em simultaneo, há um crash, perda de informação, ou simplesmente atrasa o processo do PC que "chegar depois" (se for isto não seria problema, dadas as condições)

Ainda pensei em colocar a BD em MySQL, ou SQL Server Express... Mas por tão pouco, parece desajustado andar às voltas com servidores...

Obrigado desde já

Nuno Picado


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
IceBrain

O SQLite funciona bem se os locks do filesystem forem fiáveis, mas isso não é garantido numa partilha de ficheiros em rede SMB. Ou seja, se o programa vai correr no PC dos clientes e aceder ao ficheiro da BD por partilha de ficheiros, não é aconselhável usar SQLite.

SQLite uses POSIX advisory locks to implement locking on Unix. On Windows it uses the LockFile(), LockFileEx(), and UnlockFile() system calls. SQLite assumes that these system calls all work as advertised. If that is not the case, then database corruption can result. One should note that POSIX advisory locking is known to be buggy or even unimplemented on many NFS implementations (including recent versions of Mac OS X) and that there are reports of locking problems for network filesystems under Windows. Your best defense is to not use SQLite for files on a network filesystem.

http://www.sqlite.org/lockingv3.html


❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Share this post


Link to post
Share on other sites
nunopicado

Antes de mais, obrigado pela resposta...

É, se é assim pode ser um problema...

Para o programa em questão, a velocidade não é crucial, mas a estabilidade e segurança dos dados sim.

Andava aqui às voltas com um Wrapper SQLite para Lazarus chamado SimpleSQLite, ou coisa assim.

Este tem uma propriedade que permite saber, num determinado momento, se há uma transacção activa.

Será que, se a cada pedido de transacção, fosse executado um loop que fizesse o programa aguardar até que não houvesse nenhuma transacção activa e só depois abrir uma nova, resolveria o problema do lock?

Quanto a alternativas ao SQLite, tendo em conta que a quantidade de dados é bastante reduzida, e não há grande interesse em configurar um servidor de BD tipo MSSQL ou MySQL, já que isso iria tornar complexo um problema que se quer simples. :D o quê que se poderia usar?

Há que ter em conta que a única liguagem/IDE com que me sinto à vontade para implementar algo do genero é Delphi/Lazarus... Em C já não programa há 14 anos, e em outras... bem, a minha paciência/tempo já não dão para aprender uma linguagem nova de raíz assim em cima da hora!  :cheesygrin:


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
IceBrain

Depende de como é que essa transacção é detectada, mas não vejo de que forma é que isso pode ser feito sem implementar um protocolo de rede.

O problema é que todas essas funcionalidades trabalham sobre o filesystem e portanto dependem da sua consistência, o que não é assegurado pelo SMB.

Não faço ideia se há alternativas, mas instalar o MySQL ou PostgreSQL em Windows custa assim tanto? Para uma aplicação dessas a configuração por omissão era suficiente, e pelo menos em Debian isso instala-se em poucos minutos.


❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Share this post


Link to post
Share on other sites
nunopicado

Custar não custa... Já o instalei aqui em casa e é sempre a andar! Aliás, até tenho na empresa um FreeNAS a correr, que permite a instalação do MySQL sem grandes chatices.

A questão não é a dificuldade de instalar, mas a complexidade da estrutura final. Visto que até agora tem estado tudo a trabalhar com ficheiros sequenciais, para mudar isso (que certamente é o que quero, por motivos obvios ;)) tem de ser uma mudança suficientemente suave.

Chegar de repente e propor um software que faz pouco mais do que o mesmo do que o que lá está, mas precisa de uma estrutura de servidor por trás, por muito simples que seja, iria certamente resultar num redondo "Não".

Um programa tão básico, neste caso, tem de se manter isso mesmo, básico... Qualquer pessoa na empresa precisa de, num qualquer momento, pegar nele e instalar se for o caso, bastando repor o ficheiro de BD para ficar a funcionar em pleno...

Só não avanço para ficheiros sequenciais (já) porque... Bem, é mesmo isso que quero evitar! :D

De qualquer maneira, obrigado pela ajuda...


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.