Page 1 sur 2

xmlBDD : Emulation de SGBD / sauvegarde de fichiers XML

Posté : 22 févr. 2011, 21:10
par xTG
Un projet que j'ai lancé alors que je m'ennuyais (ouais c'est souvent mauvais...), il consiste en une émulation "partielle" d'un sgbd basé sur des fichiers XML.

Je ne prétends aucunement obtenir un résultat comparable à MySQL ou autre, loin de là même (bien que je n'ai pas encore testé de gros flots de données ou même exécuté un seul test de performance), ce projet était avant tout un moyen de voir comment on pouvait reproduire le fonctionnement d'une base de donnée.

Pour le moment xmlBDD est assez basique, il faudra voir si à terme je développe plus et l'améliore.

Un exemple d'utilisation :
// ouverture de la BDD magasin
		$bdd = new xmlBDD("bdd/magasin");

		//##########################################################################################################################
		//##########################################################################################################################
		// Création de la table jouet
		$bdd->create("jouet",array(
					'idJouet' => array('auto-increment' => true, 'primary' => true, 'type' => "integer", 'taille' => 10),
					'nomJouet' => array('type' => "text", 'taille' => 15),
					'descriptionJouet' => array('type' => "text", 'taille' => 300),
					'dateCreationJouet' => array('type' => "datetime")
				));

		//##########################################################################################################################
		//##########################################################################################################################
                // insertion d'un jeu de données
		$bdd->insert(array(	'idJouet' => 1,
							'nomJouet' => "Peluche",
							'descriptionJouet' => "Une peluche toute douce.",
							'dateCreationJouet' => date("d/m/Y H:i:s")
					),
		"jouet");
		$bdd->insert(array(	'idJouet' => 2,
							'nomJouet' => "Casse-tête",
							'descriptionJouet' => "C'est un casse-tête en bois.",
							'dateCreationJouet' => date("d/m/Y")
					),
		"jouet");
		$bdd->insert(array(	'idJouet' => 3,
							'nomJouet' => "Ballon",
							'descriptionJouet' => "Un ballon rouge gonflable.",
							'dateCreationJouet' => time()
					),
		"jouet");
                // SELECT * FROM `jouet` WHERE `idJouet` = 1;
		$data = $bdd->select('*',"jouet",array('idJouet' => 1));
		// SELECT `nomJouet`, `descriptionJouet` FROM `jouet` WHERE `descriptionJouet` LIKE "Un%";
		$data = $bdd->select(array("nomJouet", "descriptionJouet"),"jouet",array('descriptionJouet' => array('op' => "like", 'val' => "Un%")));
		// SELECT `idJouet`, `nomJouet` FROM `jouet` WHERE `idJouet` > 2;
		$data = $bdd->select(array("idJouet", "nomJouet"),"jouet",array('idJouet' => array('op' => ">", 'val' => 2)));
La classe permet toutes les opérations basiques (create, insert, select, update, delete) avec les opérateurs de base (=, !=, >, >=, <, <= et like) pour trois types de données (text, integer, datetime).

Le projet est disponible en téléchargement (et consultation, ainsi qu'un fichier de demo) sur github : https://github.com/xTG/xmlBDD

Je suis ouvert à toute remarque sur le code (le but de ce projet étant en grande partie de m'améliorer). :)

Re: xmlBDD : Emulation de SGBD / sauvegarde de fichiers XML

Posté : 22 févr. 2011, 23:19
par moogli
Yop,

premier essai j'ai bien deux répertoire qui se créer et pas de message d'erreur c'est bien :)

par contre va falloir gérer la "zone de temps" parce que bon
Image

simplement : date_default_timezone_set('Europe/Paris'); par exemple, a moins de vouloir gérer la chose :)

j'ai regardé en biais, c'est une bonne idée, par contre c'est assez abrupte à l'utilisation, trop de tableau :) (select('*') ou select ('champ1,champ2 etc) est plus parlant que select (array()) ..) enfin c'est mon avis :)


@+

Re: xmlBDD : Emulation de SGBD / sauvegarde de fichiers XML

Posté : 23 févr. 2011, 10:44
par stealth35
t'utilises pas Xpath pour les requêtes ?

moogli > l'erreur vient de ton php.ini :wink:

Re: xmlBDD : Emulation de SGBD / sauvegarde de fichiers XML

Posté : 23 févr. 2011, 11:14
par xTG
Bien la première fois que je vois une erreur pareille Moogli. O_o
Ton php.ini est-il correctement configuré ?

Pour les arguments je comptais par la suite m'orienter vers différents entrées.
Par exemple une chaîne de caractères de type requête : "SELECT champs1, champs2, ...."
Ou bien toujours en décomposant tel que tu me l'as suggéré.

Concernant Xpath, je ne connais pas, je vais de ce pas me renseigner dessus. :)
Edit: ouep c'est pas mal, je croyais au début que cela ne m'apporterai rien mais un billet m'a mis sur la voie : http://www.php.net/manual/fr/simplexmle ... .php#84196

Re: xmlBDD : Emulation de SGBD / sauvegarde de fichiers XML

Posté : 23 févr. 2011, 15:01
par zeus
Cette erreur, c'est que la directive "date.timezone" de ton php.ini n'est pas configurée.
Ce n'est pas un soucis applicatif, mais de configuration du serveur PHP.

Re: xmlBDD : Emulation de SGBD / sauvegarde de fichiers XML

Posté : 23 févr. 2011, 15:32
par jojolapine
ça me rappel un truc que j'avais fait il y a bien longtemps :p
vos-contributions/classe-gestion-donnee ... 27524.html (4 ans déjà :) )

Re: xmlBDD : Emulation de SGBD / sauvegarde de fichiers XML

Posté : 23 févr. 2011, 15:37
par xTG
Intéressant. :D

Je me pose une question en ayant parcouru ton code. Qu'est ce qui t'as poussé à ouvrir et fermer le fichier à chaque instruction (insert par exemple) ?
Y-a-t-il une raison particulière ? Ou bien est-ce venu ainsi ?

Je me pose la question car pour ma part je ne fais la mise à jour du fichier que lors de la destruction de l'objet (d'ailleurs j'ai l'impression que ça bug dur si on oublie de le faire manuellement avec un unset()...).

Re: xmlBDD : Emulation de SGBD / sauvegarde de fichiers XML

Posté : 23 févr. 2011, 15:43
par jojolapine
Arf je pense pas qu'il y ai eu beaucoup de raisons sinon mon inexpérience ;)
Effectivement à te lire je me rend compte que ta solution doit économiser pas mal d'accès disque!

Après je ne vois pas de fonction __destruct() dans ton code pour écrire dans le fichier en fin de code?

Du coup où c'est que ça se passe ça:
je ne fais la mise à jour du fichier que lors de la destruction de l'objet
?

Re: xmlBDD : Emulation de SGBD / sauvegarde de fichiers XML

Posté : 23 févr. 2011, 15:44
par stealth35
moi je comprend pourquoi t'utilises pas simplexml pour créer ton XML au lieu de le creer en texte, asXML te permet ca :wink:
(ps : pour le XML c'est UTF-8 pas UTF8)

Re: xmlBDD : Emulation de SGBD / sauvegarde de fichiers XML

Posté : 23 févr. 2011, 16:32
par xTG
C'est à venir, j'ai eu des soucis avec SimpleXml et ça m'a barbé donc j'ai remis à plus tard. :/

Sinon le __destruct() est dans la class xmlBDTable, car c'est chaque table que je met à jour (s'il y a besoin).
Mais peut être qu'il serait plus propre de rajouter un destructeur aussi dans xmlBDD qui appellerai les autres destructeurs.

Re: xmlBDD : Emulation de SGBD / sauvegarde de fichiers XML

Posté : 23 févr. 2011, 16:34
par stealth35
je ferais plutôt une sauvegarde, lors d'un insert/update
EDIT : tu peux utiliser addChild pour la création

Re: xmlBDD : Emulation de SGBD / sauvegarde de fichiers XML

Posté : 23 févr. 2011, 16:38
par xTG
A voir si on a besoin d'un script qui est constamment utilisé (multi-utilisateur au même moment) et si le script est long (en temps d'exécution).
Dans ce cas oui il serait plus intéressant de faire la mise à jour à chaque modification car sinon les autres utilisateurs ont un retard de données de quelques ms.

Re: xmlBDD : Emulation de SGBD / sauvegarde de fichiers XML

Posté : 24 févr. 2011, 02:16
par moogli
t'utilises pas Xpath pour les requêtes ?

moogli > l'erreur vient de ton php.ini :wink:
wé, mais c'est la conf par défaut que ce paramètre ne soit pas configuré, même si cela indique pas qu'il ne le sera pas ^^

par contre coté test (sur un mutu) pb de droit à la création des répertoires, le mkdir prend un int en 2nd paramètre pas une chaine. donc on se retrouve pas avec un 777
ligne 115 de xmlBSS.class.php => $retour = mkdir($bdd,0777);

j'ai pas testé plus ^^

@+

Re: xmlBDD : Emulation de SGBD / sauvegarde de fichiers XML

Posté : 24 févr. 2011, 10:57
par xTG
Va falloir que je regarde ça de plus prêt...
Car j'avais mis 0777 au début, mais sous windaube pas moyen d'avoir les droits après...

En fait Stealth35, j'avais un fichier à peu prêt potable en terme d'utilisation avec les fonctions de création de SimpleXML.
Mais j'avais un fichier XML sur une ligne... -_-
Et moi j'en veux pas de ça ! C'est une horreur numérique ! Pourquoi pas encoder les fichiers, ça serait encore plus marrant non ?

Re: xmlBDD : Emulation de SGBD / sauvegarde de fichiers XML

Posté : 24 févr. 2011, 11:31
par stealth35
DOMDocument format les fichiers avec l'indentation qui va avec, tu peux facilement switcher entre simplexml et domdocument
sinon ouai tu peux encoder des fichier ta le wrapper mcrypt qui est sympa :wink: