Le code pour optimiser la charge de sa base de données

Une moulinette de code qui s'est enrayée, une requête SQL qui ne passe pas ?
ph.gras
Addict
Addict
 
Messages: 71
Inscription: 23 Juin 2013, 13:39

Le code pour optimiser la charge de sa base de données

Messagede ph.gras » 24 Nov 2015, 18:41

Je suis en train de préparer un formulaire, un peu dans ce genre là :
Image

… où les utilisateurs pourront ajouter des données de façon illimitée,
mais en plus, il y a des séries elles-mêmes illimitées de formulaires.

Le bigntz !

Les données sont enregistrées dans une base de données, mais gérées
par un objet, dont le membre $user récupère les données de manière
structurée. Jusque là, tout va bien :lol: .

Je me pose la question de la meilleure manière d'optimiser la charge
de cette base, en prévoyant qu'elle risque d'encaisser pas mal avec un
nombre indéfini d'utilisateurs qui l'enrichiront de façon infinie…

J'ai plusieurs options, j'aimerais connaître votre avis sur la meilleure,
la moins violente pour ma BDD :

  1. Créer une insertion sérialisée de toutes les données d'un utilisateur, qui sera mise à jour
    à chaque fois que celui-ci en changera ou en ajoutera au moins une ;
  2. Créer autant d'insertions en texte que de sous membres de mon $user, qui seront créées,
    supprimées ou modifiées à chaque changement ;
  3. Créer plusieurs insertions sérialisées en optant pour un mix des 2 premières propositions,
    mais selon quels critères ?

Un aperçu de mon sous-membre (!untermensch), tel qu'il existe à l'heure actuelle :
Code: Tout sélectionner
$this->user->serial = array(array('serial_title' => 'Mon premier pipe', 'user_agent' => $_SERVER['HTTP_USER_AGENT'], 'groups' => array('gr_1' => array('feeds' => array(array('title' => $blog_name, 'url' => $blog_feed))), 'gr_2' => array('feeds' => array(array('title' => '', 'url' => ''))), 'gr_3' => array('feeds' => array(array('title' => '', 'url' => ''))))));

Avatar de l’utilisateur
Galdon
Administrateur du site
Administrateur du site
 
Messages: 2188
Inscription: 06 Sep 2008, 22:05

Re: Le code pour optimiser la charge de sa base de données

Messagede Galdon » 25 Nov 2015, 12:04

ph.gras a écrit:Je me pose la question de la meilleure manière d'optimiser la charge de cette base, en prévoyant qu'elle risque d'encaisser pas mal avec un nombre indéfini d'utilisateurs qui l'enrichiront de façon infinie…


Il faudrait préciser un ordre de grandeur de la volumétrie attendue, honnêtement, à moins d'être twitter, facebook ou google, tu n'as pas tellement à te préoccuper de la charge générée par des insert. MySQL supporte facilement 10000 insert par seconde, tu peux lire des benchmark sur percona.com notamment :
https://www.percona.com/blog/2012/05/16 ... mazon-ec2/
https://www.facebook.com/notes/mysql-at ... 2969385932

Je te conseille d'éviter de sérialiser les données que tu stocke dans une base MySQL (ça s'appelle de la dénormalisation et en général on fini toujours par le regretter ^^, sauf quand c'est utilisé de manière vraiment réfléchie et qu'on ne peut pas faire autrement), normalement, dans une base de données relationnelle, tous les champs sont atomiques.

Soit tu décomposes tes tables pour pouvoir y stocker toutes tes entités (tu peux utiliser un ORM comme Doctrine ou NotORM pour te faciliter la tâche), soit tu utilises une base de données NoSQL comme MongoDB, qui permet de stocker directement des objets, sans être contraint par un schéma (tables, colonnes, relations...).
"Si tu veux me parler, envoie-moi un... FAX !" - George Abitbol

ph.gras
Addict
Addict
 
Messages: 71
Inscription: 23 Juin 2013, 13:39

Re: Le code pour optimiser la charge de sa base de données

Messagede ph.gras » 25 Nov 2015, 13:31

Merci pour cette réponse qui décompose (… enfin, j'espère) bien tous les aspects de mon interrogation.

Le jour où j'aurai 3 ou 4 insertions par seconde, je pourrai m'acheter un data center tout équipé (avec la
machine à café et le distributeur de Carambar aussi).

Alors je crois que je vais plutôt me concentrer sur l'optimisation des requêtes, c'est plus utile au début.

Pour le reste (ORM or NotORM)… Je repasserai ici pour faire le point le moment venu ;) .


Retourner vers PHP/MySQL

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

cron