我們有一個由數據庫(當前Oracle,計劃支持MS SQL Server以及幾十個表)支持的產品。爲了簡單起見,我們需要一個名爲TASK的表。計算DB中幾列的計數
我們有一個用例時,我們需要向用戶呈現具有特定標準的任務數。例如,假設許多列任務表中有,有3列適合這種使用情況:
- 優先級的可能值低,中,高
- 所有者 - 可能的值是在註冊用戶系統(可能是10秒)
- 狀態 - 可能值IDLE,IN_PROCESS,DONE
因此,我們要準確地顯示用戶多少任務是低,中,高,其中有多少是由一些擁有特定用戶,以及有多少屬於不同的狀態。當然,基本的實施將是對TASK表的每一個修改都保持這些計數是最新的。然而,使事情複雜化的事實是,用戶可以通過一些標準來額外地過濾結果,該標準可以包括(或不包括)上述列的一部分。
例如,利用可能希望看到這些罪名只適用於由他擁有,並已於上月創建的任務。可能的濾波器組合的數量在這裏是無窮的,所以不用說保持最新的計數是不可能的。
所以問題是:如何解決這個問題而不會嚴重影響數據庫性能?它可以完全通過數據庫解決,還是應該使用其他數據存儲,如稀疏數據存儲?這感覺就像許多公司現在一直存在的問題。例如,在亞馬遜商店中,您可以在使用任意文本搜索條件時查看類別數量,這意味着他們也可以在現場進行計算,而不是始終保持最新。
最後一兩件事:我們可以接受一定的功能限制,說數應確切高達100,但是從100開始可以只說「100任務」。也許這種緩解可以讓我們發出更有效的SQL查詢。
謝謝!
謝謝Max。這當然是我們已經測試過的天真方法。問題是 - 這表現是可怕的。這樣的查詢不僅需要相當長的時間才能完成,這當然會影響對數據庫執行其他簡單查詢的其他用戶。所以我一直在尋找創造性的方法來解決這個問題,這個問題會以某種方式在一段時間內以更統一的方式分配這個負載。 – Stas