Antes de fazer a pergunta, deixe-me primeiro descrever meus pensamentos sobre o SQLite.
Por acaso, gosto de ferramentas pequenas, rápidas e, mais importante, que possuem apenas a funcionalidade realmente necessária. É por isso que gosto de SQLite e gosto menos de MS-SQL.
Por exemplo: o MS-SQL pode ter muito mais funcionalidade, escalabilidade, etc. etc., mas também pode ser difícil de instalar se você não tiver sorte. Obviamente, não estou dizendo que uma instalação difícil seja um motivo para não escolher um banco de dados específico.
Não me entenda errado: o MS-SQL é um produto de excelente qualidade. Eu tenho muita experiência com MS-SQL; Entendo o produto muito bem como profissional. Eu prefiro menos em algumas circunstâncias em que não é realmente necessário (= não há muitos usuários, <10-15).
Quanto da funcionalidade de um banco de dados você realmente usa? Na minha experiência, geralmente é apenas o SQL normal (SELECT, INSERT e UPDATE).
Eu gosto de SQLite. É rápido fascinante. É extremamente fácil de "instalar". Eu acho que o SQLite pode fazer mais do que afirma que pode fazer. Por que usá-lo apenas para aplicativos de processo único / usuário único? Afinal: não há muitos aplicativos acessando constantemente um banco de dados.
Por exemplo: considere um aplicativo ERP com, digamos, 15 usuários. Por que o SQLite não pode ser usado para isso? Vamos ser sinceros: na minha experiência profissional, na maioria das vezes, os usuários desse tipo de aplicativo acessam o banco de dados por cerca de 5 a 10% do tempo total em que estão usando o aplicativo. Nos outros 90-95%, eles estão apenas observando as informações na tela, inserindo dados em uma grade / formulário e quando salvam suas entradas, isso não passa mais de 1 segundo do tempo do banco de dados. Fe: 1,5 minutos de tempo de entrada vs. 1 segundo de economia de tempo.
Se o arquivo de banco de dados SQLite estiver bloqueado durante o "tempo de economia", outros usuários que precisam acessar o banco de dados aguardam, mas eles não percebem isso porque o tempo de espera será muito pequeno (imperceptível). No código, você apenas precisa lidar com o possível tempo "ocupado" do banco de dados, para evitar exceções, mas isso não é difícil de fazer.
Um cara, que deve pensar o mesmo como eu, chegou a criar uma solução cliente-servidor para SQLite: SQLitening . Isso me deixou mais convencido de que talvez não estivesse me enganando.
Obviamente, existem aplicativos intensivos em bancos de dados nos quais o SQLite não se encaixa. Mas, como penso agora, muitos aplicativos multiusuário, se não excederem 15 usuários, devem se sair bem com o SQLite.
Muitos de nossos clientes não gastam muito em hardware, então, frequentemente, encontro um único servidor com tudo (Exchange, SQL (s), clientes etc.) e, por isso, estão quase "sem fôlego". Se eu pudesse entregar um produto que não possui altos requisitos de sistema, meu cliente ficaria feliz. O SQLite não adiciona peso (pelo menos, não muito), o MS-SQL. Portanto, eu não escolheria o SQLite porque é gratuito, barato ou fácil de instalar. Eu o escolheria por razões práticas / técnicas.
FYI: Na minha profissão, vendemos produtos (personalizados e padrão, principalmente relacionados a ERP) a clientes onde, em média, não mais que 5-6 pessoas usarão o produto. Existem algumas exceções, mas não mais que 10 a 15 usuários.
A pergunta é: Estou certo ao pensar que posso usar o SQLite para algum aplicativo multiusuário, como no exemplo que descrevo? Existem desvantagens técnicas que eu deva conhecer? Quais são as suas experiências (negativas ou positivas) que me ajudarão a fazer a escolha certa?
Atualização: Por favor, não veja isso como um julgamento negativo de outros bancos de dados. Eles são principalmente todos os produtos finos. Apenas compartilhando meus pensamentos aqui e interessados em suas opiniões sobre isso.
Respostas:
Existem muitas instâncias em que o SQLite é suficiente. O usuário, departamento ou empresa raramente a supera (não ouvimos muito sobre isso, porque ninguém chama um programador se o aplicativo está funcionando muito bem.) Você poderia fazer o mesmo argumento para um arquivo do MS Access (Windows) ou SQL Server Compact Edition (é necessária alguma instalação). Eles são bons o suficiente para um aplicativo local, porque você não precisa se preocupar tanto com a segurança do arquivo.
Em um cenário multiusuário em uma rede local, o arquivo está indo para uma pasta compartilhada que precisará de acesso de todos os usuários - chame a segurança. A manutenção simples ou qualquer alteração na estrutura da tabela, como backups ou adição de uma coluna, impedirão o acesso de outros usuários. Na noite passada, o backup não funcionou porque alguém se esqueceu de sair do aplicativo. O que acontece quando você deseja fazer um backup no meio do dia? Todos racionalizam que não precisam de backups durante o dia devido às limitações técnicas do banco de dados. Em algum momento, a instalação do SQL Server Express / outro equivalente no servidor exigirá algumas configurações iniciais e a configuração de segurança, estará mais envolvida antecipadamente, mas será necessária pouca manutenção.
Sempre existe a preocupação com escalabilidade / excesso de engenharia. Mesmo que o número de usuários ou a quantidade de dados ainda seja gerenciável, alguém sempre tem a ideia de utilizar os dados ao vivo em alguma intranet ou outra interface de site / navegador. Bancos de dados de arquivo apresentam problemas. É preciso apenas uma pessoa que deseja acessar o arquivo de dados por meio de uma VPN (o aplicativo está instalado no laptop) para dar a você um problema de 'dimensionamento'. Você pode criar o aplicativo para permitir que usuários desconectados possam sincronizar quando retornarem. Apenas não parece valer a pena para o usuário ocasional fora do escritório.
fonte
Eu acho ótimo usar quando você precisa de um banco de dados "interno". Ou seja, um banco de dados com o qual seu aplicativo / código irá interagir, mas não estará diretamente relacionado ao principal motivo pelo qual seu aplicativo existe. Em vez de usar enormes mapeamentos na memória ou gerenciadores de cache, você também pode usar esse banco de dados, por exemplo. Eu tenho um exemplo muito concreto disso, pois eu o usei recentemente nos casos de teste JUnit / DBunit, nos quais eu precisava conectar-me a um banco de dados, executar algum trabalho, ler dados e apagar tudo no final. Como você só precisa criar um arquivo vazio para criar o banco de dados , isso foi bastante fácil de fazer.
Outro uso que vejo: quando você tem apenas um usuário. Sim, isso é possível, pense em "Firefox" ou "Opera", por exemplo :-)
Além disso, no site da SQLite, eles são muito honestos e dão motivos para NÃO USAR (consulte o parágrafo "Situações em que outro RDBMS pode funcionar melhor")
ps: relacionado aos comentários no Sql Server Express, sim, ele precisa ser "instalado". E tive alguns problemas para atualizá-lo pessoalmente (tive que remover manualmente algumas chaves do registro relacionadas à versão anterior para poder instalar o 2008 R2). No entanto, se você deseja comparar o SQLite com um banco de dados desenvolvido pela Microsoft, consulte o Sql Server Compact Edition , que você não precisa instalar (consulte "Implantação baseada em arquivos particulares").
fonte
Muito poucas aplicações têm poucos usuários para sempre. E para quem vê mais usuários e manipulação de dados mais complexa, o uso do SQLite está completamente fora de questão por motivos de desempenho devido ao modelo de bloqueio simples "uma transação de gravação por vez".
Digamos que você tenha 100 usuários, cada um trabalhando por 60 segundos, preenchendo um formulário e enviando-o. Portanto, você precisa processar cerca de 1,6 transações por segundo. O modelo de dados é complexo e salvar um formulário envolve a leitura e a gravação em muitas tabelas grandes, talvez até a comunicação com um sistema diferente; portanto, cada "envio de formulário" resulta em uma transação que leva 2 segundos. Como o SQLite não pode processar transações simultaneamente, isso significa que ele pode processar apenas 0,5 transações por scond. Opa
"Pode ser difícil instalar" não é um bom motivo para decidir contra uma parte crítica da infraestrutura. Além disso, existem outros mecanismos de banco de dados para escolher, pelo menos dois deles (MySQL e Postgres) são gratuitos e não têm as limitações de simultaneidade do SQLite. Eles podem até ser mais fáceis de instalar do que o MS-SQL.
fonte
Eu acho que o SQLLite é excelente para o desenvolvimento de aplicativos, seu ponto forte é que ele não precisa ser instalado no cliente.
No entanto, também não subestime o SQL Server Express, é um excelente banco de dados gratuito com a maioria dos recursos do servidor sql comum, com apenas uma limitação no tamanho do banco de dados (difícil de exceder), juntamente com a capacidade de usar as excelentes ferramentas do normal servidor SQL.
A sua maior desvantagem é que você precisa instalá-lo, mas estou um pouco inseguro sobre essa parte, pode ser uma maneira de contornar isso agora
fonte
Não considero o SQLite um banco de dados sério, se você estiver lidando com alguns GB de dados a cada hora. Fica dolorosamente lento e reduz o desempenho de todo o aplicativo. Desculpe, mas eu não concordo com o seu fascínio pelo SQLite :-)
fonte
O problema com os bancos de dados é que eles tendem a acumular mais e mais dados. A escolha de um banco de dados leve apresenta o risco de que sua ferramenta não seja dimensionada corretamente.
fonte