SQLite em um servidor de produção? [fechadas]

9

Eu conheço o SQLite há muito tempo e sei que ele está super rápido, mas nunca tentei em um servidor de produção. Nunca consegui encontrar uma estimativa sólida de quanto tráfego ele suportava antes de falhar.

Alguém tem algum número ou um artigo sobre isso?

Dr Hydralisk
fonte
2
Aviso: A pergunta e algumas das respostas contêm conceitos errôneos, mal-entendidos e informações desatualizadas!
Chris S
Nós temos vindo a avaliar SQLite como uma solução de cache na produção: uri.agassi.co.il/2014/10/using-sqlite-for-production.html
Uri Agassi

Respostas:

4

Infelizmente, não tenho dados para você sobre os recursos de carregamento, mas alguns comentários sobre alguns dos fatores de restrição de desempenho:

  • A velocidade do SQLite é afetada pela velocidade do disco em que ele está e se há muitas inserções / atualizações em andamento (por exemplo, acesso de gravação). O bloqueio de gravação é limitado pela velocidade de rotação do disco

  • Transações são iniciados por padrão, mas você obter um desempenho melhor se você começar e confirmar a transação. Eu tive inserções em massa muito rápidas ao manipular a transação programaticamente

  • Se você geralmente está apenas lendo dados, obtém um bom desempenho em minha experiência. Portanto, o SQLite pode ser usado como um sistema de armazenamento em cache para armazenar leituras do servidor de banco de dados, principalmente remotas ou consultas complexas.

  • Ele usa menos recursos que um servidor de banco de dados, portanto, isso pode afetar o desempenho do site, liberando mais recursos para o servidor da Web e o código do aplicativo

  • Se você precisar que várias gravações simultâneas sejam possíveis, um servidor de banco de dados (por exemplo, MySQL, Postgres) pode muito bem atendê-lo melhor

Como Devrim afirmou, o site SQLite afirma que cerca de 100 mil usuários / dia devem estar bem. Um sistema Trac requer gravações, portanto, o desempenho provavelmente seria mais lento nesse caso

Cez
fonte
Obrigado pelas respostas, então basicamente você só pode gravar no banco de dados 1 de cada vez? Mas você ainda pode ter várias pessoas lendo no banco de dados sem ficar bloqueado? Nesse caso, recebi apenas algumas idéias para um sistema de cache.
Dr Hydralisk
O número "100K" lançado é inútil. Os documentos diziam "De um modo geral, qualquer site que tenha menos de 100 mil hits / dia deve funcionar bem com o SQLite". Um "hit" é normalmente definido como uma solicitação HTTP. Isso inclui uma solicitação para cada .js, .css e imagem em uma ocorrência. O que isso tem a ver com o desempenho do banco de dados? Supondo que os autores significassem "exibição de página", ainda é inútil. Quantas consultas por visualização de página? Proporção de leituras para gravações? Em que tipo de hardware o DB está sendo executado? Não é uma boa ideia usar o SQLite para um site quando houver pelo menos uma dúzia de outras ferramentas melhores para o trabalho.
21710 Jamieb
@Dr Hydralisk Sim, lê pode ocorrer em paralelo .. apenas como um arquivo
Cez
@jamieb O ponto sobre "hits" é justo. Ninguém mencionou quais recursos de hardware ou servidor estão disponíveis, portanto, pode ser um pequeno servidor virtual para tudo o que sabemos. O envolvimento de bancos de dados SQLite em um sistema de armazenamento em cache ou principalmente de tabelas somente leitura pode oferecer benefícios de desempenho, principalmente quando o servidor de banco de dados é remoto. O cache de memória + o cache SQLite das consultas ao banco de dados superam as consultas do banco de dados sozinho.
Cez
3

Tenho alguns pontos a acrescentar a essas boas respostas.

A versão atual do SQLite possui WAL (Write-Ahead Logging) para que a leitura e gravação possam prosseguir simultaneamente. Portanto, a limitação tradicional de escritor único mencionada nas respostas anteriores não existe mais. Ainda não vi o WAL em produção, portanto não posso comentar o quão bem ele é dimensionado.

Usando o WAL ou não, se o seu banco de dados SQLite for somente leitura (ou for atualizado em lote) e se encaixar na RAM (seu sistema operacional possui RAM suficiente para mantê-lo em buffers), ele pode ser dimensionado muito bem em um aplicativo Web de produção. Pessoalmente, fiquei muito cético em relação a seu desempenho, escalabilidade e robustez, mas agora, após nove meses de produção, ele provou rodar até mesmo as partes mais complexas do sistema muito bem.

XDF
fonte
1

O Sqlite é ótimo para incorporar aplicativos, e é para isso que ele foi projetado, mas certamente não é "incrivelmente rápido". Eu o uso para vários de meus próprios aplicativos, apenas para a conveniência de ter apenas dois arquivos que podem ser copiados para outra máquina para fornecer um aplicativo totalmente funcional. Testes no MySQL, usando a mesma estrutura, índices, etc., mostram que o Sqlite é consideravelmente mais lento, mesmo para bancos de dados pequenos. Eu esperaria que a diferença de desempenho aumentasse à medida que o tamanho do banco de dados aumenta, embora eu não possa ter certeza, pois eu o usei apenas com bancos de dados com menos de 100 MB.

John Gardeniers
fonte
O PRAGMA pode ser ajustado para aumentar o desempenho às custas de corromper o banco de dados potencialmente ocasionalmente (embora não perca dados). Na minha experiência, eu poderia fazer com que o SQLite fizesse inserções a aproximadamente 250-300rps em uma máquina WindowsXP antiga.
djangofan
-1, porque eu não concordo. Criei e consultei bancos de dados SQLite de vários GB de tamanho e nunca receberia a mesma quantidade de consultas por segundo usando o MySQL, por exemplo (no mesmo tipo de hardware). O SQLite pode facilmente fazer consultas de gravação de 120 mil por segundo, se você souber como massagear corretamente .
Alix Axel
0

Eu acho que o sqlite é apenas mais rápido que um arquivo de texto / xml (você pode se surpreender se tiver tentado). E ele não suporta simultaneidade, se você deseja criar um site para intranet onde as pessoas registrem suas horas de trabalho ou usem bilhetes com rastreamento, isso pode servir bem. Fora isso, deve ser evitado e substituído pelo mysql ou couchdb.

O site sqlite diz que 100k usuários / dia devem estar bem, mas eu duvido muito, pois um projeto simples do trac fica muito preso com 10 ppl de uso em escritório.

Devrim
fonte
0

O sqlite não é um aplicativo de banco de dados cliente / servidor tradicional. É essencialmente uma biblioteca incorporada a outro aplicativo. Ele foi projetado para aplicativos de desktop de usuário único. Você absolutamente não deseja tentar usá-lo como algum tipo de substituição independente do MySQL / PostgreSQL / MS-SQL em um ambiente multiusuário, porque todo o banco de dados está bloqueado na gravação. Você estará lidando com problemas de contenção mesmo com uma carga leve que destruirá o desempenho.

jamieb
fonte
No WAL, apenas gravadores concorrentes são bloqueados. Além disso, o mecanismo MySQL padrão (MyISAM) também bloqueia tabelas completas sempre que houver uma consulta de gravação.
Alix Axel
1
@AlixAxel Esta resposta foi escrita seis meses antes de o WAL estar disponível.
jamieb