IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Enregistrer des données en masse avec PHP


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut Enregistrer des données en masse avec PHP
    Bonjour,

    Voici ma problématique :

    J'utilise à ce jour PHP et mysql pour stocker et gérer les données. Mais là j'ai besoin de stocker et modifier un flot de données énorme (plus de 25 000 000 requêtes par jour et le serveur risque de ne pas tenir la charge). Avec mysql il est quasi certain que celà ne tiendra pas. J'ai pensé à l'usage des fichiers ou au table MEMORY

    Voici les données que j'aimerais stocker et manipuler :

    2 colonnes qui seront : IDENTIFIANT et NOMBRE

    On compte pour chaque identifiant le nombre d'appel

    ex : IDENTIFIANT 256 NOMBRE : 5897
    Celà signifie que l'identifiant 256 a reçu 5897 visites sur la page

    Ce qui signifie que dans le cas de fichier texte il va falloit rechercher la ligne avec l'identifiant pour ajouter dans la colonne NOMBRE +1
    Est-ce à votre avis la solution ? Est-ce que les fichiers textes sont plus performants dans un cas comme celui ci ? Ou alors faudrait-il utiliser des fichiers csv ? Ou encore une table MEMORY

    Vous l'aurez compris je cherche la meilleure solution possible pour stocker des flots de données très important. MYSQL prend énormément de ressources, est-ce que celà vient de la simple connexion MYSQL ou des écritures/lectures dans les fichiers MYSQL ?
    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    25M de requêtes par jour tu peux utiliser n'importe quelle solution ,sur un seul serveur , je pense que c'est pas envisageable.

    Pour tenir ce genre de charge il faut basculer sur des structures plus importantes.

    Sinon pour répondre à tes questions :

    - Fichier : tu vas économiser la connexion mysql mais ca va être un galère sans nom dès que tu vas vouloir utiliser les données; Sans parler des accès disque. 25M de requête si tu gère un système de fichier à la main tes disques dur vont pas vivre très longtemps à mon avis.

    - Memory : Si tu n'as pas besoin de conserver les données c'est une solution. pour rappel en memory , un reboot et les données on disparues. Sans comtper qu'il faudra certainement plusieurs dizaine de Go de mémoire pour gérer ton flux de requêtes.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Environ 290req/s donc, ça donne 3ms max par requête, vu que mêmes les requêtes les plus simples sur des tables performantes mettent environ 6ms, ça va être tendu pour tenir la charge (de plus qu'on parle ici de moyenne, les pics risquent effectivement de tout faire planter).

    Je crois effectivement que ton infrastructure n'est pas bonne. Il faudrait songer à utiliser un cluster de serveur SQL (ou NO-SQL) pour répartir la charge. Et coté serveur d'application, PHP et Apache ça risque également d'être difficile, les requêtes vont s'empiler jusqu'a saturation de la mémoire. J'ai fait quelques tests, et avec 250hits/s, ça plante en 1/4 heure sur une machine de 2Go de mémoire - sans parler que la plupart des requêtes sont tout simplement abandonnées (timeout TCP). Avec un serveur qui a plus de guts, on peut cependant monter plus haut.

    D'autres serveurs d'application sont plus efficaces sous forte charge, tu devrais considérer l'usage de NodeJs qui est célèbre pour ses perfs spectaculaires.
    Coté SGBD, tu devrais regarder du coté de Cassandra (utilisée par FaceBook) qui est optimisé pour le travail en cluster et qui est extrêmement rapide. Après, il faut voir non seulement le nombre de requêtes/s mais aussi le volume de données (une fois le disque plein, bonjour les plantages).

    On ne peut pas tout faire avec une stack LAMP, désolé

  4. #4
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Je débarque avec mes gros souliers. A mon avis se poser les bonnes questions est déjà un bon point de départ.

    25 M de requêtes par jour. Tu dois travailler sur un projet qui brasse pas mal d'argent pour avoir à traiter autant de données. Les personnes qui te demandent une telle performances doivent quand même avoir un minimum de conscience pour s'apercevoir de la puissance de feu qu'il faut mettre en oeuvre pour accomplir une telle tâche. Si ce n'est pas le cas, il faut les mettre au courant avec les informations qui ont été fournies par les personnes avant moi.

    S'ils sont conscient, il ont sûrement prévu un budget ou alors ils faut les reprogrammer ;-).

    Ne serait il pas judicieux de fractionner les données et de repartir les tâches sur plusieurs serveurs esclaves eux même controlé par un maitre dont la tâche serait d'aller récupérer les résultat chaque jours. Reste à savoir combien de serveur seraient nécessaire pour accomplir la tâche sans qu'il y ai combustion :-P
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut
    Alors déjà j'ai 4 gros serveurs et les 25 millions de hits sont gérés par apache sans problème. Les revenus de ce service ne seront pas énormes malheureusement et il me faut une solution adaptée. Les données seront simple à gérer car 2 colonnes c'est tout. MYSQL ne me semble pas du tout la solution
    Les fichiers textes sont parait-il moins lourd beaucoup moins lourd et d'ailleurs des sociétés utilisent les fichiers textes pour stocker les données et ensuite toutes les 2 heures par exemple rebasculer les données dans mysql

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Alors déjà j'ai 4 gros serveurs et les 25 millions de hits sont gérés par apache sans problème
    Dans ton premier message tu parles de requête.

    je pense qu'on avait tous compris requête au sens SGBD. Si c'est un hit au sens serveur web ce n'est effectivement plus du tout la même chose.

    Les données seront simple à gérer car 2 colonnes c'est tout. MYSQL ne me semble pas du tout la solution
    Effectivement , pour 2 colonnes un sgbdr n'est absolument pas adapté , il vaut mieux se tourner vers une solution noSql (mongoDB , couchDB ...)
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [ODBC] Se connecter, lire, afficher des données bdd firebird avec php
    Par firebird1 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 12/02/2015, 11h01
  2. Réponses: 6
    Dernier message: 27/05/2014, 14h50
  3. Récupérer des données de jquery avec php
    Par Mo_Poly dans le forum jQuery
    Réponses: 3
    Dernier message: 08/10/2009, 17h54
  4. Réponses: 4
    Dernier message: 12/06/2006, 17h05
  5. [Excel] Lire des données de excel avec php
    Par Eisy dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 09/03/2006, 17h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo