Arquivos de texto sem formatação em um sistema de arquivos
- Muito simples de criar e editar
- Fácil para os usuários manipularem com ferramentas simples (por exemplo, editores de texto, grep etc.)
- Armazenamento eficiente de documentos binários
Arquivos XML ou JSON no disco
- Como acima, mas com um pouco mais de capacidade de validar a estrutura.
Arquivo de planilha / CSV
- Modelo muito fácil para os usuários de negócios entenderem
Subversion (ou sistema de controle de versão baseado em disco semelhante)
- Muito bom suporte para controle de versão de dados
Berkeley DB (Basicamente, uma hashtable baseada em disco)
- Conceitualmente muito simples (apenas chave / valor não digitado)
- Bem rápido
- Nenhuma sobrecarga de administração
- Suporta transações que acredito
DB Simples da Amazon
- Bem como Berkeley DB, acredito, mas hospedado
Armazenamento de dados do Google App Engine
- Hospedado e altamente escalável
- Armazenamento de valor-chave por documento (isto é, modelo de dados flexível)
CouchDB
- Foco no documento
- Armazenamento simples de dados semiestruturados / baseados em documentos
Coleções de idiomas nativos (armazenadas na memória ou serializadas em disco)
- Integração de idioma muito rígida
Mecanismo de armazenamento personalizado (escrito à mão)
- Desempenho potencialmente muito alto nos casos de uso necessários
Não posso afirmar que sei muita coisa sobre eles, mas você também pode gostar de examinar os sistemas de banco de dados de objetos .
A resposta de Matt Sheppard é ótima (mod up), mas eu levaria em conta esses fatores ao pensar em um eixo-árvore:
Uma vantagem particular dos arquivos CSV sobre os RDBMSes é que eles podem ser fáceis de condensar e mover-se para praticamente qualquer outra máquina. Fazemos grandes transferências de dados, e tudo é simples o suficiente, apenas usamos um arquivo CSV grande e fácil de script usando ferramentas como rsync. Para reduzir a repetição em grandes arquivos CSV, você pode usar algo como YAML . Não tenho certeza se armazenaria algo como JSON ou XML, a menos que você tenha requisitos significativos de relacionamento.
Quanto às alternativas não mencionadas, não desconsidere o Hadoop , que é uma implementação de código aberto do MapReduce. Isso deve funcionar bem se você tiver uma tonelada de dados fracamente estruturados que precisam ser analisados e desejar estar em um cenário em que pode adicionar apenas mais 10 máquinas para lidar com o processamento de dados.
Por exemplo, comecei a tentar analisar o desempenho que era essencialmente todo o número de temporizações de diferentes funções registradas em torno de 20 máquinas. Depois de tentar colar tudo em um RDBMS, percebi que realmente não preciso consultar os dados novamente depois de agregá-los. E, só é útil em seu formato agregado para mim. Portanto, mantenho os arquivos de log por aí, compactados e deixo os dados agregados em um banco de dados.
Note que estou mais acostumado a pensar em tamanhos "grandes".
fonte
O sistema de arquivos é útil para armazenar dados binários, que nunca funcionam surpreendentemente bem em bancos de dados relacionais.
fonte
Experimente o Prevayler: http://www.prevayler.org/wiki/ O Prevayler é uma alternativa ao RDBMS. No site tem mais informações.
fonte
Se você não precisar de ACID , provavelmente não precisará da sobrecarga de um RDBMS. Portanto, determine se você precisa disso primeiro. A maioria das respostas não RDBMS fornecidas aqui não fornece ACID.
fonte
http://www.hdfgroup.org/
Se você tiver enormes conjuntos de dados, em vez de criar seus próprios, poderá usar o HDF, o Hierarchical Data Format.
http://en.wikipedia.org/wiki/Hierarchical_Data_Format :
Também é hierárquico como um sistema de arquivos, mas os dados são armazenados em um arquivo binário mágico.
Pense em petabytes de dados de sensoriamento remoto da NASA / JPL.
fonte
G'day,
Um caso em que consigo pensar é quando os dados que você está modelando não podem ser facilmente representados em um banco de dados relacional.
Uma vez que esse exemplo é o banco de dados usado pelas operadoras de telefonia móvel para monitorar e controlar estações base para redes de telefonia móvel.
Em quase todos esses casos, é utilizado um banco de dados OO , seja um produto comercial ou um sistema de rolagem automática que permite hierarquias de objetos.
Trabalhei em um aplicativo de monitoramento 3G para uma grande empresa que permanecerá sem nome, mas cujo logotipo é uma mancha de vinho tinto (-:, e eles usaram esse OO DB para acompanhar todos os vários atributos de células individuais dentro do rede.
A interrogação desses DBs é feita usando técnicas proprietárias que são, geralmente, completamente livres de SQL.
HTH.
Felicidades,
Roubar
fonte
Os bancos de dados de objetos não são relacionais. Eles podem ser realmente úteis se você quiser colocar alguns objetos em um banco de dados. Eles também suportam controle de versão e modificam classes para objetos que já existem no banco de dados. O db4o é o primeiro que vem à mente.
fonte
Em alguns casos (dados do mercado financeiro e controle de processos, por exemplo), pode ser necessário usar um banco de dados em tempo real em vez de um RDBMS. Veja o link wiki
fonte
Havia uma ferramenta RAD chamada JADE escrita há alguns anos atrás que possui um OODBMS embutido. As primeiras encarnações do mecanismo DB também suportaram o Digitalk Smalltalk. Se você deseja provar a criação de aplicativos usando um paradigma não RDBMS, isso pode ser um começo.
Outros produtos OODBMS incluem Objetividade , GemStone (você precisará que o VisualWorks Smalltalk execute a versão Smalltalk, mas também há uma versão java). Havia também alguns projetos de pesquisa de código aberto nesse espaço - EXODUS e seu descendente SHORE vêm à mente.
Infelizmente, o conceito pareceu morrer, provavelmente devido à falta de um padrão claramente visível e à capacidade de consulta ad-hoc relativamente baixa em relação aos sistemas RDMBS baseados em SQL.
Um OODBMS é mais adequado para aplicativos com estruturas de dados principais que são melhor representadas como um gráfico de nós interconectados. Eu costumava dizer que o aplicativo OODBMS por excelência era um MUD (Multi-User Dungeon), onde as salas continham avatares dos jogadores e outros objetos.
fonte
Você pode percorrer um longo caminho usando apenas os arquivos armazenados no sistema de arquivos. Os RDBMSs estão melhorando no tratamento de blobs, mas essa pode ser uma maneira natural de lidar com dados de imagem e similares, principalmente se as consultas forem simples (enumerar e selecionar itens individuais).
Outras coisas que não se encaixam muito bem em um RDBMS são estruturas hierárquicas de dados e acho que dados geoespaciais e modelos 3D também não são fáceis de trabalhar.
Serviços como o Amazon S3 fornecem modelos de armazenamento mais simples (chave-> valor) que não suportam SQL. Escalabilidade é a chave lá.
Os arquivos do Excel também podem ser úteis, principalmente se os usuários precisarem manipular os dados em um ambiente familiar e criar um aplicativo completo para fazer isso não é viável.
fonte
Existem várias maneiras de armazenar dados - até mesmo o "banco de dados relacional" abrange uma variedade de alternativas de uma simples biblioteca de código que manipula um arquivo (ou arquivos) local como se fosse um banco de dados relacional com base em um único usuário, por meio de sistemas baseados em arquivos que podem lidar com vários usuários a uma seleção generosa de sistemas baseados em "servidores" sérios.
Usamos muito arquivos XML - você obtém dados bem estruturados, boas ferramentas para consultar a mesma capacidade de fazer edições, se apropriado, algo legível por humanos e você não precisa se preocupar com o funcionamento do mecanismo db (ou com o funcionamento do motor db). Isso funciona bem para coisas que são essencialmente somente leitura (no nosso caso, mais frequentemente do que não são geradas a partir de um banco de dados em outro lugar) e também para sistemas de usuário único onde você pode simplesmente carregar os dados e salvá-los conforme necessário - mas você está criando oportunidades para problemas, se você quiser editar vários usuários - pelo menos um arquivo.
Para nós, é isso: vamos usar algo que fará o SQL (a MS oferece um conjunto de ferramentas que são executadas em um .DLL para fazer coisas de usuário único até o servidor corporativo e todos falam o mesmo SQL (com limitações na extremidade inferior)) ou usaremos XML como um formato porque (para nós) a verbosidade raramente é um problema.
No momento, não precisamos manipular dados binários em nossos aplicativos para que essa pergunta não surja.
Murph
fonte
Pode-se considerar o uso de um servidor LDAP no lugar de um banco de dados SQL tradicional se os dados do aplicativo forem fortemente orientados para chave / valor e de natureza hierárquica.
fonte
Os arquivos BTree geralmente são muito mais rápidos que os bancos de dados relacionais. O SQLite contém dentro de si uma biblioteca BTree que é de domínio público (como genuinamente 'domínio público', sem usar o termo livremente).
Francamente, se eu quisesse um sistema multiusuário, precisaria de muita persuasão para não usar um banco de dados relacional decente do servidor.
fonte
Bancos de dados de texto completo, que podem ser consultados com operadores de proximidade, como "dentro de 10 palavras de" etc.
Os bancos de dados relacionais são uma ferramenta comercial ideal para muitos propósitos - fácil de entender e projetar, rápido o suficiente, adequado mesmo quando não são projetados e otimizados por um gênio que poderia "usar toda a energia" etc.
Mas algumas finalidades de negócios exigem indexação de texto completo, que os mecanismos relacionais não fornecem ou aderem posteriormente. Em particular, os campos jurídico e médico têm grandes quantidades de texto não estruturado para armazenar e percorrer.
fonte
Além disso: * Cenários incorporados - Onde geralmente é necessário usar algo menor que um RDBMS completo. O Db4o é um ODB que pode ser facilmente usado nesse caso. Desenvolvimento rápido ou de prova de conceito - onde você deseja se concentrar nos negócios e não se preocupar com a camada de persistência
fonte
O teorema do CAP explica sucintamente. O SQL fornece principalmente "Consistência forte: todos os clientes veem a mesma exibição, mesmo na presença de atualizações".
fonte
BEIJO: Mantenha-o pequeno e simples
fonte
Eu ofereceria RDBMS :) Se você não costuma ter problemas com a configuração / administração, vá para o SQLite. RDBMS integrado com suporte completo a SQL. Ele ainda permite que você armazene qualquer tipo de dados em qualquer coluna.
Principal vantagem em relação a, por exemplo, arquivo de log: se você possui um enorme, como vai pesquisá-lo? Com o mecanismo SQL, você apenas cria um índice e acelera a operação dramaticamente.
Sobre a pesquisa de texto completo: o SQLite também possui módulos para pesquisa de texto completo.
Apenas aproveite a interface padrão agradável para seus dados :)
fonte
Um bom motivo para não usar um banco de dados relacional seria quando você tem um conjunto de dados massivo e deseja fazer um processamento massivamente paralelo e distribuído nos dados. O índice da web do Google seria um exemplo perfeito de tal caso.
O Hadoop também possui uma implementação do Sistema de arquivos do Google, denominada Sistema de arquivos distribuídos do Hadoop .
fonte
Eu recomendaria fortemente o Lua como uma alternativa ao armazenamento de dados do tipo SQLite.
Porque:
Esta é a opção "coleção de idioma nativo" da resposta aceita. Se você estiver usando C / C ++ como o nível do aplicativo, é perfeitamente razoável ativar o mecanismo Lua (100kB de binário) apenas para ler as configurações / dados ou gravá-las.
fonte