我想你最好考慮讓事件驅動,而不是定期考慮性能和架構,如果可能的話。首先要通過使用該DBMS的觸發器(AFAIK,某些DBMS通過觸發器提供執行的Web服務提供執行的Web服務,但我不確定是否需要它)或原始應用程序的偵聽器來通知您的應用程序服務器@PostPersist(如果它在同一個Java進程中,你可以使用一些靜態或DI驅動的監聽器,否則你可以執行HTTP請求)。
現在您正在監聽數據庫的更改,您需要一種方法來通知感興趣的客戶端該更改。您可以選擇任何稱爲WebSocket或Comet的技術來實現這一點。然而,最簡單的選擇是在我看來採用這種用法的框架。正如我是Cettia的作者,我給你一個用Cettia編寫的例子,但是你可以像atmosphere-play這樣的其他項目做類似的工作。
// Assumes you are notified of database changes through this listener
// However, it doesn't matter
public class SomeEntityListener {
// Assumes you are using Dependency Injection framework like Spring or CDI
// so you can inject io.cettia.Server to anywhere you want to handle clients
@Inject
Server server;
// This method is called after persisting of some entity
@PostPersist
public void postPersist(SomeEntity e) {
// Broadcasts just a persisted entity to interested clients
// No matter how you are notified of database event, only this line is necessary
server.byTag("someentity-subscribers-postpersist", e);
}
}
關於如何安裝瑟提亞,見this quick start guide和a working example for Play。當然,你可以用香草WebSocket做到這一點,但它不是銀彈。 (這就是爲什麼這麼多的框架出現在各種語言和平臺)