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.?
Respostas:
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.
fonte
Muitos aplicativos incorporam SQLite . Citando em seu site:
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte