2013-06-04 16 views
0

我認爲標題中的問題可以說明這一切,並且是一般性的。檢索前100行按函數排序而不計算表中的所有行?

我可以舉一個具體的例子還有:

我已標記的文章,並希望找到與之相關的標籤similar文章。
得分函數將查看兩篇文章並計算共同標記的數量。

由於得分不存儲在任何地方,每當我需要找到類似的文章給出一篇文章時,我將不得不計算得分。
But this is too expensive.

  1. 什麼是常用的解決這類問題有什麼看法?
  2. 對我的具體tag問題有沒有更好的方法? (例如solr's moreLikeThis

編輯
我使用Postgres的,如果該事項。
我要找的人成功地使用一個通用的解決方案,如you should batch calculate the score and save it somewhere等..

+0

如果計算起來昂貴,而且需要經常計算,批處理和緩存。 (也考慮增量更新,每次重新計算以確保準確性。) – Patashu

回答

0
  1. 答案將通過數據庫產品和版本而異瘋狂。例如,在某些數據庫產品中,視圖或索引視圖可能比更常見的解決方案更快...
  2. 通常情況下,處理這種情況的方法是預先計算結果。您可以通過幾種方式來實現:

    a。您可以使用觸發器(添加到SQL 99標準中)來更新計數,因爲行可以添加,更新或從源表中刪除。在這個解決方案中,爲了在檢索信息方面取得重大進展,您在插入,更新和刪除源表時做出(大概)很小的犧牲。

    b。您可以使用數據倉庫,將數據的實時數據等待時間延遲至報告的數據。這意味着您接受從數據倉庫中查詢的數據將會過時幾分鐘,幾小時,幾天或幾周。數據倉庫通過定期查詢實時OLTP(聯機事務處理)數據並更新包含預先計算結果的OLAP(聯機分析處理)數據庫來工作。然後,從OLAP數據或OLTP和OLAP數據的組合中運行報表。不需要正式的數據庫倉庫來獲得同等的結果。您可以編寫一個在計時器上執行的過程,該計時器定期更新表格並更新結果。

相關問題