磨砺技術珠矶,踐行資料之道,追求卓越價值
回到上一級頁面: PostgreSQL基礎知識與基本操作索引頁 回到頂級頁面:PostgreSQL索引頁
利用PostgreSQL的notify /listen 機制,可以實作在psql用戶端看到通知消息。
但是,如果是Java 應用程式,将會是怎樣的?
按照PostgreSQL的官方文檔,是這樣說的:
http://jdbc.postgresql.org/documentation/91/listennotify.html
A key limitation of the JDBC driver is that it cannot receive asynchronous notifications and must poll the backend to check if any notifications were issued.
Java程式通過JDBC Driver,來被資料庫端資料變化/消息通知激活,是不能直接實作的。
隻不過是采用變通方式,還是要輪詢資料庫端,隻是"select 1"這種查詢,可以盡量使網絡通訊量較少。
摘要其關鍵代碼如下:
打個比方來說,劇場看門人和劇場經理是觀察者模式,劇場經理有了新劇目,他會通知看門人。
而你作為觀衆,沒必要老去打擾繁忙的劇場經理,隻要隔一段時間打電話給劇場看門人。
電話費比較貴(越洋國際電話10美刀/分鐘)是以,你給看門人打電話時,隻是簡單問候。
如果劇場看門人已經被劇場經理通知有新劇目,他會告訴你說有新戲某某!你就知道有新劇目了。
你作為觀衆就是 Java Thread
電話裝置和電話線就是 JDBC Driver
你給看門人打電話就是 "select 1"
看門人就是 libpq裡的 PGNotification
劇場經理就是 PostgreSQL背景伺服器程序
你的大老闆則是最終使用者。大老闆看來,下面的經理(Java Application)忙着向他彙報工作;
當國外劇場有新劇目的時候,花很少錢(你和看門人聯系,廢話從不多講),也沒有耽誤(電話都是你這個Java Thread 來用的) 工作,就知道了消息;于是大老闆坐飛機去悉尼看戲去也。