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

C# Discussion :

Threads et base de données


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    Par défaut Threads et base de données
    Bonjour,

    Je suis entrain de réfléchir à organiser une partie de mon application en plusieurs threads. J'ai par exemple 100 fois le même calcul à réaliser avec des jeux de données différents. Chaque calculs faisant des insertions dans la base de données.

    Je voulais diviser ce calcul en plusieurs threads (4 ?) mais chaque thread ayant des insertions à faire sur la base de données je me suis dit que ça pouvait devenir critique (même si chaque calcul ne fait pas d'update ou du moins pas sur les même tuples que les autres calculs).

    Que pouvez le dire la dessus ? Est-ce que ça pose problème ? Si oui comment faire ?

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par r0seBa Voir le message
    Que pouvez le dire la dessus ? Est-ce que ça pose problème ?
    Si tu es sûr que chaque Thread utilise des données différentes et n'effectue que des insertions en base de données il n'y a pas de mise à jour ni de suppression. Alors cela ne posera pas de problèmes de conflits vu que le risque de ne pas respecter la contrainte de clef primaire, d'écraser une donnée existante, de la supprimer est réduite à zéro.

    Citation Envoyé par r0seBa Voir le message
    Si oui comment faire ?
    Il y a plusieurs méthodes. Tu peux utiliser un pool de thread (regarde la classe ThreadPool) comme tu peux utiliser un ensemble d'instances de la classe BackgroundWorker (cette classe t'offre en plus des évènements très intéressants par rapport à la classe ThreadPool)

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    les bonnes bases de données supportent des milliers de connexions simultanément, et pourquoi pas sur la même table, ca s'occupe de gérer l'intégrité et le verouillage
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    les bonnes bases de données supportent des milliers de connexions simultanément, et pourquoi pas sur la même table, ca s'occupe de gérer l'intégrité et le verouillage
    Tout SGBDR (Système de Gestion de Bases de Données Relationnelles) digne de ce nom doit tenir compte de ce que tu viens de dire : intégrité, gestion des accès concurrentiels etc.

    Par contre je ne pense pas que le verrouillage soit d'une importance dans le cas présent. Il s'agit d'insertions de données (pas de modification, ni de suppression) alors out le verrouillage d'une ligne. À moins que tu veuilles parler de verrouillage au niveau de la table (je ne vois trop l'utilité dans le cas d'une insertion surtout que les données sont différentes d'après l'auteur de la discussion ).
    Admettons qu'il verrouille toute la table alors je me demande à quoi servirait d'avoir plusieurs Thread en parallèle vu que chaque thread devra attendre que le précédent déverrouille la table donc insère toutes les données qu'il manipule pour que l'autre puisse commencer ses insertions. ça revient tout simplement à faire du séquentiel et ce que l'auteur fait actuellement sans aucun verrouillage.

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    c'était une explication générique pour dire qu'il n'y a pas à s'inquiéter du nombre de threads qui travaillent sur une base de données
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Par défaut
    Citation Envoyé par h2s84
    Admettons qu'il verrouille toute la table alors je me demande à quoi servirait d'avoir plusieurs Thread en parallèle vu que chaque thread devra attendre que le précédent déverrouille la table donc insère toutes les données qu'il manipule pour que l'autre puisse commencer ses insertions. ça revient tout simplement à faire du séquentiel et ce que l'auteur fait actuellement sans aucun verrouillage
    Tous dépend de ce qui est le plus long en terme de temps :
    - le temps de calcul
    - le temps de verrou de la table.

    Si mon temps de calcul est de 2 fois plus long que le temps ou ma table reste verrouillé, alors avec 2 threads j'irai presque fois plus vite pour faire mes 100 calculs.

  7. #7
    Membre très actif
    Inscrit en
    Juin 2009
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 219
    Par défaut
    Citation Envoyé par r0seBa Voir le message
    Bonjour,

    Je suis entrain de réfléchir à organiser une partie de mon application en plusieurs threads. J'ai par exemple 100 fois le même calcul à réaliser avec des jeux de données différents. Chaque calculs faisant des insertions dans la base de données.

    Je voulais diviser ce calcul en plusieurs threads (4 ?) mais chaque thread ayant des insertions à faire sur la base de données je me suis dit que ça pouvait devenir critique (même si chaque calcul ne fait pas d'update ou du moins pas sur les même tuples que les autres calculs).

    Que pouvez le dire la dessus ? Est-ce que ça pose problème ? Si oui comment faire ?

    Merci d'avance
    Dans ton cas, je pense que le goulet viendra surtout de l'algorithme que tu vas utiliser pour répartir tes données sur les différents threads.
    Lors d'une insertion en base de données, Oracle par exemple, ne fait un lock que sur la ligne concernée. Ce qui n'impactera pas les autres threads.

Discussions similaires

  1. Thread qui parcourt une base de données et extrait un champ
    Par Mednet dans le forum Général Java
    Réponses: 3
    Dernier message: 03/04/2013, 19h03
  2. Réponses: 7
    Dernier message: 17/09/2012, 06h13
  3. [PHP 5.2] Multi threading et base de donnée
    Par misakilou dans le forum Langage
    Réponses: 1
    Dernier message: 02/03/2012, 13h31
  4. Lecture dans la base de donnée et thread
    Par abbd dans le forum Windows Forms
    Réponses: 1
    Dernier message: 21/01/2008, 09h56
  5. Thread et base de donnée
    Par Zorgloub dans le forum Threads & Processus
    Réponses: 11
    Dernier message: 30/10/2007, 09h57

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