2017-08-21 11 views
1

Je suis actuellement en train de développer un canal de lecteur de base de données à l'auteur de la base de données. Les connecteurs source et destination s'exécutent sur le serveur SQL. Le problème est qu'en définissant Intervalle dans la source sur 5 millisecondes, le canal interroge et écrit des données toutes les 5 millisecondes, même si les données ont été interrogées ou écrites auparavant. Par exemple, s'il n'y a qu'une seule ligne dans la base de données source, le canal continuera d'insérer la première ligne dans la base de données de destination toutes les 5 millisecondes à l'infini. Cela entraîne des lignes dupliquées infinies dans la base de données de destination.Mirth connecter la base de données à la base de données dupliquer

Est-il possible d'éviter une telle situation et de ne l'insérer dans la destination que si les données interrogées sont nouvelles?

Répondre

0

Vous n'avez pas publié vos chaînes, donc je ne sais pas à quoi ressemblent vos requêtes. De plus, vous n'avez pas publié le schéma db. En général, ce que vous devez faire est de mettre en place un moyen de garder une trace des enregistrements qui ont été traités. Une façon de le faire en ajoutant une colonne aux tables pertinentes qui a une valeur par défaut de «NEW» lorsque de nouveaux enregistrements sont insérés. Lorsque vous les avez traitées (par exemple copiées d'une base de données vers une autre), vous définissez l'état sur 'COPIED' via une instruction de mise à jour. En option, vous pouvez également avoir une colonne avec un horodatage qui indique quand l'enregistrement a été copié. Un autre moyen (probablement meilleur) est de le faire dans un tableau séparé qui garde une trace de toutes les mutations dans la base de données. Cela vous donne plus de flexibilité dans les événements que vous enregistrez.

0

Deux façons je peux penser: façon

  1. habituelle est d'avoir un drapeau situé dans la table de la DB que vous lisez, Une fois que les données sont lues à partir de cette table par hilarité, vous mettez à jour la table avec "Read" ou "Processed". Ensuite, vous allez écrire une requête de récupération basée sur ce drapeau, donc il n'insèrera des données que si le drapeau n'est pas égal à

  2. En cas de changement de DB n'est pas dans votre main, vous pouvez écrire une requête dans le fetch des données comme celle-ci "SELECT * FROM Table ORDER BY ID DESC LIMIT 1". ID étant votre primaire.