dolibarr-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Dolibarr-user] Abstraction de base de données et versions de PHP


From: Christophe Battarel
Subject: Re: [Dolibarr-user] Abstraction de base de données et versions de PHP
Date: Thu, 13 Apr 2006 15:30:06 +0200
User-agent: Mozilla Thunderbird 1.0.6 (Windows/20050716)

OK sur tout....
Christophe

Marc Barilley a écrit :

A mon tour de sauter dans le troll :-)

Etant donné la cible à laquelle s'adressent Dolibarr et PHPCompta, à savoir les PME/PMI voire les travailleurs indépendants (seuls), il est évident que la question qui se pose n'est pas de savoir s'il faut choisir le SGBD le plus performant pour la tâche mais plutôt celui dont dispose l'utilisateur potentiel. Une PME/PMI ne veut pas s'investir dans un serveur dédié, même en location. En effet, elle n'a généralement pas les compétences internes pour gérer un serveur et s'enquiquiner avec la gestion des DNS, la configuration de son Apache, le renouvellement de son nom de domaine, le maintien de son SMTP/POP et j'en passe et des meilleures. Si en plus, elle doit prendre un consultant même ponctuellement pour gérer tout ça, avec un délai d'intervention souvent (trop) long, c'est hors de propos. Cela augmente son budget de manière beaucoup trop importante. Elle va donc se tourner vers un hébergement mutualisé standard. Alors quel est ce SGBD ? Un rapide tour d'horizon montre que les hébergeurs proposent des solutions dont les caractéristiques sont grosso modo :
- MySQL 3.23 à 4.1
- PHP 4.0 à 4.3
Plus rarement, on a MySQL 5 et PHP 5. Certains proposent également PostgreSQL mais ils sont tout aussi rares. La réponse est donc toute trouvée : puisqu'il faut rester compatible et utilisable avec au moins 80% du marché (viser en dessous de 80% est assez ridicule, à mon avis), il faut tourner sur un MySQL 3 avec PHP 4. Ca tombe bien, c'est ce que Dolibarr sait faire. Concernant PHPCompta, je ne connais pas le soft, je ne m'exprimerai donc qu'avec parcimonie à son sujet. Si l'auteur souhaite continuer à tourner sur PostgreSQL, pourquoi pas, c'est son choix. Mon avis est qu'il se coupe d'un marché potentiel et cela plaide donc en faveur des couches d'abstraction.

Parlons de ces couches. Après en avoir utilisé plusieurs, je constate qu'elles présentent toutes plus ou moins les mêmes fonctionnalités, lesquelles ne sont pas le sous-ensemble le plus pauvre des SGBD supportés, loin de là. Mais évidemment, cela coupe d'un certain nombre d'extensions propres à chaque SGBD. Et alors ? Si on ne peut vraiment pas s'en passer, c'est que l'algorithme qui tourne derrière à un problème quelque part, à mon avis. Au pire, on les émule (ok, je sens venir le couplet sur les performances et tout ça, mais j'en parle plus bas ;-)). Tiens, par exemple, PostgreSQL propose des curseurs pour naviguer dans les résultats d'une requête mais pas MySQL. Eh bien, je sais pas pour vous, mais moi ça me prend environ 15 minutes pour coder un système de cache et j'ai l'équivalent d'un curseur PostgreSQL sur MySQL. Et côté performances, je ne suis même pas sûr d'être perdant. Tout ça pour dire que je trouve ces couches très pratiques. Personnellement, rien ne m'horripile plus que, par exemple, de me demander comment on échappe les caractères en fonction du SGBD que j'ai en dessous. Et j'en passe et des meilleures. Et là, je remercie la couche d'abstraction.

D'une manière générale, il me semble évident de séparer les fonctionnalités en couches successives. Pour moi, un code métier (la CRM de Dolibarr, la compta de PHPCompta), ni même sa couche de stockage, ne devrait contenir aucune requête SQL. Les requêtes devraient être encapsulées dans des procédures stockées. Du coup, même la partie la plus basse de la couche métier est indépendante de la structure de la base de données, et à fortiori du SGBD lui-même. De même pour l'affichage (et je lance un autre troll) qui devrait être géré par un système de template. Résultat : séparation totale du stockage, du calcul et de l'affichage. Dans l'absolue, la communication entre les couches elle-même devrait être encapsulée. Tout ça amène à une indépendance totale des composants de l'application. Et du coup, facilite grandement l'intégration et l'interaction des applications. En effet, on pourrait très bien imaginer changer simplement la couche de stockage de Dolibarr (actuellement, MySQL) par PHPCompta. Oui, PHPCompta, pas juste la base de données de PHPCompta, le logiciel entier. Ou l'inverse. Il "suffirait" d'avoir une interface (au sens programmation) qui permette d'interroger PHPCompta pour remplir les écrans de Dolibarr et une autre pour sauvegarder dans PHPCompta les actions faites par l'utilisateur sur Dolibarr. Ou l'inverse. A ce sujet, les triggers de Dolibarr sont déjà des prémices très prometteurs (bravo Eldy). Ne reste qu'à en étendre le champ d'application.

C'est bien beau tout ça mais c'est de la théorie. Et les performances ? Réponse : quelle importance tant que ça reste raisonnable. Aucun de ces deux logiciels n'a vocation à traiter 40000 hits par seconde. Tout au plus, lorsque les 4 commerciaux de la société qui utilise ces deux logiciels travaillent en même temps, on atteint des pics de 30 pages demandées par minute. Alors les performances... pfff... Ces mêmes commerciaux sont tellement habitués à attendre parfois 5 secondes pour obtenir une page web avec les derniers cours de la bourse que ce n'est pas ça qui va les empêcher d'utiliser Dolibarr ou PHPCompta.

Le jour où Dolibarr et PHPCompta seront tellement répandus qu'ils remplaceront tous les autres logiciels du marché, qu'ils auront conquis même les grandes entreprises où plusieurs centaines ou milliers d'utilisateurs seront connectés dessus en permanence, alors ce jour-là les ordinateurs (quantiques ?) et les réseaux auront suffisamment évolué pour encaisser la charge ;-)

Voilà, c'est mon avis, et je le partage (comme il est coutume de dire)

Marc Barilley
Océbo


herve couvelard a écrit :


utiliser son fameux 'scanmus' pour agresser les sites marchands français à la conférence PHP Paris 2005 : c'est totalement effrayant... A ce moment là, les performances deviennent le cadet des soucis.


Non la performance passe après la sécurité car personne ne ferait des courses sur un site marchand qui met 15 secondes a afficher chaque page, quand bien même se serait ultra-sécurisé. De plus si ses sites marchands avaient développer leur propre code, le scanmus se serait cassé les dents.


Pour parler des performances justement : j'imagine que tes applications sont au minimum sécurisées, donc tu as produit ce fameux code (échappements de caractères, traitement d'erreur, etc.). Les couches d'abstraction comme PEAR::DB ne font finalement que ce genre de traitements supplémentaires, et souvent de façon très optimisée.


Non les couches d'absraction ne font pas QUE ce genre de traitement complémentaire, il gère à CHAQUE requette le choix de la base de donnée. ils doivent, j'imagine, implémenter EN PROPRE certains fonctionnalités qui ne sont pas commune aux base de données. Par ailleurs, je ne fais du traitement d'erreur que lorsque cette erreur à une incidence durable et importante, soit très rarement (sur viva par exemple très très peu d'écriture).

Si cétait juste une couche de sécurisation, il suffirait de lancer un sed -e 's\mysql\pgsql\g' sur la totalité de l'arborescence.

cas incomparablement mieux que si on espère réinventer la roue. Le cas de PDO est encore plus flagrant, car ce code est exécuté dans une extension compilée avec une performance inégalable en code PHP, fut-il en byte-code optimisé.


oui mais PDO est php5 only.


Pour ce qui est des comparaisons de performance entre les différentes bases de données : si une application met 5-9 secondes pour réagir sur une altération standard, i.e. qui arrive souvent, cela vient plus souvent d'une erreur de conception que d'une lenteur du moteur de SGBD. PostGre est effectivement moins rapide que MySQL, mais on reste dans le même ordre de grandeur : on ne passe pas du quasi-instantané, quelques dizaines de millisecondes, à presque une dizaine de secondes, c'est-à-dire 100 fois plus.


c'est pas beaux de taper sur dany : c'est son code qui met ce temps. ;-)

je ne sais pas de quoi cela provient, mais les .jsp, .cfm sont TOUJOURS plus lent que les .php sur le net. Oracle a besoin d'une architecture matérielle plus étoffée que mysql. Maintenant je n'ai pas travaillé avec pgsql, mais il est EVIDENT que plus on analyse une requete pour faire des vérifications d'intégrité, plus la requette est lente. [ne serait-ce que pour faire cette vérification].

Laquelle erreur de conception serait probablement gommée par l'utilisation de la fameuse intersection de fonctionnalité. Du reste je

oui la BDD du pauvre, comme le compte bancaire universel ou la carte plastique de retrait mono guichet qui ne peut pas servir à payer (sécurité optimale). L'intersection de fonctionnalité ne sert qu'a ceux qui essaient de 'ratisser le plus large possible' au détriment des performances. une application pro n'est ni un cours de développement pour débutant (cad facile à lire et comprendre avec des commentaires de code pantagruelique, ni une proof of concept de l'universalité d'environnement.

te rejoins totalement sur l'intégrité référentielle, même si j'aimerais avoir un filet supplémentaire grâce aux foreign keys.


ces vérifications externes, j'ai connus avec access, non merci.


Pour info, et sans vouloir faire de surenchère, notre application (système d'information hospitalier) effectue sans problème de performance (réponse quasi-instantannée) 3 millions de requêtes pour 50 mille pages servies par jour. Avec un processeur dont les pics de charge dépasse rarement 20% sur un lissage de 5 minutes.


il est seul sur son serveur ou est hébergé chez un dédié virtuel (et donc partagé avec d'autres dédié virtuel) ? Une requette n'est pas forcement identique à l'autre, la partie "lourde" de viva c'est le géoclassement : chaque adresse est triée par rapport à la commune du visiteur, on doit calculer les distances pour chaque enregistrement et pour chaque requette, et il est impossible de mettre des résultats en cache car chaque visiteur vient d'une ville différente.

Si j'ai cité ce cas, ce n'est pas pour en avoir une plus grosse, c'est parce que c'est un cas très particulier. Ce n'est pas trouver la liste des produits qui appartiennent à la catégorie 1 ou de sortir le dossier d'un patient avec toutes ses visites passées (par exemple)

Mot de la fin concernant le facteur exogène, ces couches d'abstraction des surtout des standard de facto, qui font que n'importe qui entrant dans de code s'y retrouvera d'autant plus vite, sans avoir à effectuer sa propre rétro-ingénierie.


oui, on en revient , je sais suis un peu tétu, à pourquoi pas une surcouche sur le langage, cela permettrait aussi a celui qui ne connait pas php de s'y retrouver plus vite... nan je rigole.

Si une personne veut coder comme il faut avec ces méta-couches d'abstraction, il doit d'abord faire de la rétro-ingénierie sur le code de ces couches, sinon, je ne donne pas chère du code fini. les codes php de 50 lignes qui refont ce qu'une ou deux fonction font déja, je l'ai vu
un nombre incroyable de fois.

Je peux comprendre qu'une entreprise commerciale développe en abstraction, ce qui lui permet de 'proposer' ses produits quelque soit l'environnement de travail de ses prospects/clients, mais certains prefèrent coder nativement (sacrifiant la portabilité il est vrai) pour bénéficier des fonctionnalités et des performances de celle qu'elle a choisie.


hervé


_______________________________________________
Dolibarr-user mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/dolibarr-user




_______________________________________________
Dolibarr-user mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/dolibarr-user



--
Christophe Battarel
Responsable Technique

IRIS - altairis
1227 Grande Rue
38660 Le Touvet

address@hidden





reply via email to

[Prev in Thread] Current Thread [Next in Thread]