Estou desenvolvendo uma pequena ferramenta que exigiria algum tipo de arquivo de configuração. O arquivo de configuração no meu caso é realmente mais um banco de dados, mas precisa ser leve e, se necessário, o usuário final deve encontrá-lo facilmente editável. No entanto, também conterá muitas coisas nele. (dependendo de certos fatores, pode ser de 1Mb ou mais)
Decidi que preferiria usar texto simples, em vez de tentar usar SQLite ou algo parecido. No entanto, com o uso de texto, eu também tenho que lidar com a variedade de formatos. Até agora, minhas opções são
- XML
- JSON
- Formato personalizado
Os dados no meu arquivo são bastante simples, consistindo na maior parte das coisas do tipo valor-chave. Portanto, um formato personalizado não seria tão difícil ... mas prefiro não ter que me preocupar em escrever o suporte para ele. Eu nunca vi o JSON usado para arquivos de configuração. E XML aumentaria substancialmente o tamanho do arquivo, eu acho. (Eu também apenas não gosto de XML em geral).
O que devo fazer neste caso?
Fatores a serem considerados:
- Esse arquivo de configuração pode ser carregado em um serviço da Web (o tamanho é importante)
- Os usuários devem poder editá-lo manualmente, se necessário (facilidade de edição e leitura)
- Deve ser capaz de gerar e processar automaticamente (a velocidade não importa muito, mas não é excessivamente lenta)
- As "chaves" e "valores" são cadeias simples, mas precisam ser escapadas porque podem conter qualquer coisa. (Unicode e escape precisam funcionar facilmente)
- Vários arquivos de configuração. Basicamente, cada arquivo de configuração está vinculado a um "projeto"
and if needed the end-user should find it easily editable. However, it also will contain a lot of things in it. (depending on certain factors, could be 1Mb or more)
. Você não pode comer seu bolo. Arquivos de 1 MB, por definição, não são facilmente editáveis. Ou é um banco de dados (mesmo que pequeno), e o SQL-lite é uma boa opção ou é um arquivo de configuração (você não deve ter 1 MB de configuração).