2

2 つのアプリケーションが同じ MSSQL データベースを使用しています。

私のアプリケーションは、 pymssqlでsqlalchemyを使用しており、別のアプリケーションによって特定のテーブルに行が追加されたときに通知を受け取りたいと考えています。

これを行う正しい方法は何ですか?

4

1 に答える 1

1

あなたのアプリケーションを「消費者」と呼び、他のアプリケーションを「生産者」と呼びましょう。

いくつかのアプローチがあります。最適な方法は、予想されるレコード、プロデューサー、およびコンシューマーの数によって異なります。

  1. 少数のレコード、生産​​者および消費者インスタンスの場合、falseデフォルト値として「ack」フィールドをテーブルに追加できます。新しいエントリを処理した後、他のアプリケーションが「ack」を true に設定できるように、新しいエントリはこのフィールドを false に設定する必要があります。
  2. プロデューサー インスタンスが新しいレコードを挿入し、コンシューマー インスタンスが最終宛先テーブルにコピーした後にレコードを削除する、キューとして機能するテーブルを持つことができます。
  3. 最大限のスケーラビリティを実現するために、 AMQPなどを使用してコンシューマーとプロデューサー間の通信を管理できます

データベースの変更をポーリングするアルゴリズムは、基になる DBMS に大きな負荷をかける可能性があることに注意してください。

[アップデート]

バンからの提案:

AFTER INSERT トリガーを使用して、新しく挿入/更新された行のフラグまたは TableName と PrimaryKey を、SA アプリケーションが定期的にポーリングするヘルパー テーブルに格納することもできます。ただし、SA からの挿入もトリガーになるので注意してください。–バン

于 2012-07-31T06:01:06.293 に答える