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.