Quais são as práticas recomendadas para criar estruturas de banco de dados de arquivo simples em PHP?
Muitas estruturas de arquivo simples de PHP mais amadurecidas por aí, nas quais tento implementar sintaxe de consulta semelhante a SQL, que é exagerada para meus propósitos na maioria dos casos. (Eu usaria apenas um banco de dados nesse ponto).
Existe algum truque elegante para obter bom desempenho e recursos com uma pequena sobrecarga de código?
for loop
(a menos que esteja usando todos os dados da pasta), portanto, o desempenho é muito mais rápido do que um banco de dados. Eu entraria em detalhes e daria uma resposta muito boa, mas infelizmente esta questão está encerrada.Respostas:
Bem, qual é a natureza dos bancos de dados planos. Eles são grandes ou pequenos. São arrays simples com arrays neles? se for algo simples, diga perfis de usuário construídos como tal:
e para salvar ou atualizar o registro db desse usuário.
e carregar o registro para o usuário
mas, novamente, essa implementação irá variar de acordo com a aplicação e a natureza do banco de dados de que você precisa.
fonte
Você pode considerar o SQLite . É quase tão simples quanto arquivos simples, mas você obtém um mecanismo SQL para consultas. Também funciona bem com PHP .
fonte
Em minha opinião, usar um "Banco de Dados de Arquivo Simples" no sentido que você quer (e a resposta que você aceitou) não é necessariamente a melhor maneira de fazer as coisas. Em primeiro lugar, usar
serialize()
eunserialize()
pode causar grandes dores de cabeça se alguém entrar e editar o arquivo (eles podem, de fato, colocar código arbitrário em seu "banco de dados" para ser executado a cada vez.)Pessoalmente, eu diria - por que não olhar para o futuro? Muitas vezes eu tive problemas porque tenho criado meus próprios arquivos "proprietários" e o projeto explodiu a ponto de precisar de um banco de dados, e estou pensando "sabe, gostaria Para começar, escrevi isso para um banco de dados "- porque a refatoração do código exige muito tempo e esforço.
Com isso, aprendi que fazer uma revisão futura de meu aplicativo para que, quando ele ficar maior, eu não precise ficar dias refatorando, é o caminho a seguir. Como eu faço isso?
SQLite. Ele funciona como um banco de dados, usa SQL e é muito fácil de mudar para mySQL (especialmente se você estiver usando classes abstratas para manipulação de banco de dados como eu!)
Na verdade, especialmente com o método da "resposta aceita", ele pode reduzir drasticamente o uso de memória do seu aplicativo (você não precisa carregar todos os "RECORDS" no PHP)
fonte
serialize()
pode ser muito útil para isso também. Acho que o truque para criar um sistema viável é encontrar uma maneira de indexar os nós de dados sem se matar de complexidade.Uma estrutura que estou considerando seria para uma plataforma de blog. Como praticamente qualquer visualização possível de dados que você deseja seria classificada por data, eu estava pensando sobre esta estrutura:
Um diretório por nó de conteúdo:
Subdiretórios de cada nó, incluindo
Bem como arquivos de texto simples no diretório do nó para conteúdo pré e pós-renderizado e similares.
Isso permitiria uma
glob()
chamada simples de PHP (e provavelmente uma reversão da matriz de resultado) para consultar praticamente qualquer coisa dentro da estrutura do conteúdo:Retornaria caminhos incluindo todos os artigos marcados como "engraçados".
fonte
Este é o código que usamos para Lilina:
Ele armazena cada entrada como um arquivo separado, que descobrimos ser eficiente o suficiente para uso (nenhum dado desnecessário é carregado e é mais rápido para salvar).
fonte
Se você for usar um arquivo simples para persistir os dados, use XML para estruturar os dados. PHP possui um analisador XML embutido .
fonte
Se você quiser um resultado legível por humanos, também pode usar este tipo de arquivo:
Desta forma, você tem apenas um arquivo, pode depurá-lo (e consertar manualmente) facilmente, pode adicionar campos posteriormente (no final de cada linha) e o código PHP é simples (para cada linha, dividido de acordo com |).
No entanto, a desvantagem é que você deve analisar o arquivo inteiro para pesquisar algo (se você tiver milhões de entradas, não está tudo bem) e deve lidar com o separador de dados (por exemplo, se o nick for WaR | ordz).
fonte
Eu escrevi duas funções simples projetadas para armazenar dados em um arquivo. Você pode julgar por si mesmo se isso é útil neste caso. O objetivo é salvar uma variável php (se for um array, uma string ou um objeto) em um arquivo.
fonte
Este é inspirador como uma solução prática:
https://github.com/mhgolkar/FlatFire
Ele usa várias estratégias para lidar com dados ...
[Copiado do arquivo Leiame]
Livre ou estruturado ou misto
fonte
IMHO, você tem duas opções se quiser evitar algo caseiro:
SQLite
Se estiver familiarizado com o PDO, você pode instalar um driver PDO que suporte SQLite. Nunca usei, mas tenho usado uma tonelada de PDO com MySQL. Vou dar uma chance a um projeto atual.
XML
Feito isso muitas vezes para quantidades relativamente pequenas de dados. XMLReader é uma classe leve, com estilo de cursor para leitura. SimpleXML torna simples ler um documento XML em um objeto que você pode acessar como qualquer outra instância de classe.
fonte
Apenas apontando um problema potencial com um banco de dados de arquivo simples com este tipo de sistema:
... etc
O problema é que os dados da célula contêm um "|" ou um "\ n" então os dados serão perdidos. Às vezes, seria mais fácil dividir por combinações de letras que a maioria das pessoas não usaria.
Por exemplo:
Divisor de coluna:
#$% (Shift+345)
Divisor de linha:
^&* (Shift+678)
Arquivo de texto:
test data#$%blah blah#$%^&*new row#$%new row data 2
Então use:
explode("#$%", $data); use foreach, the explode again to separate columns
Ou qualquer coisa nesse sentido. Além disso, devo acrescentar que os bancos de dados de arquivo simples são bons para sistemas com pequenas quantidades de dados (ou seja, menos de 20 linhas), mas tornam-se grandes consumidores de memória para bancos de dados maiores.
fonte