一千萬個為什麽

搜索

數據庫中的監控表

我想建立一個網站,作為數據庫中某個表的監視器,或充當該表上的監聽器

比方說我有桌子員工

我想創建一個網頁,監聽該表發生的變化(所有DML操作)

每當插入一條記錄時,我希望這個頁面提醒我“表格員工中插入了1行”,或者更新了我想得到警告“行號xx已更新”等等

那麽這樣做的最佳做法是什麽

日Thnx

最佳答案

第1部分:db觸發器。

這是使該解決方案成為可能/簡單/強大的關鍵部分。您需要創建一個寫入的數據庫觸發器每次員工表有更新或插入時,到另一個表(tblEmployeeChanges)。因此,如果在特定時刻他們對employee表進行了5次更改,tblEmployeeChanges會有新的5條記錄,如下所示:

EmployeeChangeID  ChangeType  EmployeeID  ChangeTime
1643              Insert      434243      2010-07-23 09:14:04
1644              Update      345345      2010-07-23 09:14:07
1645              Insert      345347      2010-07-23 09:14:21
1646              Update      345438      2010-07-23 09:14:39
1647              Update      435634      2010-07-23 09:14:41

您監控網頁然後每隔幾秒就會檢查一次這個表,或者無論如何您都希望(當用戶點擊“刷新”按鈕時),您的網頁將獲取此數據並顯示它。

這個表可能會變得非常大,但是使用好的索引會保持很高效。您可以隨時輕松清除“舊數據”。您將擁有EmployeeChangeID或ChangeTime上的聚簇索引,因此不應該進行常量添加,並且查詢不應該是一個大問題。

第2部分:簡單的Web REST服務

創建一個帶有EmployeeChangeID的.asmx頁面或簡單的wcf服務,並發送每個具有大於該記錄的EmployeeChangeID的tblEmployeeChanges記錄的信息。

第3部分:從監控頁面重復Ajax調用**。

每隔一秒,例如2秒,您的網頁頁面就會發送頁面知道的最後一個EmployeeChangeID。如果有任何新行,您的回調函數會將它們添加到顯示中(供人查看),發出蜂鳴聲或其他內容,並將列表中最後一個更改記錄的ID寫入javascript變量或隱藏輸入,在下一個ajax調用中使用(2秒後)。

例:

因此,在9:14:38,您的頁面會詢問自更改1645以來的所有更改,並且一無所獲。然後在9:14:40,(換1646);您的頁面顯示該數據。然後在9:14:42你的頁面要求1646年之後的每一個變化,什麽都不回來等等。

關於觸發器的註意事項是解決方案

我並不特別喜歡觸發器,有時幾個月沒有使用觸發器。但在這種情況下,這是必要的。請註意,如果您確實需要跟蹤系統中的更改,最好建立一個架構,其中每個更改都會跟蹤所有值,並且每個員工的每個屬性都保存在鍵值對表中,其中最新值為被認為是“活躍”的價值。這種架構有優點和缺點,可能不適合您。但是,如果架構認為跟蹤更改是事後的想法,那麽跟蹤更改將不得不像使用數據庫觸發器等工具一樣,以優雅的方式處理。

轉載註明原文: 數據庫中的監控表