2013-07-11 37 views
0

我有這樣的問題。獲取MYSQL上次更新的數據或最新插入的數據

我在新條目訪問表這是目前有超過10萬的數據的數據庫。

現在我想寫一個監聽器,意思是如果有任何新記錄從其他地方插入表中,我必須得到通知

我的問題是:什麼是最好和最快的方式來做到這一點?因爲在一天中應該有大約500個新數據在新條目表中。每次使用線程是否適合檢查數據庫?

我使用Java來做到這一點與MySQL。

請指教我。

+1

澄清:究竟是什麼更新表格?如果通過Java應用程序插入條目,則可以使用類似JMS的內容在每次插入完成時發送消息。如果沒有,你將不得不使用MySQL消息隊列,這是MySQL的一個插件。您也可以打開並監視二進制日誌。 –

+0

這個數據庫是用PHP應用程序和數據插入部分開發的,它帶有PHP應用程序(PHP應用程序是一個網絡應用程序,超過1000個用戶正在訪問它)。我想捕捉的是,如果有任何新記錄被分配給一個人,我必須得到它。我想用java編寫一個程序,如果某個特定人員有新的記錄,我必須彈出一個。因此,我必須每次檢查數據庫以提供彈出消息。 –

+0

似乎MySQL消息隊列是你最好的選擇。儘管如此,我並不太熟悉它。 –

回答

1

我不確定是否存在任何用於Mysql更改的偵聽器。因此,獲取這些細節並不容易。

但在mysql中有一些名爲'The Binary Log'的文件,其中包含描述數據庫更改的「事件」,例如表創建操作或對錶數據的更改。

因此,跟蹤更改的一種方法是輪詢這些日誌。挑戰在於這些日誌是以二進制格式編寫的。 Mysql提供了一個名爲mysqlbinlog的實用程序來以文本格式處理這些日誌。

這是給你的救援一個Java解析器,可以讀出mysql的二進制日誌:

https://github.com/tangfl/jbinlog

集成所有這些零零碎碎的,你可以得到你所需要的。

+0

不能我使用任何SQL查詢來做到這一點? –

+0

@RakithaFernando我不這麼認爲。如果您是數據庫的所有者,那麼您可以通過API等統一界面來限制對數據庫的訪問。然後您可以根據需要記錄詳細信息。 –

+0

我做了這樣的事情,我寫了一個結果集來獲得最大id,然後我把它放到了數組列表中。然後我檢查第一個值和最後一個值是否相等。如果他們不相同,這意味着表更新新記錄。完全正常工作,但我想知道現在的數據速度... –

0

嘗試這個...

numero = stmt.executeUpdate(query, Statement.RETURN_GENERATED_KEYS); 

看看了JDBC Statement接口的文檔。

0

我用java定時器類作爲此解決方案的替代方案。現在它工作正常。它每10秒檢查一次數據庫,如果條件成立,它會執行我想要的。