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

SQL Procédural MySQL Discussion :

INSERT fréquents : éviter les traitements inutiles ?


Sujet :

SQL Procédural MySQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 17
    Points : 8
    Points
    8
    Par défaut INSERT fréquents : éviter les traitements inutiles ?
    Bonjour !

    Je travaille sur une table dans laquelle chaque ligne correspond à un fichier.

    Les fichiers sont tous stockés dans un dossier, et à chaque fois que j'ajoute des fichier j'éxécute une fonction qui met à jour la table en conséquence.

    Pour l'instant j'utilise la méthode suivante : avec INSERT IGNORE, j'éxécute la création d'une ligne dans la table pour chaque fichier du répertoire. Grâce à IGNORE, tous les fichiers déjà listés dans la table sont ignorés et au final seuls les nouveaux fichiers sont inscrits.

    Je ne sais pas si cela représente beaucoup de travail pour le serveur mais quoi qu'il en soit, je suis persuadé qu'il existe une méthode plus "propre" ! Là, je parcours des centaines d'enregistrements pour pouvoir en ajouter 3 ou 4.

    Existe-t-il un moyen plus simple de lire les nouveaux fichiers d'un répertoire afin de les inscrire dans une table, ou ma méthode est-elle très légère pour le serveur et dans ce cas pas la peine de la modifier ?

    Merci d'avoir lu mon long message

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Bonjour,

    Je pense que ton système présente pas mal d'inconvénients. Outre le problème du INSERT IGNORE, on peut se demander par exemple comment tu gères les cas de suppression d'un fichier ou de modification de son nom. En faisant simplement des INSERT on risque d'avoir une base non cohérente avec les fichiers réels.

    Peux-tu nous en dire plus sur le contexte ? Par exemple : est-ce que l'ajout d'un fichier est une action d'un utilisateur lambda du système d'exploitation, un upload, est-ce prévisible ? En quel langage développes-tu ton application si application il y a ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    L'ajout de fichiers se fait par paquets de 4 ou 5, seules 2 ou 3 personnes éxécutant cette opération (par ftp).

    J'étais trompé avec IGNORE (d'ailleurs il y a là une erreur de traduction dans la doc Mysql), je fais un INSERT simple, le champ filename étant unique ça évite les doublons.

    C'est un simple site web php soutenu par mysql.

    Logiquement aucun fichier ne devrait être supprimé (c'est un site à durée de vie très courte, qui reporte les photos d'un événement). De même, aucun nom ne sera modifié (toujours logiquement).

    Voilà ! J'ai utilisé la méthode avec INSERT parce que je ne voyais aucun autre moyen, mais peut-être existe-t-il une méthode classique pour ce type de situation.

  4. #4
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Tu as dit que "à chaque fois que j'ajoute des fichier j'éxécute une fonction qui met à jour la table en conséquence"... tu as donc le moyen de déclencher un traitement à chaque fois qu'un nouveau fichier arrive ?
    Ou c'est juste un script que tu lances de temps en temps et qui vérifie la présence de nouveaux fichiers ?

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    C'est un script qu'on lance de temps en temps, en fait à chaque fois que quelqu'un a ajouté des fichiers il se rend sur une page pour rentrer les mots-clés liés à ces nouveaux fichiers. Pour arriver sur cette page, il clique sur un bouton qui en passant s'occupe de générer des miniatures dans un second dossier et d'éxécuter la commande MySQL.

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Désolé, j'en profite pour poser une question supplémentaire : c'est possible d'enchaîner plusieurs requêtes avec un seul mysql_query ?
    J'ai essayé avec un ; pour séparer les requêtes et ça me renvoie une erreur de syntaxe.

  7. #7
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Citation Envoyé par tempirate
    Désolé, j'en profite pour poser une question supplémentaire : c'est possible d'enchaîner plusieurs requêtes avec un seul mysql_query ?
    Non, et ce pour empêcher l'injection depuis un formulaire de code SQL précédé d'un point-virgule par un utilisateur malveillant.

    Je vois deux méthodes plus pratiques que ce que tu fais actuellement :

    - Laisser tomber le FTP manuel et réaliser les uploads en PHP au sein de ton site. Du coup la maîtrise sur ce qui est uploadé est totale, on sait exactement quels fichiers rajouter dans la base de données.

    - Indiquer au serveur FTP de déclencher un script lors du dépôt d'un nouveau fichier (je ne sais pas si cette fonctionnalité existe). Ce script récupère le chemin du nouveau fichier et l'insère dans la base.

    Sinon en gardant le système actuel il doit y avoir moyen de repérer quelle est la date de dernière modification de chaque fichier, et la comparer avec la date de dernière exécution du script pour voir si le fichier est nouveau. Mais c'est incomparablement plus lourd puisque tous les fichiers doivent être passés en revue.

  8. #8
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Merci pour tes réponses, je vais intégrer l'ajout des fichiers dans la base lors de l'upload par php. Je ne pense pas pouvoir utiliser la deuxième solution car je n'ai qu'un accès limité à mon serveur ftp (free).

Discussions similaires

  1. éviter les doublons requete insertion
    Par warraf dans le forum Access
    Réponses: 5
    Dernier message: 29/11/2005, 13h53
  2. Enlever les espaces inutiles d'un AnsiString
    Par jamesb dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/01/2005, 12h40
  3. Comment éviter les doublons dans ma table
    Par einegel dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/11/2004, 12h18
  4. Éviter les doublons dans une requete
    Par royrremi dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 03/08/2004, 19h37

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