132 votes

Bases de données de fichiers plats

Quelles sont vos meilleures pratiques concernant la création de structures de base de données de fichiers plats en PHP? Un grand nombre des frameworks de fichiers plats PHP les plus matures que je vois essaient d'implémenter une syntaxe de requête semblable à celle de SQL, ce qui est super pour mes besoins dans la plupart des cas (j'utiliserais simplement une base de données à ce moment-là).

Existe-t-il des astuces élégantes pour obtenir de bonnes performances et des fonctionnalités avec la petite surcharge de code que l'on souhaiterait en s'attaquant à ce problème?

81voto

w-ll Points 1515

Eh bien, quelle est la nature des bases de données à plat. Sont-ils grands ou petits? Est-ce des tableaux simples avec des tableaux en eux? si quelque chose de simple dit userprofiles construit comme tel:

 $user = array("name" => "dubayou", 
              "age" => 20,
              "websites" => array("dubayou.com","willwharton.com","codecream.com"),
              "and_one" => "more");
 

et pour enregistrer ou mettre à jour l' enregistrement de base de données pour cet utilisateur.

 $dir = "../userdata/";  //make sure to put it bellow what the server can reach.
file_put_contents($dir.$user['name'],serialize($user));
 

et charger l' enregistrement pour l'utilisateur

 function &get_user($name){
    return unserialize(file_get_contents("../userdata/".$name));
}
 

mais encore une fois, cette implémentation variera en fonction de l’application et de la nature de la base de données dont vous avez besoin.

51voto

yukondude Points 8756

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 .

23voto

Mez Points 9744

À mon avis, à l'aide d'un "Plat de Fichier de Base de données" dans le sens que vous êtes de sens (et de la réponse que vous avez accepté) n'est pas nécessairement la meilleure façon d'aborder les choses. Tout d'abord, à l'aide de serialize() et unserialize() peut causer d'énormes maux de tête si quelqu'un est dans et édite le fichier (ils peuvent, en effet, mettre arbritrary code dans votre "base de données" pour être exécuté à chaque fois.)

Personnellement, je dirais, pourquoi ne pas regarder vers l'avenir? Il y a eu de nombreuses fois que j'ai eu des problèmes parce que j'ai été la création de mon propre "propriétaire" des fichiers, et le projet a explosé à un point où il a besoin d'une base de données, et je me dis, "vous savez, je souhaite que j'avais écrit ceci pour une base de données pour commencer avec" - parce que le refactoring du code prend beaucoup trop de temps et d'effort.

À partir de ce que j'ai appris que la future proofing mon application, de sorte que quand il est plus grand je n'ai pas à aller passer des jours refactoring est la manière d'aller de l'avant. Comment dois-je faire?

SQLite. Il fonctionne comme une base de données, SQL, et il est assez facile de passer à mySQL (espescially si vous utilisez une abstraction de classes pour la manipulation de base de données comme je le fais!)

En fait, espescially avec le "accepté de répondre à"la méthode, il peut réduire considérablement l'utilisation de la mémoire de votre application (vous n'avez pas à charger tous les "RECORDS" en PHP)

18voto

Kevin Points 6567

Une façon de stocker le contenu d'un fichier plat serait de sauvegarder des tableaux littéraux en fichiers php. Par exemple:

 $data = array();

if( $_POST ) {
    $data = $_POST;

    $content = "<?php\n";
    $content .= '$data=' . var_export($data, true) . "\n";
    $content .= "?>";

    save_to_file($filename, $content);
}

// echo form
 

15voto

saint_groceon Points 2696

C'est vrai. serialize() peut être très utile pour cela aussi.

Je pense que la solution pour créer un système viable consiste à trouver un moyen d’indexer les nœuds de données sans vous tuer avec la complexité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X