Por que o SQL não é tão difundido em grandes aplicativos de desktop?

28

Como desenvolvedor de software, trabalhei em projetos que variam de pequenos aplicativos caseiros a aplicativos corporativos de tamanho médio. Em quase todos os projetos, usei um banco de dados ou me arrependi de ter escolhido não usá-lo desde o início.

Agora, estou pensando em algumas coisas sobre os bancos de dados e seu uso em aplicativos gerais:

  • Por que o próprio Windows não usa nenhum banco de dados SQL "central"? Por exemplo:
    • Os dados do Relatório de erros são armazenados em vários arquivos,
    • O Windows Update armazena tudo em arquivos simples,
    • O cache de ícones é armazenado em um único arquivo muito estranho que não parece ser acessado através do SQL, etc.
  • Por que tantos aplicativos grandes evitam o uso de bancos de dados? Por exemplo, o Microsoft Outlook não obteria ganho usando um banco de dados real em vez de reinventar a roda, tendo seu próprio formato para arquivos .pst e armazenando alguns dados no registro?

Se o banco de dados adicionar uma camada adicional de complexidade geral e uma pequena perda de desempenho, é um preço de uma enorme vantagem de tornar o código mais simples na maioria das circunstâncias, especialmente quando se trata de armazenamento de pequenos pedaços de dados organizados em vez de grandes binários córregos. Então, por que tão poucos produtos estão realmente usando bancos de dados? Provavelmente, o único aplicativo que conheço que realmente usa o banco de dados Sqlite é o Firefox e talvez o Microsoft Exchange (mas o último não é um aplicativo de desktop)?

Além disso, um conjunto de aplicativos, como o Microsoft Office ou o Microsoft Expression, não se beneficiaria de ter um banco de dados SQL unificado , facilitando a implantação dos aplicativos, a atualização / atualização dos dados, o compartilhamento de dados entre esses aplicativos e a realização de backups etc.?

Arseni Mourzenko
fonte
4
Fale por sua própria plataforma. ;) Muitos aplicativos Mac / iPhone usam CoreData, que geralmente usa um banco de dados SQLite para armazenamento.
Mipadi
8
Bancos de dados também são apenas "um monte de arquivos". Eu diria que todos os exemplos que você apresentou são, na verdade, bancos de dados, mas não bancos de dados relacionais que podem ser consultados em SQL.
Allon Guralnek 5/11
8
Por banco de dados, ele significa banco de dados relacional.
Olivier Jacot-Descombes

Respostas:

20

1) Em geral, a sobrecarga de executar um RDBMS completo é muito grande e estaria adicionando carga desnecessária ao sistema e à complexidade.

A instalação de um deles facilita a sua vida como desenvolvedor, mas piora a vida do proprietário da máquina, pois é provável que a máquina funcione mais lentamente e com mais problemas. Nos confrontos entre desenvolvedor e usuário, o usuário quase sempre deve vencer.

2) Muitos armazenamentos de dados têm necessidades específicas que não são atendidas por algo como o SQL Server Express.

Por exemplo, os logs de erros devem ser gravados da maneira mais simples possível para maximizar a chance de a gravação ocorrer e os dados estarem disponíveis. O SQL Server nunca será tão simples.

Para aplicativos mais complexos, o argumento tende a ser mais otimizado para casos de usuários muito específicos - arquivos simples podem ser extremamente rápidos.

Jon Hopkins
fonte
5
Eu não acho que ele quis dizer o tipo de banco de dados em que você precisa instalar um servidor inteiro. O SQLite funciona sem um servidor e é difundido em aplicativos de código aberto.
laurent
@ Laurent - se não o fez, por que o marcou como a resposta aceita quando ele poderia ter aceitado a resposta do SQL Lite abaixo?
Jon Hopkins
30

Muitos aplicativos incorporam SQLite . Citando em seu site:

O SQLite é uma biblioteca de software que implementa um mecanismo de banco de dados transacional independente, sem servidor e com configuração zero. O SQLite é o mecanismo de banco de dados SQL mais amplamente implantado no mundo. O código fonte do SQLite está no domínio público. ".

Você apenas usa uma das APIs disponíveis, cria um banco de dados, tabelas, etc., e o mecanismo SQL armazena tudo em um arquivo binário que você pode colocar em qualquer lugar do sistema de arquivos do usuário. O melhor de tudo é o FLOSS.

Rafael Vega
fonte
23

O Windows é fornecido com e usa um mecanismo de banco de dados denominado ESE (Extensible Storage Engine) .

O ESE é usado pelo Active Directory, Exchange Server, Windows Mail e Desktop Search, entre muitos outros serviços e aplicativos do Windows.

Para desenvolvimento, existem wrappers ESE de código aberto:

Com o envio do ESE com todas as versões modernas do Windows, você não tem nenhum problema de implantação de banco de dados. Arquiteturalmente, o ESE desempenha um papel semelhante aos bancos de dados incorporados, como o SQLite.

Ed James
fonte
Talvez por uma falha na promoção desse recurso !! ?? Como é que eu desenvolvo quase exclusivamente com as tecnologias da Microsoft desde os anos 90 e nunca ouvi falar disso? A falta de um bom front-end pode ser outro motivo. Da Wikipedia: "Durante anos, era uma API privada usada apenas pela Microsoft, mas desde então se tornou uma API publicada que qualquer pessoa pode usar". Além disso: "A API JET Blue foi publicada em 2005 para facilitar o uso por um número cada vez maior de aplicativos e serviços dentro e fora do Windows".
Mike Suporta Monica
8

Os bancos de dados relacionais não são a estrutura de dados mais eficiente para todos os domínios. Muitos aplicativos de desktop usam bancos de dados incorporados, você não pode dizer prontamente que eles estão fazendo isso, se tudo o que você vê são alguns arquivos de dados.

Jeremy
fonte
Esse é o ponto: por que não usar o Microsoft SQL Server (Express? Ou uma licença especial para um único host local do SQL Server pré-instalado em todas as plataformas Windows?) Em vez de bancos de dados incorporados (não SQL?) Ou um formato binário extraterrestre próprio como o Microsoft Outlook ?
Arseni Mourzenko
Porque, como ele disse, o SQL não é ideal para tudo. Muitos armazenamentos de dados específicos de aplicativos serão altamente otimizados para uma tarefa e, como resultado, serão mais rápidos que o SQL, com uma área menor.
Jon Hopkins
3
@MainMa: Você acabou de adicionar uma dependência adicional: o usuário precisa ter o SQL Server instalado e em execução. Isso não é trivial. Se um host local do SQL Server especial tiver sido pré-instalado em todos os computadores Windows, pode ser diferente, mas isso não acontece.
David Thornley
O SQLServer Compact é fácil de instalar: basta copiar alguns arquivos.
MarkJ
7

Por que o próprio Windows não usa nenhum banco de dados SQL "central"?

Na verdade, essa idéia está em desenvolvimento na Microsoft há algum tempo. É chamado WinFS . É uma tecnologia intrigante e está disponível para assinantes do MSDN. Em alguns dias, vou instalá-lo em uma VM e brincar com ele.

Adam Crossland
fonte
2
Ainda me lembro do WinFS como a "próxima grande novidade" para o Windows (na época) Longhorn, quando ainda sabia usar um PC. :-)
Denis de Bernardy
6

Os bancos de dados oferecem flexibilidade e, como todos os recursos, há quase certamente um custo. Se um arquivo simples funcionar, você pode assumir que ninguém precisará consultar os dados de maneiras imprevistas, como em um relatório ad hoc.

Os bancos de dados também fazem um bom trabalho ao lidar com várias conexões / entradas. Novamente, se esse não é um requisito para o seu aplicativo para desktop, por que adicionar complexidade adicional? Além da interface do usuário / da instalação real do Outlook, quantos outros aplicativos ou usuários estão tentando gravar no arquivo do Outlook no seu computador?

Seria mais fácil se todos os dados estivessem em um banco de dados relacional a partir de uma perspectiva "Eu quero poder consultar todos os dados da maneira que achar melhor com uma única linguagem como SQL", mas isso raramente é uma prioridade em muitos aplicativos.

A maioria dos programadores analisará isso de:

  • Eu sei o que o aplicativo deve fazer, isso é tudo o que ele deve fazer

  • meu aplicativo é a única entidade que acessará e / ou manipulará esses dados

  • uma estrutura de arquivo simples do meu próprio design funcionará

  • para pelo menos um aplicativo, eu gostaria de evitar o código de outras pessoas e ter controle total.

JeffO
fonte
1
+1. Você está certo: não há várias conexões para aplicativos de desktop (na maioria dos casos), o que reduz o benefício de um banco de dados SQL.
Arseni Mourzenko 5/11/10