E ai, silvestrini
!
Beleza ?
Na sua opinião o que de fato ele está perdendo em utilizar o SQLite nessa situação ? É uma pergunta honesta, tenho zero conhecimento...
Falando de maneira geral, primeiro a gente tem que definir o que seria "colocar em produção". Pois no meu entendimento, este termo significa que o produto/sistema/aplicativo foi lançado e está sendo efetivamente utilizado pelos usuários/clientes.
E nesse sentido, o SQLite é um dos softwares mais usados - senão o mais usado - do mundo em ambiente de produção, se considerarmos a quantidade de instâncias ativas. Afinal, só no seu computador e celular estão instalados vários programas que usam o SQLite de alguma forma. A lista de sistemas e programas usando-o em produção é enorme (esta lista parcial dá uma ideia de que não é só "peixe pequeno" que usa).
Ou seja, o SQLite está em produção e muito bem, com bilhões (talvez trilhões) de instâncias ativas. Por isso dizer que ele é "fraco para colocar em produção" eu acho bem equivocado, pois na verdade depende muito da situação. Tem casos em que ele funciona e atende muito bem a demanda, e casos em que outros bancos atendem melhor.
Sobre o caso específico do post, pela breve descrição parece que haverá múltiplas escritas simultâneas e muitos acessos vindos de clients diferentes a um servidor único, e neste cenário o SQLite não se sai bem. E isso não é demérito: toda tecnologia tem casos em que ela atende bem e outros nos quais ela não é a melhor opção.
Acho que o problema é que a maioria das pessoas costuma considerar apenas sistemas web distribuídos, e aí realmente existem outros bancos de dados que podem se encaixar melhor nestes cenários.
Mas isso não quer dizer que o SQLite é "fraquinho" ou não sirva pra web. No próprio site deles diz o seguinte (em tradução livre):
O SQLite funciona bem como banco de dados para sites com tráfego pequeno e médio (que é a maioria dos sites). O tráfego que ele suporta depende muito de como o site usa o banco. De forma geral, qualquer site que tenha menos de 100 mil acessos por dia funcionará bem com SQLite. E este número é uma estimativa conservadora, não um limite. O SQLite já mostrou que consegue lidar com tráfego 10 vezes maior que isso.
O próprio site do SQLite (https://www.sqlite.org) usa SQLite, claro, e atualmente (2015) suporta entre 400 e 500 mil requests HTTP por dia, dos quais cerca de 15% a 20% são páginas dinâmicas que são consultadas no banco. Este conteúdo dinâmico usa cerca de 200 instruções SQL por página. Esta configuração roda em uma única máquina virtual que compartilha um servidor físico com outras 23, e ainda sim mantém uma carga média de 0.1 na maior parte do tempo.
Claro que o site do SQLite não parece fazer uso extensivo do banco, e os acessos são todos (ou a grande maioria) de leitura. E obviamente que eles vão tentar vender o próprio peixe. Mas a questão não é ser "fraquinho", e sim ser o resultado de várias decisões de design para que ele atinja sua proposta, que inclusive é citada no mesmo link indicado acima:
O SQLite não pode ser comparado com engines de bancos de dados cliente/servidor como MySQL, Oracle, PostgreSQL ou SQL Server, porque o SQLite está tentando resolver problemas diferentes.
Então não é questão de ser "fraco", apenas de seguir uma abordagem diferente a fim de atacar problemas que os bancos "tradicionais" não conseguem resolver tão bem quanto ele.
E nesses tipos específicos de problema que o SQLite quer atacar, ele serve muito bem para colocar em produção. Tudo depende do que vc precisa, e claro que ele não vai servir para todos os casos. Inclusive, no link já citado tem uma lista bem extensa de situações em que ele pode ser usado sem problemas, e casos em que outros bancos de dados se saem melhor.
O problema é que - pelo menos essa é minha impressão - as pessoas geralmente pensam em sistemas web distribuídos, com muitos clients acessando o banco através de rede, escritas simultâneas, etc (situação na qual o SQLite realmente não é a melhor opção). E aí generalizam para "SQLite é fraco", "não serve pra produção", etc.
Se velocidade, confiabilidade e segurança importar para o seu projeto, então sim, está perdendo. Por que?
1 - (Velocidade/Performance) - Eu utilizo Laravel para meus projetos, o padrão dele é SQLite, pois é muito fácil, não precisa instalar nada demais, então para iniciantes é ótimo. Você só instala uma extensão para ler o arquivo no VS Code e já era.
Porém, nem tudo são flores. Quando se roda as migrations para criar as tabelas e popular o banco de dados com dados fake, aí que você percebe o abismo de velocidade que tem entre SQLite e PostgreSQL, por exemplo, o primeiro sendo o mais lento e o segundo o mais rápido. E o MySQL fica no meio do caminho. O Artisan mostra o tempo que levou para cada coisa. Como o exemplo na imagem abaixo. E isso impacta o seu sistema como um todo, todas as queries são mais lentas.
2 - (Confiabilidade) - Um banco de dados SQLite, nada mais é que apenas um arquivo com a extensão .sqlite, que é guardado em qualquer lugar, geralmente na pasta do projeto, pois não suporta multiplos databases no mesmo arquivo. Cada arquivo se refere apenas a um banco de dados. Como é um arquivo que pode ser salvo em qualquer lugar, há a possibilidade, por exemplo, de se corromper mais fácil, ou ter algum problema com permissões e você não conseguir utilizá-lo.
3 - (Segurança) - Aqui é um pouco indiscutível, pois é o que define que o SQLite realmente não seja utilizado em produção, a não ser em casos muitos específicos, como app mobile. No SQLite não se tem controle de usuários, permissões, controle de hosts que podem acessar, como existe no MySQL e no PostgreSQL (que ainda tem o pg_hba para configurar ips liberados). Qualquer um pode acessar o seu banco e ver todas as informações nele contidas, o que não é nada interessante.
Ou seja, em geral, SQLite deve ser utilizado somente para desenvolvimento, pois peca nos aspectos por mim citados acima. Claro que essa é uma visão pessoal, mas fica a reflexão desses pontos. Mesmo em desenvolvimento, dificilmente utilizo SQLite, pois para mim, a performance importa muito.