Quelles sont les meilleures pratiques concernant la création de structures de base de données de fichiers plats en PHP?
Beaucoup de frameworks de fichiers plats PHP plus mûrs là-bas que j'essaie d'implémenter une syntaxe de requête de type SQL qui est au-dessus de mes besoins dans la plupart des cas. (Je voudrais simplement utiliser une base de données à ce stade).
Existe-t-il des astuces élégantes pour obtenir de bonnes performances et fonctionnalités avec une petite surcharge de code?
for loop
(sauf si j'utilise toutes les données du dossier), donc elles fonctionnent beaucoup plus rapidement qu'une base de données. Je voudrais entrer dans les détails et donner une très bonne réponse mais malheureusement cette question est close.Réponses:
Eh bien, quelle est la nature des bases de données plates. Sont-ils grands ou petits. S'agit-il de tableaux simples contenant des tableaux? si c'est quelque chose de simple, dites userprofiles construits comme tels:
et pour sauvegarder ou mettre à jour l' enregistrement de base de données pour cet utilisateur.
et pour charger l' enregistrement pour l'utilisateur
mais encore une fois, cette implémentation variera selon l'application et la nature de la base de données dont vous avez besoin.
la source
Vous pourriez envisager SQLite . C'est presque aussi simple que des fichiers plats, mais vous obtenez un moteur SQL pour les requêtes. Cela fonctionne aussi bien avec PHP .
la source
À mon avis, utiliser une "base de données de fichiers plats" dans le sens où vous l'entendez (et la réponse que vous avez acceptée) n'est pas forcément la meilleure façon de faire les choses. Tout d'abord, utiliser
serialize()
etunserialize()
peut causer des maux de tête MAJEURS si quelqu'un entre et modifie le fichier (ils peuvent, en fait, mettre du code arbitraire dans votre «base de données» à exécuter à chaque fois).Personnellement, je dirais - pourquoi ne pas regarder vers l'avenir? Il y a eu tellement de fois que j'ai eu des problèmes parce que j'ai créé mes propres fichiers "propriétaires", et le projet a explosé à un point où il a besoin d'une base de données, et je pense "vous savez, je souhaite J'avais écrit ceci pour une base de données pour commencer "- parce que la refactorisation du code prend beaucoup trop de temps et d'efforts.
De cela, j'ai appris que la pérennité de mon application afin que, lorsqu'elle s'agrandisse, je n'ai pas à passer des jours à la refactorisation est la voie à suivre. Comment puis-je faire cela?
SQLite. Il fonctionne comme une base de données, utilise SQL et est assez facile à passer à mySQL (surtout si vous utilisez des classes abstraites pour la manipulation de bases de données comme je le fais!)
En fait, en particulier avec la méthode de la "réponse acceptée", cela peut réduire considérablement l'utilisation de la mémoire de votre application (vous n'avez pas à charger tous les "RECORDS" dans PHP)
la source
serialize()
peut être très utile pour cela aussi. Je pense que le truc pour trouver un système viable est de trouver un moyen d'indexer les nœuds de données sans vous tuer avec la complexité.Un cadre que j'envisage serait celui d'une plateforme de blogs. Étant donné que presque toutes les vues possibles des données que vous souhaiteriez seraient triées par date, je pensais à cette structure:
Un répertoire par nœud de contenu:
Sous-répertoires de chaque nœud comprenant
Ainsi que de simples fichiers texte dans le répertoire de nœuds pour le contenu pré et post-rendu, etc.
Cela permettrait un simple
glob()
appel PHP (et probablement une inversion du tableau de résultats) pour interroger à peu près n'importe quoi dans la structure de contenu:Renvoyerait des chemins comprenant tous les articles étiquetés "drôle".
la source
Voici le code que nous utilisons pour Lilina:
Il stocke chaque entrée dans un fichier séparé, ce que nous avons trouvé suffisamment efficace pour être utilisé (aucune donnée inutile n'est chargée et il est plus rapide à enregistrer).
la source
Si vous comptez utiliser un fichier plat pour conserver les données, utilisez XML pour structurer les données. PHP a un analyseur XML intégré .
la source
Si vous souhaitez un résultat lisible par l'homme, vous pouvez également utiliser ce type de fichier:
De cette façon, vous n'avez qu'un seul fichier, vous pouvez le déboguer (et le corriger manuellement) facilement, vous pouvez ajouter des champs plus tard (à la fin de chaque ligne) et le code PHP est simple (pour chaque ligne, divisé selon |).
Cependant, l'inconvénient est que vous devez analyser le fichier entier pour rechercher quelque chose (si vous avez des millions d'entrées, ce n'est pas bien) et que vous devez gérer le séparateur dans les données (par exemple si le pseudo est WaR | ordz).
la source
J'ai écrit deux fonctions simples conçues pour stocker des données dans un fichier. Vous pouvez juger par vous-même si c'est utile dans ce cas. Le but est de sauvegarder une variable php (s'il s'agit d'un tableau, d'une chaîne ou d'un objet) dans un fichier.
la source
Celui-ci est une solution pratique inspirante:
https://github.com/mhgolkar/FlatFire
Il utilise plusieurs stratégies pour gérer les données ...
[Copié à partir du fichier Readme]
Libre ou structuré ou mixte
la source
IMHO, vous avez deux options si vous voulez éviter quelque chose de homebrewing:
SQLite
Si vous connaissez PDO, vous pouvez installer un pilote PDO prenant en charge SQLite. Je ne l'ai jamais utilisé, mais j'ai utilisé PDO une tonne avec MySQL. Je vais vous donner une chance sur un projet en cours.
XML
Fait cela plusieurs fois pour des quantités de données relativement petites. XMLReader est une classe légère de type curseur à lecture directe. SimpleXML simplifie la lecture d'un document XML dans un objet auquel vous pouvez accéder comme n'importe quelle autre instance de classe.
la source
Soulignant simplement un problème potentiel avec une base de données de fichiers plats avec ce type de système:
...etc
Le problème est que les données de la cellule contiennent un "|" ou un "\ n" alors les données seront perdues. Parfois, il serait plus facile de diviser par des combinaisons de lettres que la plupart des gens n'utiliseraient pas.
Par exemple:
Séparateur de colonnes:
#$% (Shift+345)
Séparateur de lignes:
^&* (Shift+678)
Fichier texte:
test data#$%blah blah#$%^&*new row#$%new row data 2
Puis utilisez:
explode("#$%", $data); use foreach, the explode again to separate columns
Ou quoi que ce soit de ce genre. Aussi, je pourrais ajouter que les bases de données de fichiers plats sont bonnes pour les systèmes avec de petites quantités de données (c'est-à-dire moins de 20 lignes), mais deviennent d'énormes porcs de mémoire pour les bases de données plus grandes.
la source