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

ADO.NET Discussion :

Détecter des changements côté base de données [Débutant]


Sujet :

ADO.NET

  1. #1
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut Détecter des changements côté base de données
    Bonjour,

    Pour donner un tout petit peu de contexte, je n'ai pour le moment travaillé qu'avec SQLite, qui vient avec son API. Je n'ai donc aucune expérience avec ADO.net, à part avoir suivi un tutoriel basique.

    Au sein d'un système, j'ai un module qui gère des travaux à effectuer. Ces travaux ont des états (ils peuvent être en pause, en cours d'éxecutions, terminés, etc....), des paramètres, et des données. Ce module utilise donc une base de données (SQLite) pour stocker la liste des travaux, leurs paramètres, et un chemin vers où sont stockées les données sur le disque. Ce module annonce les travaux ainsi que leurs états et paramètres à d'autres modules du système (des UI par exemple). Du coup j'ai une interface entre ce module et les autres modules afin de pouvoir annoncer qu'un nouveau travail vient de démarrer son exécution, ou qu'un autre est terminé, etc....

    Le soucis, c'est que l'on s’aperçoit que finalement dans notre système presque tout le monde a besoin de connaitre les états et paramètres de ces fameux travaux, et ce pour des tas de raisons différentes. Avoir à passer par ce module qui gère les travaux pour connaitre les états des travaux devient une usine à gaz car il faut en permanence étendre l'interface de ce module pour les nouveaux besoin des différents clients.

    Il a donc été décider de sortir la base de données de ce module qui reste le seul à gérer les cycles de vies des travaux, et remplacer SQLite par un SQL server. On veux un système où les modules qui veulent connaitre l'état des travaux s'enregistrent auprès de la base de données, et reçoivent des notifications lorsque des états des travaux changent. On veut vraiment un mécanisme de notification pour éviter de faire du polling.

    Du coup on m'a conseillé de regarder du côté de ADO.NET ce qu'il est possible de faire. D'où ma question, existe t'il dans l'API de ADO.NET des mécanismes de notification? Si oui, pourriez vous pointer vers de la documentation ou un tutorial concernant ce mécanisme de notification? Dans le cas contraire, est-ce que vous avez des idées sur comment mettre ceci en place?

    Merci beaucoup pour votre aide.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Oui ca existe, regarde du côté de la classe SqlDependency. Tu trouveras plus d'info sur le mécanisme et des exemples ici : Query Notifications in SQL Server.

    Attention car utiliser ce mécanisme n'est pas toujours une bonne idée, parfois le polling reste la meilleure option
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    Merci beaucoup pour la réponse, je vais investiguer cela

    Citation Envoyé par DotNetMatt Voir le message
    Attention car utiliser ce mécanisme n'est pas toujours une bonne idée, parfois le polling reste la meilleure option
    Auriez-vous un peu plus d'info concernant ce point ?

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Oui on peut citer plusieurs cas :
    • Forte sollicitation des données: si les données monitorées sont très fréquemment sollicitées, cela peut induire énormément de notifications (ex. une notification toutes les 10 millisecondes). Le mécanisme de notification ayant un coût non négligeable, cela peut aussi jouer sur les performances globales de SQL Server...
    • Redémarrage du serveur: lorsque le serveur SQL redémarre tous les abonnements sont perdus. Cela peut poser problème si ton application n'est pas en mesure de se réabonner.

    Je t'invite à lire cet excellent article: The Mysterious Notification. Même s'il date un peu, il présente en détail ce qui se passe lorsqu'on utilise le mécanisme.

    Donc même si cela a l'avantage d'être un mécanisme natif à SQL Server, ce n'est pas anodin. Le polling offre beaucoup plus de souplesse et de contrôle, pour un coût moindre. Et avec des technos telles que SignalR ou un service WCF en duplex on peut pousser les notifications vers du client lourd et Web sans trop d'effort.

    [EDIT] Et si la seule raison pour ne pas utiliser le polling est que ca soumet trop de requêtes sur SQL Server, rassures-toi, SQL Server est capable de gérer un très grand nombre d'opérations en simultané. Le seul problème qui puisse se présenter est une mauvaise modélisation de la base de données... Le NASDAQ a migré sur SQL Server et ils arrivent à gérer plusieurs milliards de requêtes par jour pour 1 Petabyte de données:
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    Merci beaucoup pour ces informations complémentaires. Vous m'avez donné les informations dont j'avais besoin, je passe donc le sujet en résolu.

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

Discussions similaires

  1. Détecter le changement de base de données
    Par gebtun dans le forum Développement Web en Java
    Réponses: 20
    Dernier message: 03/04/2013, 17h36
  2. Restriction des accès à la base de données
    Par palmi38 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 21/10/2005, 17h17
  3. Comment gérer efficacement des listes en Base de données ?
    Par alexk dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 12/04/2005, 20h21
  4. Où trouver des concepteurs de Base de Données?
    Par TomCrouise dans le forum Décisions SGBD
    Réponses: 11
    Dernier message: 13/12/2004, 16h13

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