Pergunta

Atualmente estou bastante curioso em saber como outros programadores organizar dados em arquivos. Alguém pode recomendar quaisquer artigos de boa ou livros sobre as melhores práticas para a criação de estruturas de arquivo?

Por exemplo, se você criou seu próprio pedaço de software para qualquer propósito, não é deixar os dados guardados como texto simples, serializá-lo, codificar para xml, e por que você faz isso?

Há algum segredo que eu perdi?

Foi útil?

Solução

Geralmente, ir com a coisa mais simples que pode funcionar, pelo menos no início. Considere, por exemplo, UNIX, onde a maioria dos arquivos de configuração são nada além de campos delimitados por whitepace, ou campos delimitados com outro personagem (como / etc / passwd, que usa ":". Delimitadores porque o campo GCOS pode conter espaços em branco)

Se os dados precisa de muito mais estrutura, em seguida, perguntar-se "o que as ferramentas que eu possa usar com facilidade?" Python e Ruby têm JSON e YAML, por exemplo.

XML é basicamente útil se você tem um monte de coisas com base em XML já, OU você espera para transformar o XML para uma forma displayable em um navegador. Caso contrário, é geralmente muito pesado (tamanho do código, complexidade) para o que você ganha com isso.

Outras dicas

Não importa qual o formato que você escolher lembre-se de guardar algum tipo de número da versão dentro (eu tenho certeza que você vai ter que introduzir algumas alterações).

Format depende muito da aplicação e quantidade de dados. Para algumas aplicações XML é apropriado, para outras aplicações fixas estruturas tamanho armazenado em um arquivo binário são boas.

Eu uso muitos formatos diferentes, dependendo da situação, por exemplo:

  • arquivo de texto simples (delimitado) para armazenar conjuntos de dados para Matlab e análises R
  • arquivos binários - para armazenar estruturas de tamanho fixo (com dinâmica dimensionado o acesso aleatório fica difícil sem a manutenção de uma matriz separada de compensações para os elementos). Um dos aspectos positivos que você tem eficiência de desempenho e espaço (por que a maioria dos bancos de dados armazenam dados em formato binário?), Mas não é muito bom para os seres humanos para trabalhar. Lembre-se do endianess.
  • XML - geralmente para dados de configuração, ou dados que eu quero dar a outras aplicações de usuários (juntamente com XSD). O outro lado pode escrever transformação agradável XSLT ou consumir os dados em outra forma (é claro que eles poderiam fazer o mesmo com texto simples ou dados binários, dada a descrição do formato)

A menos que você tem necessidades específicas, uso algo para o qual já existe uma biblioteca madura, assim você pode evitar escrever o seu próprio código de análise. Isso significa XML / JSON, etc, como as pessoas têm dito.

Um outro bom é buffers de protocolo do Google ( http://code.google.com/p/ Protobuf ). Lá você escrever uma definição de mensagem comum e o compilador buffer de protocolo gera objetos para o preenchimento, a serialização e desserialização os dados para você. Normalmente, o formato é binário, mas você pode usar sua classe TextFormat para escrever JSON-como texto simples também. A coisa agradável sobre protobufs é que o código de versão é gerado para você. Na versão 2 do seu formato de arquivo, tudo que você tem a fazer é adicionar campos para o arquivo de definição .proto. A nova versão pode ler o formato de arquivo de idade, e só deixa o novo campos em branco. Não é exatamente o que protobufs foram projetados para, mas eles fazem um eficiente formato de arquivo fácil, binária para mensagens personalizadas, eo código é gerado para você.

Veja também do Facebook Thrift , agora na incubadora Apache.

À medida que os anos passaram, eu me encontrei mais e mais favorecendo texto que não é simplesmente fora de questão. da CPU são rápidos o suficiente agora que podemos decodificá-lo rápido o suficiente.

Obviamente, quando você tem que atualizar freqüentemente pequenos pedaços de informações dentro de um grande arquivo que esta não é uma opção -., Mas que provavelmente descreve um banco de dados

Seria preciso uma situação incomum neste momento para me fazer ir com algo diferente de uma destas duas opções.

+1 para XML. Tem uma sobrecarga pouco pouco, mas fácil de analisar, ler e depurar. Pode ser rigoroso, se você estiver usando um esquema. Fácil de transformar com XSLT, e muito portátil (em fio ou apenas em um pendrive:)

Isso realmente depende da situação particular. Você precisa considerar suas opções contra as respostas a várias perguntas:

  • A quantidade de dados que você precisa para armazenar? Você precisa otimizar para representação compacta?
  • é o desempenho de lê / escreve crítica? Você precisa otimizar para acesso ao disco e serialização de baixo impacto e deserialisation?
  • Você precisa de acesso aleatório dentro do arquivo? Você precisa otimizar a estrutura para a busca dentro dos dados?
  • É este dados vai ser usado em vários sistemas diferentes, possivelmente com diferentes codificações de caracteres? Você precisa otimizar para portabilidade?

A natureza dos dados em si terá um impacto. É uma estrutura de lista plana? É uma árvore? É um gráfico cíclica? São os registros de larguras fixas ou variáveis?

Uma vez que as respostas a estas perguntas são conhecidos, você pode selecionar entre as opções, mantendo-o mais simples possível. Muitas vezes, as opções populares (XML, CSV, YAML) vai atender às suas finalidades. Se não, então você terá que desenvolver sua própria formatação e sua própria escrita e procedimentos de leitura.

Existem muitas possibilidades, mas o mais pragmática tem que ser XML

  • Existem bibliotecas XML decentes para quase todas as plataformas de desenvolvimento
  • A maioria das plataformas permitem a serialização de objeto gráfico com um par de linhas de código, por isso XML é indolor para implementar
  • A maioria das plataformas têm uma memória e / ou streaming de leitor, para que possa lidar com arquivos muito grandes sem o uso de memória muito
  • A maioria plataforma de fornecer uma tranformer XSLT, para que possa mover arquivos de um formato para outro, mesmo a partir de XML para não XML
  • Não está indexando extensão para XML para lidar com arquivos muito grandes demais
  • XML tem XSD de validar o formato antes de tentar lê-lo
  • XML é capaz de representar qualquer simples ou objeto complexo
  • Se você está preocupado com o tamanho do arquivo, apenas zip o XML final. Esta técnica é usada no Microsoft Office etc
  • XML ainda é legível
  • XML é um padrão comum
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top