如何在有限的空間範圍內對日誌文件進行排序-筆記

現在假設我們有10個接口訪問日誌文件,每個日誌文件大小約300MB,每個文件裏的日誌都是按照時間戮從小到大排列。你希望將這10個較小的日誌文件,合併爲1個日誌文件,合併之後的日誌仍按照時間戮從小到大排列。如果處理上述任務的機器內存只有1GB,你有什麼好的解決思路能“快速”地將這10個日誌文件合併嗎?

  • 我們可以每次從各個文件中取一條最小的數據,在內存中根據數據時間戳構建一個最小堆,然後每次把最小值給寫入新文件,同時將最小值來自的那個文件再取出來一個數據,加入到最小堆中。這個空間複雜度爲常數,但沒能很好利用1g內存,而且磁盤單個讀取比較慢。
  • 這裏再考慮爲每個日誌文件分配50M數組,再另外分配一個500M的數組儲存歸併結果,每個文件每次讀取50M,對10個數組做歸併排序直到其中某個數組的數據被處理完,將歸併結果寫入磁盤,沒了再從內存中取,時間複雜度還是一樣O(n)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章