Base de donnée Flatfile VS Mysql - Que choisir / performance

Bonjour a tous,

Alors voila une question interessante que d’autre ont deja du se poser, que choisir entre gerer les donnée d’un site dans des fichiers texte ou via mysql.

J’ai commencer un site en mars, un site pour wap et web, qui est essentielement un chat + forum. Pour ce site j’avais decider d’utiliser des fichiers texte ( histoire de pas utiliser un AS400 pour gerer un carnet d’adresse.

Depuis le site a evoluer, et une 30 aine d’utiliser en permance sont connecté ( ce qui represente environ 2 000 000 de requete par mois ( a cause des refresh etc…)

Mon site commence a ramer ( page generé entre 2 et 6 seconde), et je suis de plus sur un hebergement mutualisé.

Hier j’ai fait un test en utilisant

  • fichier texte
  • fichier hash (base berkley et le module DB4 php)
  • base sql

Resultat clair: sql 20 x plus rapide, et berkey 8 x plus rapide.

Le probleme c’est qu’en lisant different forum, beaucoup de gens ont eu des pb a cause des max_connection qui refuser les connexion simultané… et a vrai dire je prefere encore que mon site rame. …

La question que je me posais c’est : Est ce que les fichiers ont aussi des pb d’accés concurent ? j’imagine que oui ? retourne t il des erreur ? ou bien c’est la regle de celui ki enregistre un fichier ouvert simultanément en dernier est celui ki gagne ? (ex: A ouvre un fichier, B louvre aussi, A et B font des modif, A l’enregistre puis B, au final personne n’as eu d’erreur mais les modif de A sont pas pris en compte.)

Je ne sais pas trop koi faire, mais je prefere regler cette question maintenant car apres il sera trop long de tout reecrire pour utiliser sql …

Pouvez vous me conseiller ?

Merci d’avance

ah oui je precise aussi que concernant berkley je l’envisage pas car beaucoup trop de modif a faire ( etant donnée que je serais obliger de faire des fichier avec 1 seul valeur par id ( pour pouvoir faire des rechercher sur chaque valeur… sinon j’aurais mis une valeur concatener de toutes mes valeurs… )

A la base, les bdd sont faites pour ça (les accès concurrents, tout ça). Gérer tout par fichier, oui pourquoi pas surtout si c’est consultatif mais dans ce cas, tu prends php, il appelle *SQL (pgsql, mysql, oracle, xxSQL, etc) , génère la page, et la sauvegarde dans un tampon (avec une vérification pour la remise à jour).

Ainsi sur tes pages en cache, pas d’accès bdd inutile. Par contre, pour les forums, là…

Y a aussi éventuellement les connexions persistentes, mais là je laisse aux autres (ce qui s’en servent) le soin de répondre.

En fait les problemes evoqué dans les posts concernant les bdd etait que une page php qui effectue des requette a la base, si elle est lancé dans un laps de temps cours par plusieurs users, le nombre de connection maximum simultané ( genre 3 - 5 en general sur les S.mutualisé) peut etre vite atteinte, et les autre resevrai une erreur (too many connection)

Donc la bdd gere les acces concurent, mais la limitation est vite atteinte, c’est ce probleme que je voudrais pouvoir anticipé…

J’ai bien penser a eventuelement faire une boucle (tant ke je recois l’erreur too many connection, je wait un peu et je re connecte …) mais ca continu a faire une connection , et en plus ca va ralentir le script …

sinon pour le cache c’est une bonne idée mais la dans le cas du tchat et du forum …

A vrai dire j’aurais pas lu tout ces post, je me serais dit ke toute facon les requetes se font assez rapidement pour pas qu’il y est trop de simultainée, mais apres avoir lu tout ces cas … me pose des questions…

Et les fichiers? y peuvent etre ouvert par plusieur simultanément aussi ? parce que si non, comme g pas d’erreur pour l’instant, ca ira au moins aussi vite pour sql, et je devrai pas avoir de probleme non ??

Tu peux tenter mysql_pconnect, et les connexions persistantes (le but étant d’éviter d’en ouvrir trop). Mais comme je l’ai dis, je ne m’en suis jamais servi, donc je ne sais pas ce que cela donne.

Saluton,
Je ne peux pas plus te renseigner au niveau des connexions persistantes, si ce n’est que je crains qu’elles soient assez mal vues des hébergeurs.
Quant au choix entre bd ou fichier, comme tu l’as vu toi-même, il n’y a pas photo au niveau performances.
Là où je ne te suis pas c’est quand tu dis : [quote=""]
J’ai bien penser a eventuelement faire une boucle (tant ke je recois l’erreur too many connection, je wait un peu et je re connecte …) mais ca continu a faire une connection , et en plus ca va ralentir le script …
[/quote]
Si tu dois te reconnecter, c’est que ta connexion a échoué, donc ça ne continue pas à faire une connexion. Et le gain en performances, par rapport aux fichiers texte, compense largement, de mon point de vue, l’évenuelle boucle d’attente de connexion.

une base de donnée c le mieux dans tous les cas …

en plus tu a un meilleur control de la scalabilité (multiplication des resources pour augmenter reelement la puissance de la plateforme)

en effet tu peux tres bien envisager 1 serveurs de base et plusieurs serveur web avec encore devant des serveur de cache( proxy inverse type squid)

en plus tu peux utiiser des memory table (table uniquement en memoire) qu’il faut bien sure remlir au demarrage du serveur… et sauvegarder de temps a autre dans une table sur disque

enfin bref avec une bd c quand meme plus simple … et plus performant…

Je tente une connexion,
Je recois une erreur “Too Many Connections”, la connexion se ferme.
Je boucle
— Wait 1 seconde
— Je reesaye de me connecter (nouvelle connexion à ce moment la !)
jusqu’a ce que je puisse faire ma requette.

Donc je vais bien à chaque fois faire des tentatives de connexion.
Et si il y à trop de connections, les scripts vont se mettre en attente, et les nouveaux scripts appelés vont eux aussi faire des connections, peut être boucler aussi … ca ne resoudra pas le problème…

C’est plus clair?

Faire une tentative de connexion, ça n’est pas faire une connexion, le serveur limite les connexions simultanées, pas les tentatives de connexion.

Ah ok, je ne savais pas.

Pour ma part hier g uploader les mise a jour que j’avais faite pour mon site, et d’un seul coup les pages sont maintenant generé en moins d’une seconde…

En fait les operations que je fais beaucoup sont les boucle sur un tableau ( issue d’un file($fichier) ) et sur chak ligne je fait un explode et je compare un champs ,
il y a aussi beaucoup de recherche de fichier dans un repertoire, ou je compare avec une expression reguliere.
J’ai decomposé mes fichiers de dnnée en plusieurs repertoire et je crois que ca a booster les performances…

bref,moralité, performance flatfile VS mysql … fo d’abord essayer de faire un code propre :stuck_out_tongue:

Mais bon si kkun a une experience sur les pconnect, merci de nuos la faire partagé ca serai kan meme utile

N’oublie pas que tu es en php, et que les fonctions fichiers ne sont pas non plus le plus rapide, d’autant que tu n’optimises pas forcément la consultation comme le ferait un SGBDR.

bah ca je suis d’accord… mais je me dit que peut etre que dans ce cas ( limite du serveur mutualisé et des limites de connection simultané) c’est peut etre une solution pas si mauvaise… mais bon vu ke j’ai pas tester avec mysql, je peut pas franchement avoir d’avis categorik …