O SQLite não é um pouco subestimado? [fechadas]

15

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.


fonte
9
Desculpe, mas adicionando "Estou certo?" não transforma um discurso retórico em uma pergunta.
pdr 28/07
1
@pdr: Por que você considera isso um discurso retórico? Não estou julgando negativamente o MS-SQL ou outros bancos de dados; eles são principalmente todos os produtos finos. Estou apenas compartilhando meus pensamentos e estou interessado em ouvir as opiniões de outros colegas programadores. Nada mais nada menos.
3
Não há dúvida, apenas uma pesquisa para validação. No FAQ: "Você só deve fazer perguntas práticas e respondíveis com base nos problemas reais que você enfrenta. As perguntas abertas e tagarelas diminuem a utilidade do nosso site e expulsam outras perguntas da primeira página". programmers.stackexchange.com/faq
pdr
1
@pdr: Entendo isso, mas sinceramente pretendia fazer uma pergunta aqui. Talvez eu não estivesse claro, então refiz a pergunta.
4
Escolha de banco de dados, otimização de código, cliente, servidor ou aplicativo baseado na Web, todas essas são áreas de consideração e os prós e contras precisam ser discutidos em uma plataforma como esta. Para mim, um discurso retórico é mais quando alguém se recusa categoricamente a encontrar qualquer qualidade redentora em uma tecnologia específica.
JeffO 28/07

Respostas:

8

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.

JeffO
fonte
Você pode apresentar o mesmo argumento para o SQL Server Compact Edition, mas não para um banco de dados do MS Access. Os bancos de dados de acesso são tratados como se fossem um banco de dados real, mas funcionam mais como arquivos compartilhados. Eles são uma solução frágil; O SQL Server Compact é na verdade uma alternativa melhor, mais rápida e mais confiável que ainda funciona com os front-end do Access. Suspeito que o SQLite seja substancialmente mais durável que um banco de dados do Access, mesmo que seja tecnicamente uma solução de arquivo compartilhado.
Robert Harvey
@RobertHarvey - Temos demandas de negócios em que o MS Access é uma solução boa o suficiente (ou seja, melhor que o Excel) há 10 anos. Quando um grande acordo é feito, temos que ter algo em funcionamento. Usuários avançados com habilidades de acesso são muito mais fáceis de encontrar e alavancar. A funcionalidade deve estar presente em uma determinada data, mas temos a sorte de que escalabilidade, desempenho, crescimento de dados e segurança nunca foram um fator. Atualizando o Access, agora essa é uma história diferente.
JeffO 23/02
Não me interpretem mal; Eu acho que o Access é ótimo. Mas o SQL Server Compact seria meu requisito mínimo de back-end para qualquer novo aplicativo do Access em que os usuários compartilhem dados.
Robert Harvey
@ RobertHarvey - eu vou ter que olhar para isso. Obrigado
JeffO 23/02
12

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").

Jalayn
fonte
Eu olhei para o CE, mas de alguma forma parece que o SQLite é melhor / mais rápido / mais fácil. Não sei ao certo, não usei / testei o CE o suficiente para ter certeza.
5

Por exemplo: considere um aplicativo ERP com, digamos, 15 usuários. Por que o SQLite não pode ser usado para isso?

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.

Michael Borgwardt
fonte
Eu entendo e concordo. Mas, na minha profissão, realmente não tenho clientes que usem nossos produtos (padrão e personalizados, principalmente relacionados a ERP) com mais de 10 pessoas. Em média, são ainda 5-6 usuários. Vou reformular minha pergunta.
4
@ Marcus V: A pergunta é: se um cliente cresceu muito e descobre que o aplicativo que você criou se torna impossivelmente lento de usar, e você diz a eles o motivo é que o DBMS não pode lidar com tantos usuários, e eles perguntam " por que você não usou um DBMS melhor ", como você acha que a resposta" é difícil de instalar "seria recebida? Posso dizer qual seria minha reação: eu pensaria "isso é amador. Preciso encontrar alguém para escrever meu software".
Michael Borgwardt 28/07
Você está certo. Eu não acho que você quis dizer dessa maneira, mas posso garantir que não sou amador. Definitivamente usarei sistemas DBMS "reais" se a situação pedir. Nossos produtos são licenciados para vários usuários. Eu só desenvolveria usando SQLite se soubesse que o número de usuários é relativamente pequeno (<10-15). Se o cliente exceder um limite, o que em nossa base de clientes não acontecerá em breve, sempre podemos convertê-los de maneira relativamente rápida / simples em outro banco de dados. Isso não é ciência de foguetes;). Com base nas suas observações, reformulei a questão para torná-la mais clara.
O usuário que chora por ter superado o aplicativo provavelmente foi informado sobre as limitações do usuário, mas optou por seguir o caminho mais barato. Está tudo bem na configuração inicial, mas quão felizes eles ficarão quando você precisar cobrar outra taxa para instalar no novo servidor, quando eles poderiam ter copiado um arquivo?
JeffO 28/07
1
@ Jeff O: Acho que você não entendeu minhas intenções. Estou não escolher SQLite porque é grátis, barato e / ou fácil de instalar. Eu escolheria apenas porque é pequeno, rápido e fácil de usar. Portanto, é principalmente por razões práticas / técnicas. Muitos de nossos clientes não gastam muito em hardware, então, muitas vezes, encontro um único servidor com tudo nele (Exchange, SQL, 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, o MSSQL adiciona.
4

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

Homde
fonte
2
Você está certo. O MS-SQL Express é um produto de excelente qualidade. É que acho isso um pouco inchado e usando muitos recursos. Atualmente, PCs / servidores não são um problema. Eu sou apenas uma pessoa da velha escola que ainda pensa que um hardware mais poderoso não significa que devo negligenciar / desperdiçar recursos, se puder evitá-lo. Menos, melhor ...;).
2
o banco de dados com mecanismos de banco de dados pode otimizar o acesso armazenando em cache a memória em vez de ler / gravar em discos. Mas eu não estou certo sobre o desempenho para o DB em processo como SQL Lite
sarat
1
@sarat: O Afaik SQLite usa caches de memória intensivamente.
2

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 :-)

Nerd
fonte
1
Eu respeito sua opinião. Eu sou apenas um homem prático. Quando escolho uma ferramenta, escolho-a porque acho que é a decisão mais realista / prática. Não sou fascinado pelo SQLite, mas admiro a maneira como eles conseguiram colocar tanto em um pacote tão pequeno, eficiente e rápido. Como mencionei na minha pergunta: se o MS-SQL é uma ferramenta melhor para um trabalho específico, eu simplesmente escolheria isso. Mas, como expliquei, em muitas ocasiões realmente acredito que o SQLite se encaixa perfeitamente.
Essa quantidade de uso de dados é muito importante.
28411 JeffO
@ Jeff O: Certo. Eu escolheria o SQLite apenas se o número de usuários for relativamente baixo (<10-15) e também a quantidade total de dados não for alta. De acordo com nossa experiência, o tamanho total do banco de dados geralmente é de 300 a 400 MB e quase nunca é superior a 1 GB.
1

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.

quant_dev
fonte