Notifications dans sqlalchemy sur les nouvelles lignes créées par une autre application

Deux applications utilisent la même database MSSQL.

Mon application utilise sqlalchemy avec pymssql et souhaite recevoir une notification lorsqu'une ligne est ajoutée à une table spécifique par une autre application.

Quelle est la bonne façon de faire cela?

Appelons votre application "consommateur", et l'autre application "producteur".

Il existe plusieurs approches, le meilleur ajustement dépendra du nombre de disques, producteurs et consommateurs que vous attendez.

  1. Pour un petit nombre d'loggings, d'instances de producteurs et de consommateurs, vous pouvez append un champ "ack" à la table avec false comme valeur par défaut. Les nouvelles inputs doivent avoir ce champ défini sur false, ainsi une autre application peut définir "ack" sur true après avoir traité les nouvelles inputs.
  2. Vous pouvez avoir une table faisant office de queue, où les instances de producteur insèrent de nouveaux loggings et les instances de consommateur suppriment les loggings après la copy dans la table de destination finale.
  3. Pour une évolutivité maximale, vous pouvez utiliser quelque chose comme AMQP pour gérer la communication entre les consommateurs et les producteurs

Sachez que tout algorithm impliquant l'interrogation de la database pour des modifications a le potentiel de grever lourdement le SGBD sous-jacent.

[mettre à jour]

Suggestion de van :

Juste pour l'exhaustivité des possibilités: vous pouvez également utiliser les triggersurs AFTER INSERT pour stocker un drapeau ou un TableName et une PrimaryKey de la ligne nouvellement insérée / mise à jour dans une table auxiliaire, que votre application SA interroge régulièrement. Cependant, soyez prudent car les insertions de SA triggersraient également le triggersur. – Van