2010-05-18 50 views
1

創建一個web應用程序(對我來說Django,但我認爲這個問題更普遍)是管理做排隊作業的工作人員羣,因此需要跟蹤每個作業的進度。Web應用程序中高效的作業進度更新

當我使用數據庫UPDATE(本例中是PostgreSQL)完成它時,它嚴重影響了數據庫性能,因爲每個UPDATE都會在表中創建一個新行,在我的情況下,只有清理數據庫纔會刪除過時的行。每運行30分鐘並每隔1分鐘報告一次進展情況,可能需要每10天抽真空(對於所有使用該系統的員工而言,這意味着前端的巨大減速)。

因爲進度信息並不重要,即。它不一定是持久的,你會怎麼做沒有使用開銷數據庫暗示的工作進度更新?有30個工作服務器,每個服務器同時執行1或2個作業,1個向用戶提供Web應用程序的前端服務器,以及1個數據庫服務器。

+0

您沒有使用自動更新?此外,大概,您的更新表很小,只包含一個時間戳,狀態和外鍵,不應該在數據庫上創建太多的拖動。您可以不更新記錄,而是根據狀態更新創建新記錄並查詢它,獲取最高記錄。 – MkV 2010-05-18 10:58:14

+1

您使用的是哪個版本的PostgreSQL? PostgreSQL 8.3引入了Heap-Only Tuples,如果更新的唯一字段不是任何索引的成員,它將執行更新而不創建新行。 – 2010-05-18 15:30:37

回答

1

有一個叫memcached的軟件包,它爲鍵值檢索設置了一個快速服務器。它被像維基百科這樣的大集羣網站使用。

它可以讓您共享集羣周圍頻繁更改的數據,而無需數據庫開銷。

1

如果您正在執行基於鍵的插入/更新/ retreive(例如,您每次都通過ID訪問行),則可以將Django caching framework與可在服務器之間共享的任何緩存後端一起使用。 amwinter建議使用memcached。 django發行版中有一個memcached緩存後端。但memecached並不能保證它不會丟失你的數據。例如,您可能試圖存儲大量數據,並且memcached在達到特定內存限制時將開始丟失數據。所以記住這一點。 memcached有一個擴展,可以使其保留數據(忘記了它的名稱)。

您也可以考慮redis as a cache backendMongoDB