2011-11-15 31 views
0

這裏是我的要求:的Java調度Vs的SQL調度

日期插入到每個記錄一個數據庫表。在該顆粒日期之前的兩週 ,應另外記錄一個 不同的表格。

我最初的解決辦法是把一個SQL計劃的工作,但我的客戶堅持它正在通過Java處理。

  • ,這是什麼最好的方法?
  • 使用SQL調度作業和Java調度執行此任務有哪些優缺點?

回答

0

嗯,首先,如果你想這樣做在Java中,你可以使用 Timer一個簡單的基本重複的工作,或Quartz更多先進的東西。

我個人也認爲,這將是最好有同一個實體(應用程序)處理所有相關的數據庫操作。換句話說,如果您的Java應用程序正在讀取/寫入數據庫,它應該是一致的,並且還可以處理預定的讀取/寫入。此外,通過這種方式,您可以更輕鬆地同步操作,例如,如果您想確保計劃作業正在運行,已經開始,已經完成,那麼如果所有操作都是在Java中完成的,則可以更容易地執行該操作有一個不同的進程(如SQL Scheduler)。

+0

謝謝安德烈。我開始認爲最好也使用Java Timer。客戶得分! – chapa

2

問自己一個問題:什麼域名不這件作品屬於?如果它是數據完整性所必需的,那顯然是數據庫管理系統的問題,可能最好在那裏處理。如果它是業務領域的一部分而不是數據,或者可能需要信息或處理,這些信息或處理對於DBMS來說是不可用的或自然的,那麼最好的做法可能是外部的。

我會說,使用這項工作的最佳工具。數據庫使用它提供的任何功能處理的東西通常都很好。例如,在另一個表中保留記錄狀態更新的「快照」的日誌表是我通常喜歡觸發的東西,從我的應用程序的手中承擔責任。

但在這個時候,在幾乎所有的DBMS提供。其他數據庫可能不會提供您需要的作業調度能力。如果可以想象有一天你會切換到不同的數據庫管理系統,那麼你將不得不用Java來完成它。這就是Java方法的優點:您擁有獨立於數據庫的功能。如果您將純JDBC與標準SQL查詢結合使用,則您擁有完全可移植的解決方案。

這兩種方法似乎有效。考慮什麼導致最少的工作和煩惱。如果它是用Java完成的,則需要確保該進程正在運行或已計劃。這是一些外部依賴。如果它在數據庫中,只要數據庫已啓動,就可以確定該作業已完成。

+1

我會再增加一個因素:如果你有(或者將來可能有)適合外部工作的許多方案,並且很少適合內部工作,那麼將它們全部封裝在同一個機制中(而不是兩個)可能會是值得的。外部調度流程代理內部流程要容易得多,反之亦然。這是我個人使用OP描述的任務的外部調度過程的唯一原因。 – MatBailie

+0

謝謝G_H。我看到Java方法有其優點。我唯一擔心的是每天運行額外服務的應用程序服務器增加的負擔,它將處理大約1000分貝的記錄。 – chapa