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

Requêtes MySQL Discussion :

requete nb de connexions simultanées


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Par défaut requete nb de connexions simultanées
    Bonjour à tous,

    Je suis un newbie sur Mysql.

    J'ai une base de données avec une table ou sont stockés les enregistrements de debut et fin de connexions à un serveur.

    Je dois en sortir le nombre de connexions simultanées par minute sur chaque jour d'une année calendaire.

    Voici la structure de ma table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      `debut` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
       `fin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
      `session_number` varchar(32) NOT NULL DEFAULT ''
    La difficulté que je rencontre est que la durée de connexion peut être supérieure à la minute.

    ci-dessous un extrait de données au format csv de ma table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    debut;fin;session_number
    2011-01-03 09:06:55;2011-01-03 09:12:59;1294042015.150278
    2011-01-03 09:33:45;2011-01-03 09:36:32;1294043625.150546
    2011-01-03 09:43:43;2011-01-03 09:51:12;1294044223.150634
    2011-01-03 09:49:31;2011-01-03 09:51:13;1294044571.150687
    2011-01-03 10:14:34;2011-01-03 10:17:04;1294046074.150895
    2011-01-03 10:37:45;2011-01-03 10:39:02;1294047465.151107
    2011-01-03 10:40:25;2011-01-03 10:42:28;1294047625.151144
    2011-01-03 10:39:53;2011-01-03 10:46:28;1294047593.151136
    2011-01-03 10:56:57;2011-01-03 10:57:35;1294048617.151281
    2011-01-03 11:37:17;2011-01-03 11:38:07;1294051037.151658
    2011-01-03 12:01:13;2011-01-03 12:03:10;1294052473.151848
    2011-01-03 12:11:18;2011-01-03 12:11:41;1294053078.151915
    2011-01-03 12:26:42;2011-01-03 12:30:17;1294054002.151983
    2011-01-03 13:50:14;2011-01-03 14:08:16;1294059014.152013
    2011-01-03 14:10:45;2011-01-03 14:13:08;1294060245.152170
    2011-01-03 14:14:51;2011-01-03 14:15:20;1294060491.152266
    2011-01-03 14:16:04;2011-01-03 14:16:29;1294060564.152286
    2011-01-03 14:16:55;2011-01-03 14:17:12;1294060615.152303
    2011-01-03 14:17:51;2011-01-03 14:18:09;1294060671.152311
    2011-01-03 14:24:55;2011-01-03 14:29:46;1294061095.152383
    Auriez-vous une idée du type de requête que je dois mettre en place pour obtenir le résultat escompté.

    Merci par avance pour vos réponses.

    Patrick

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bonjour,

    Je ne suis pas sur que la requete passera en une fois vu le travaille que ca représente.

    Ceci étant dit, il va vous falloire un calendrier au sens relationnel du terme qui ira jusqu'à la minute.

    Ensuite il faudra recouper votre calendrier avec votre table.

    Il serai aussi peut-être utile de tronquer votre timestamp actuel à la minute pour éviter que le sgbd n'est à le faire pendant la requête.
    edit : ceci était bete de ma part

  3. #3
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Tu peux créer une table minutes (minute DATETIME PRIMARY KEY) contenant les (365 * 24 * 60) = 525600 minutes d'une année.
    Puis tu fais la requête suivante
    Code MySQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT minute, COUNT(DISTINCT session_number) AS simultanées
    FROM minutes
    INNER JOIN connexions ON minute BETWEEN debut AND fin
    GROUP BY minute
    ORDER BY minute
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  4. #4
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut
    Bonjour!

    Autre chose qui n'a pas de rapport direct avec la question posée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    `session_number` varchar(32) NOT NULL DEFAULT ''
    Pourquoi utiliser un varchar(32), une colonne de type numérique n'irait pas ??

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par GyZmoO Voir le message
    Bonjour!

    Autre chose qui n'a pas de rapport direct avec la question posée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    `session_number` varchar(32) NOT NULL DEFAULT ''
    Pourquoi utiliser un varchar(32), une colonne de type numérique n'irait pas ??
    Qui te dit que ce "session_number" est entièrement numérique ?

    Et s'il ne s'agit pas d'un identifiant technique pour la base de données, inutile d'utiliser un type numéirque ; tu ne vas pas faire de calcul avec cette colonne.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Exact, session_id, sous PHP, par exemple, accepte [a-z][A-Z][0-9]mais aussi les tirets et les vigules
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  7. #7
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut
    Oula, au temps pour moi.

    Cependant :

    Et s'il ne s'agit pas d'un identifiant technique pour la base de données, inutile d'utiliser un type numéirque
    Je ne comprends pas trop le sens de cette phrase, si cette colonne ne doit accueillir que des données numériques autant utiliser des types numériques non?

    En fait j'ai du mal avec :

    tu ne vas pas faire de calcul avec cette colonne
    ?!

  8. #8
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Par défaut
    Bonsoir,

    Merci pour vos réponses.

    Je vais mettre en application les conseils de Maljuna Kris.

    Pour GyZmoO, ce n'est pas moi qui est créé la table je ne fais que récupéré les données.

    Et j'ai récupéré le champ session_number dans l'idée de faire du count() .

    Je vous tiens au courant.

    Bon Week End à tous

  9. #9
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    tu pourrais faire une procédure stockée qui va avoir comme paramètre l'année:
    • tu stockes dans une table temporaire le résultat d'un count sur une période d'une minute que tu va décaler par pas d'une minute sur la période
    • tu affiche le contenu de ta table temporaire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    delimiter $$
    drop procedure if exists `stats annuelles`;
    create procedure `stats annuelles`(in annee int)
    begin
      declare d datetime default concat(annee,'-01-01 00:00:00');
      declare f datetime default concat(annee+1,'-01-01 00:00:00');
      create temporary table `annee choisie`(
        `date`        datetime NOT NULL,
        `connexion` int NOT NULL,
      );
      while d<f do
        insert into `annee choisie`(`date`,`connexion`)
          select debut,count(distinct `session_number`)
          from stats
          where (d between `debut` and `fin`);
        set d=addtime(d, '0:1:0');
      end do;
      select `date`,`connexion` from `annee choisie`;
    end$$
    delimiter ;
     
    -- appel
    call `stats annuelles`(2011);
    -- dans la procédure, stats est le nom de la table où tu stockes ton csv

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Soit 525 600 requêtes pour satisfaire le besoin (j'pense quand même qu'une requete avec jointure serai mieux dans ce cas là !)

  11. #11
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    il faudra par contre faire la table des minutes à la volée car ton analyse implique qu'elle contiennent les dates liées à l'année concernée... ce qui implique une procédure puisqu'il faut se taper un intervalle... donc tu les auras quand même si tu génères ta table à la volée...

    par contre si tu poses 1 index sur debut, là on optimise énormément le résultat...

    la requête avec l'inner et la génération des dates de l'année est je pense un peu plus rapide... certes...



    après je pense pas qu'il exécute ça tous les jours

    [edit] j'ai simplifié la procédure

Discussions similaires

  1. [Oracle] Problème de connexions simultanées différentes
    Par schnito dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 02/06/2006, 11h45
  2. Réponses: 5
    Dernier message: 17/05/2006, 09h19
  3. [Tomcat]Problème de connexion simultanée en JSP/Tomcat
    Par shingo dans le forum Tomcat et TomEE
    Réponses: 11
    Dernier message: 09/01/2006, 09h00
  4. connexion simultane à une base de données interbase
    Par sophie1977 dans le forum InterBase
    Réponses: 4
    Dernier message: 14/11/2005, 09h38
  5. Limiter de nombre de connexions simultanées
    Par Drahu dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/09/2005, 11h43

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