MyBatisと話すことはできませんが、PostgreSQLにはパブリッシュ/サブスクライブシステムが組み込まれているため、ハッカーを大幅に減らすことができます。
まず、widgets
にトリガーを設定します これは、すべての挿入、更新、および削除操作で実行されます。主キーとNOTIFY
を抽出してもらいます
widgets_changed, id
。 (まあ、PL / pgSQLからは、おそらくPERFORM pg_notify(...)
が必要でしょう。 。)PostgreSQLは、トランザクションがコミットされた場合に通知をブロードキャストし、通知と対応するデータの変更の両方を他の接続から見えるようにします。
クライアントでは、このマップを最新の状態に保つための専用のスレッドを実行する必要があります。 PostgreSQLに接続します。LISTEN
widgets_changed
通知のキューイングを開始するには、SELECT * FROM widgets
マップにデータを入力し、通知が到着するのを待ちます。 (通知の確認には、明らかにJDBCドライバーのポーリングが含まれます
、それはひどいですが、あなたが思うほど悪くはありません。 PgNotificationPoller
を参照してください 具体的な実装については。)通知が表示されたら、示されたレコードを検索し、マップを更新します。 LISTEN
することが重要であることに注意してください 最初のSELECT *
の前 、レコードはSELECT *
間で変更される可能性があるため およびLISTEN
。
このアプローチでは、PostgreSQLがアプリケーションについて何も知る必要はありません。通知を送信するだけです。残りはアプリケーションが行います。シェルスクリプト、HTTP、コールバックがないため、データベースを再構成しなくても、アプリケーションを再構成/再デプロイできます。これは単なるデータベースであり、特別な複雑さを伴うことなく、バックアップ、復元、複製などを行うことができます。同様に、アプリケーションに特別な複雑さはありません。必要なのは、すでに持っているPostgreSQLへの接続だけです。