Comments (7)
En effet, mais ça demande un énorme travail, car c'est l'API de AdoDB qui est utilisé.
Ce qui serait encore mieux, serait de rendre agnostique les appels à base de données pour pouvoir utiliser n'importe quels moteurs de db, mais cela représente un encore plus gros travail, car toute la partie de sauvegarde/restauration de site est basé sur des dumps sql.
from lodel.
Cela peut représenter une grosse quantité de travail mais si c'est un objectif clairement identifié par un milestone dans le bugtracker, les contributeurs éventuels pourront travailler dessus en toute sérénité, sans peur de voir leur merge request rejeté.
L'API PDO est l'API Objet standard de PHP pour l'abstraction des bases de données et permet (via des pilotes en langage C) de rendre l'application compatible avec les SGBD suivants:
- Cubrid
- FreeTDS / Microsoft SQL Server / Sybase
- Firebird
- IBM DB2
- IBM Informix Dynamic Server
- MySQL 3.x/4.x/5.x
- Oracle Call Interface
- ODBC v3 (IBM DB2, unixODBC et win32 ODBC)
- PostgreSQL
- SQLite 3 et SQLite 2
- Microsoft SQL Server / SQL Azure
- 4D
Pour rendre les appels agnostiques, je connais le composant Database des eZComponents, une surcouche de PDO dont j'apprécie la clarté.
Une requête s'exécutant de la manière suivante:
$db = ezcDbInstance::get();
$q = $db->createSelectQuery();
$q->select( '*' )
->from( 'quotes' )
->where( $q->expr->eq( 'author', $q->bindValue( 'Robert Foster' ) ) )
->orderBy( 'quote' )
->limit( 10, 0 );
$stmt = $q->prepare();
$stmt->execute();
Le composant traduit l'objet requête en une requête SQL via un mécanisme de fabrique abstraite. Cependant, cette API n'est pas standard et le projet eZ Components est à l'abandon mais ça peut donner de bonnes idées, et c'est sous licence BSD.
from lodel.
Bon, après discussion dans notre équipe, nous avons décidé d'enlever PDO, car nous avons des besoins de répartition de charge sur des grappes de serveurs MySQL, AdoDB ne permettant pas ça et l'adaptation de celui-ci n'étant pas évidente, on va réécrire une couche d'abstraction qui reprend la même API que AdoDB qui est utilisée dans lodel et qui utilisera PDO.
Si tu as des remarques ou des idées, n'hésites pas à nous en faire part.
from lodel.
«nous avons décidé d'enlever PDO»… erreur il s'agit bien de AdoDB :)
from lodel.
Tout dépend comment vous souhaitez implémenter cela. La seule fois où j'ai travaillé avec un cluster de bases de données, c'était avec du PostgreSQL et l'interface était totalement transparente. Le code à écrire était le même, que l'on utilise un ou plusieurs serveurs.
Par ailleurs, une base de données doit pouvoir gérer des contraintes d'intégrité. Un cluster de base de données signifie: soit des performances plus faibles car il faut que les serveurs synchronisent leurs transactions, soit des données plus volatiles car il aura fallut désactiver la gestion des contraintes.
Si le respect des contraintes d'intégrité est secondaire et que vous avez de gros besoins côté base de données, préférez peut-être une implémentation NoSQL avec MongoDB, CouchDB, etc. qui sont conçus pour la répartition de charge (= configuration plus simple, et meilleurs performances)
Sinon, pour ma part, quand il s'agit de problèmes de charge, je privilégie une meilleur gestion de cache côté front.
Il me semble que OpenEdition est plus sollicité pour de la consultation de contenu que pour des opérations nécessitant des écritures en base de données.
S'il fallait donc rajouter des machines quelque part, j'aurais eu plutôt tendance à rajouter des serveurs de cache que des serveurs de base de données (Varnish est très bon pour ça)
Car si deux serveurs de cache ont une version différente d'une même page à un instant donné, cela reste moins grave que deux bases de données avec des tables différentes.
Et une page servie par un serveur de cache ne nécessite aucun appel à la base de données...
from lodel.
Je me suis mal exprimé, ou mal développé l'idée, la problématique n'est pas vraiment de la charge système, pour ça lodel s'en sort très bien avec son cache, et éventuellement avec un Varnish en façade.
Sur des infrastructures comme celle d'OpenEdition (ou d'autres plateforme) la problématique est la gestion des erreurs: pouvoir basculer sur de nouveaux serveurs de façon relativement transparente.
from lodel.
A ce moment là, je suggérerais (mais ce n'est que mon point de vue) de se concentrer sur l'infrastructure en elle-même (je suppose qu'un fallback est envisageable au niveau réseau afin d'obtenir une architecture n-tiers bien découpée).
Intégrer la gestion d'un cluster dans l'application ne fera que complexifier le projet et casser l'abstraction de la couche d'accès aux données en la rendant dépendante du serveur utilisé.
De plus, cela n'apporte rien aux utilisateurs ayant de petits besoins.
Si toutefois vous décidez d'intégrer un mode cluster, je vous conseille de bien étudier le code du projet eZ Publish qui a capitalisé une grande expérience à ce sujet (ainsi que beaucoup de bugs)
from lodel.
Related Issues (20)
- Modification du modèle éditorial : implications pour future revue OpenEdition HOT 3
- Pb après upgrade OEJ.EM 1.0.x => 1.0.2 HOT 6
- Aperçu des liens / Métadonnées d'un site Lodel HOT 5
- Chargement des images d'accroche impossible avec Chrome HOT 1
- Facebook Icon HOT 1
- Mise à jour de v1.0.0 vers v1.0.1 en mode "singledatabase" HOT 1
- Comment configurer proprement les différents `$cfg['sharedir']` etc. ?
- Quand je me logue sur `/lodeladmin/`, le cookie est créé pour le chemin `/lodel/` HOT 1
- Mariadb 10.5 HOT 2
- Ne plus distribuer les templates obsolètes HOT 1
- XML non valide après import Word HOT 1
- Le filtre `vignette()` produit des images plus lourdes que l'original HOT 1
- Comment mettre à jour un modèle éditorial.
- Impossible de charger les documents annexes et les vignettes
- Ajout de la langue berbère
- Lodel & MathJax HOT 2
- Ajout de la langue bretonne HOT 2
- Warning PHP depuis la dernière mise à jour HOT 5
- Pb caractères spéciaux sur moteur de recherche
- Faille XSS sur la page de connexion HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from lodel.