我每分鐘都有一個程序從數據庫(MySQL)中查詢數據。同步數據,想跟蹤發生了什麼變化
while 1:
self.alerteng.updateAndAnalyze()
time.sleep(60)
但數據不會頻繁變化;也許一個小時或一天一次(更換另一個C++程序)
我認爲最好的方法是跟蹤變化,如果發生變化,然後我查詢和更新我的數據。
有什麼建議嗎?
我每分鐘都有一個程序從數據庫(MySQL)中查詢數據。同步數據,想跟蹤發生了什麼變化
while 1:
self.alerteng.updateAndAnalyze()
time.sleep(60)
但數據不會頻繁變化;也許一個小時或一天一次(更換另一個C++程序)
我認爲最好的方法是跟蹤變化,如果發生變化,然後我查詢和更新我的數據。
有什麼建議嗎?
這取決於你在做什麼,但SQLAlchemy的事件功能可能會幫助你。
它允許您在數據庫中發生任何事情時(即插入新行或設置列值後)運行代碼。我用它在Flask應用程序中啓動通知或其他異步過程。
http://docs.sqlalchemy.org/en/rel_0_7/orm/events.html#mapper-events
下面是從一個瓶的應用程序,只要在數據庫中創建一個新的YourModel模型,將運行kick_off_analysis()函數玩具代碼。
from sqlalchemy import event
@event.listens_for(YourModel, "after_insert")
def kick_off_analysis(mapper, connection, your_model):
# do stuff here
希望能幫助您開始。
我不知道updateAndAnalyze()
是多麼昂貴,但我非常肯定它就像大多數SQL命令:不是你真正想要輪詢的東西。
你有一本Observer Pattern的教科書。您希望MySQL在代碼更新時以某種方式調用某些代碼。我不確定確切的機制可以做到這一點,但是應該有辦法在你的相關表上設置一個觸發器,它可以通知你的代碼底層表已經被更新。然後,您不必進行投票,而是基本知道您需要做些事情而「中斷」。它也將消除你引入的最新一分鐘的延遲,這將使你所做的任何事情都更加活潑。