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

Administration MySQL Discussion :

Suppression / modification de données vs connexions simultanées [MySQL-5.6]


Sujet :

Administration MySQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 51
    Points : 29
    Points
    29
    Par défaut Suppression / modification de données vs connexions simultanées
    Bonjour,

    Je rempli une table en important les données d'un fichier csv.
    Comme le fichier peut être modifié, actuellement à chaque lancement du programme, je supprime les données de ma table et je réimporte alors le nouveau fichier.
    Ce qui est assez lourd et me pose un problème :
    comment faire si il y à plusieurs connexions simultanées sur ma base de données ?

    Quelle est alors la meilleure façon de procéder ?

    Doit-on mettre à jour les données de la table régulièrement à heure fixe, lorsque qu'il y a le moins de chance d'avoir des connexions simultanées (genre à 3h du matin) ?
    Mais ce qui inclus de laisser le programme tourner en permanence.

    Peut-on à chaque lancement du programme, connaître le nombre de connexions et, si il y en a qu'une, mettre à jour la table ?

    D'autres solutions existent-elles ?

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Pour pouvoir mettre à jour ma base de données, je voudrais pouvoir connaître le nombre de connexions en cours avec mon utilisateur "consultant".
    Existe-t-il une requête équivalente à la commande SHOW PROCESSLIST que je puisse exécuter en java ?
    J'ai trouvé celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM information_schema.PROCESSLIST;
    Mais elle ne fonctionne qu'avec l'utilisateur root.
    Et je ne peux transmettre le droit suivant à mon utilisateur "consultant" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GRANT SELECT ON information_schema.PROCESSLIST TO 'consultant' IDENTIFIED BY 'mdp';
    En effet, ça m'indique "Access denied"...

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Personne pour m'expliquer la meilleure façon de gérer les connexions simultanées svp ?

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,


    De quelle manière importez-vous ce fichier ? insert / load ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Je les importe avec l'instruction LOAD DATA INFILE.

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Pour les droits, le mieux étant encore de regarder la doc MySql : http://dev.mysql.com/doc/refman/5.6/...ist-table.html


    Concernant votre problème, LOAD DATA INFILE passe outre les transactions.

    A partir de là vous n'avez aucun moyen de gérer correctement la concurrence.


    Une solution serai de charger dans une table temporaire les données, puis dans une même transaction de type SERIALIZE supprimer / charger votre table (via delete / insert)

    De cette manière vous serez sûr qu'une seule personne utilise la table à la fois (http://dev.mysql.com/doc/refman/5.0/...ion-model.html)


    Vous pourriez aussi gérer ceci du côté applicatif, en modélisant un système de jeton, afin qu'un seul utilisateur n'est accès au chargement de la table.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Si j'ai bien compris, l'idée serait qu'à chaque connexion à la base, on créer une table temporaire dans laquelle on y copie les données de la table originale.
    Ainsi, lorsqu'un utilisateur met à jour la table initiale, ça ne gêne pas les autres utilisateurs travaillant avec la table temporaire ?

    Qu'entend par modéliser un système de jetons ?

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Si j'ai bien compris, l'idée serait qu'à chaque connexion à la base, on créer une table temporaire dans laquelle on y copie les données de la table originale.
    Ainsi, lorsqu'un utilisateur met à jour la table initiale, ça ne gêne pas les autres utilisateurs travaillant avec la table temporaire ?
    Non, la table temporaire servirait seulement dans le cas d'une demande de rechargement de la table à chargée.

    Ceci permet par la suite d'utiliser des transactions afin de locker la table cible et ainsi éliminé les risques de mise à jour simultané des données par différent utilisateur.



    Qu'entend par modéliser un système de jetons ?
    Quand une personne veux modifier la table via un load data infile, on lui donne un jeton.
    Si parallèlement une autre personne veut aussi modifier la table, elle demandera un jeton mais celui-ci sera déjà pris. Elle devra donc attendre.

    Je vous laisse chercher pour l'implémentation.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2014
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Connexion simultanée à 2 bases de données avec PDO dans un même script
    Par gentil2005 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 17/05/2015, 00h12
  2. Suppression et modification de données dans une base Access depuis VB6
    Par sousousoumia dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 08/09/2012, 00h42
  3. Réponses: 5
    Dernier message: 08/07/2010, 08h07
  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. suppression base de donnée
    Par donny dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 31/07/2005, 10h55

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