創建一個web應用程序(對我來說Django,但我認爲這個問題更普遍)是管理做排隊作業的工作人員羣,因此需要跟蹤每個作業的進度。Web應用程序中高效的作業進度更新
當我使用數據庫UPDATE(本例中是PostgreSQL)完成它時,它嚴重影響了數據庫性能,因爲每個UPDATE都會在表中創建一個新行,在我的情況下,只有清理數據庫纔會刪除過時的行。每運行30分鐘並每隔1分鐘報告一次進展情況,可能需要每10天抽真空(對於所有使用該系統的員工而言,這意味着前端的巨大減速)。
因爲進度信息並不重要,即。它不一定是持久的,你會怎麼做沒有使用開銷數據庫暗示的工作進度更新?有30個工作服務器,每個服務器同時執行1或2個作業,1個向用戶提供Web應用程序的前端服務器,以及1個數據庫服務器。
您沒有使用自動更新?此外,大概,您的更新表很小,只包含一個時間戳,狀態和外鍵,不應該在數據庫上創建太多的拖動。您可以不更新記錄,而是根據狀態更新創建新記錄並查詢它,獲取最高記錄。 – MkV 2010-05-18 10:58:14
您使用的是哪個版本的PostgreSQL? PostgreSQL 8.3引入了Heap-Only Tuples,如果更新的唯一字段不是任何索引的成員,它將執行更新而不創建新行。 – 2010-05-18 15:30:37