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

Threads & Processus C++ Discussion :

Thread et base de donnée


Sujet :

Threads & Processus C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 95
    Par défaut Thread et base de donnée
    Bonjour,

    Je suis actuellement en train d'écrire une petite application. Elle consiste à télécharger des pages web, extraire des meta keyword et des liens. Ces liens et ces metakeyword sont inséré dans la base de donnée. Et je télécharge à nouveaux les liens et les keywords.

    J'ai besoin que plusieurs thread écrivent et lisent dans cette base. Je viens de passer plusieurs heures à me remémorer ce que j'avais appris sur les mutex, les sémaphores etc... et je dois avouer que ça me dépasse un peu.

    Je pensais donc à une chose solution : est ce qu'il serai possible de bloquer l'écriture ou la lecture dans la base? C'est à dire qu'un seul thread ne peut avoir accès à la base, que ce soit en écriture ou en lecture.
    Je pensais à une variable de classe (le patern singleton je crois). Je vérifie qu'aucun thread n'accède à la base, si c'est le cas on bloque, puis on y accède.

    Pensez vous que c'est une bonne solution? Et quel outil utiliser? J'aimerai faire une opération atomique :

    "Si aucun thread n'accède à la base, je bloque l'accès". Mais du coup, ça revient à faire une exclusion mutuelle si j'ai bien compris.

    Est ce que le fait de bloquer ma base optimisera quand même mon programme? Je pense que le thread passera 80% du temps à envoyer la requette et télécharger la page. Il passera 20% du temps à lire ou écrire dans la base. C'est ce que je suppose, êtes vous d'accord avec cette idée?

    Donc si ces 20% ne sont pas effectué en multithread, ça devrai quand même optimiser mon programme logiquement, non?


    J'ai lu cette doc en particulier sur boost http://miles.developpez.com/tutoriel...ost/thread/#LI

    mais j'avoue que je n'ai rien compris aux concepts de ScopedLock, TryLock etc... Je n'ai pas trouvé les explications clair.


    J'espère vous avoir exposé clairement mon problème. Merci pour votre attention, n'hesitez pas à me demander des précisions.

    Merci!

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par Zorgloub Voir le message
    Bonjour,

    Je suis actuellement en train d'écrire une petite application. Elle consiste à télécharger des pages web, extraire des meta keyword et des liens. Ces liens et ces metakeyword sont inséré dans la base de donnée. Et je télécharge à nouveaux les liens et les keywords.

    J'ai besoin que plusieurs thread écrivent et lisent dans cette base. Je viens de passer plusieurs heures à me remémorer ce que j'avais appris sur les mutex, les sémaphores etc... et je dois avouer que ça me dépasse un peu.

    Je pensais donc à une chose solution : est ce qu'il serai possible de bloquer l'écriture ou la lecture dans la base? C'est à dire qu'un seul thread ne peut avoir accès à la base, que ce soit en écriture ou en lecture.
    Je pensais à une variable de classe (le patern singleton je crois). Je vérifie qu'aucun thread n'accède à la base, si c'est le cas on bloque, puis on y accède.

    Pensez vous que c'est une bonne solution? Et quel outil utiliser? J'aimerai faire une opération atomique :

    "Si aucun thread n'accède à la base, je bloque l'accès". Mais du coup, ça revient à faire une exclusion mutuelle si j'ai bien compris.

    Est ce que le fait de bloquer ma base optimisera quand même mon programme? Je pense que le thread passera 80% du temps à envoyer la requette et télécharger la page. Il passera 20% du temps à lire ou écrire dans la base. C'est ce que je suppose, êtes vous d'accord avec cette idée?

    Donc si ces 20% ne sont pas effectué en multithread, ça devrai quand même optimiser mon programme logiquement, non?


    J'ai lu cette doc en particulier sur boost http://miles.developpez.com/tutoriel...ost/thread/#LI

    mais j'avoue que je n'ai rien compris aux concepts de ScopedLock, TryLock etc... Je n'ai pas trouvé les explications clair.


    J'espère vous avoir exposé clairement mon problème. Merci pour votre attention, n'hesitez pas à me demander des précisions.

    Merci!
    Pour avoir fait la même chose dans un autre environnement (multi thread qui ecrivent et lisent dans une base de données), je ne m'était pas posé de question et j'avais laissé le moteur de la base de données gérer ses propres lock.

    Cela fonctionnait avec une base de données "SQL Server" et "MySQL" et je suppose que cela fonctionne avec toutes les bases de données dignes de ce nom.

    Je ne sais pas si cela répond à ta problématique

    Raymond
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre émérite
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Par défaut
    La majorité des bases de données basées sur le model client/serveur implémentent une gestion de transaction.

    Pour ce qui est de SQLite, il s'agit d'un lock sur le fichier.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Je suis du même avis, les transactions n'ont pas été inventées sans raison.
    Néanmoins, vu que tes threads n'ont pas besoin d'accéder à ta base en permanence, il faut se poser la question du coup de maintient et/ou de l'établissement des connexions. En java, on utilise généralement un pool de connexions, j'ignore si il en existe de facilement utilisable en C++.

  5. #5
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    ACE et boost::asio en proposent je crois.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Ca c'est de connexions tcp, ce qu'il faudrait c'est un pool de connexions vers base de données.

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. Threads et base de données
    Par r0seBa dans le forum C#
    Réponses: 10
    Dernier message: 30/03/2012, 14h59
  4. [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
  5. 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

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