2010-09-02 84 views
1

我希望這是一個簡單的。什麼是計算每個客戶磁盤使用量的最快方法?

我運行一個Rails Web應用程序在那裏我主持約100學校的網站。在一個應用程序處理所有的網站,我有一個管理界面,我們可以添加和刪除等學校...

我想一個統計到這個接口是由學校使用的總磁盤空間。每個學校的文件都存儲在一個單獨的目錄結構中,以便於查找。唯一的問題是我需要它很快。所以問題是找到這個信息的最快方法是什麼。如果它可以通過在飛行中的ruby調用找到,那將是非常棒的,但我願意接受任何可行的工作。理想情況下,我想避免緩存和後臺生成這些數據(至少在軌道級別)。 :)

回答

3

如果你想要使用純Ruby,你可以試試這段代碼。雖然如果你正在尋找速度,我相信du會更快。

def dir_size(dir_path) 
    require 'find' 
    size = 0 
    Find.find(dir_path) { |f| size += File.size(f) if File.file?(f) } 
    size 
end 

dir_size('/tmp/') 
+0

這似乎是計算大小的標準方法,當然如果您想在Ruby中快速獲得結果,這當然是最簡單的方法。雖然我會在凌晨每天安排一次,但速度相當快。 – 2010-09-06 01:37:20

0

你試過在每個目錄上按需運行du嗎?在老化的盒子上,我可以在〜4ms的15M目錄下做一個du,在〜50ms內做一個250M的目錄。這兩項對於手頭的任務似乎都是合理的。目錄有多大?在嘗試真正優化這個之前,請確保它真正值得您享受。 YAGNI等等。

當他們向您提供文件時,您始終可以跟蹤上傳。這樣,您只需要在文件添加或刪除時跟蹤增量。

+0

我同意。只有每晚或每小時進行一次計算,或者類似的計算。這聽起來並不重要,需要絕對一致。 – 2010-09-02 23:59:22

+0

正確,只用於正式檢查。我會試着在一個較大的文件夾上運行du,看看它運行的速度如何:) – 2010-09-03 04:05:41

+0

'du'的速度不應僅僅取決於目錄和文件的*數量?由於文件大小保存在文件系統中,因此文件是4KB還是100GB應該沒有關係。 (請糾正我,如果我錯了,我懷疑我可能是) – Hubro 2015-10-07 08:16:02

4
`du -s "/your/path/here"`.split("\t").first.to_i #returns bytes 
+0

如果文件是管道,du可以阻止。 – jmoody 2015-10-05 12:16:44

相關問題