Какой самый быстрый способ рассчитать использование диска на клиента? - PullRequest
1 голос
/ 03 сентября 2010

Надеюсь, это просто.

Я запускаю веб-приложение Rails, где я размещаю около 100 школьных сайтов.Одно приложение обрабатывает все сайты, и у меня есть интерфейс управления, где мы можем добавлять и удалять школы и т. Д.,Файлы каждой школы хранятся в отдельной структуре каталогов, поэтому ее легко найти.Единственная проблема - мне нужно, чтобы это было быстро.Поэтому вопрос в том, какой самый быстрый способ найти эту информацию.Если бы это можно было найти с помощью рубинового звонка на лету, это было бы здорово, но я открыт для всего, что будет работать.В идеале я бы хотел избежать кеширования и фоновой генерации этих данных (по крайней мере, на уровне рельсов).:)

Ответы [ 3 ]

4 голосов
/ 27 марта 2013
`du -s "/your/path/here"`.split("\t").first.to_i #returns bytes
3 голосов
/ 03 сентября 2010

Если вы хотите использовать чистый 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 голосов
/ 03 сентября 2010

Вы пробовали просто запускать du для каждого каталога по требованию? На моем старом ящике я могу записать ду на директорию 15M за ~ 4 мс и 250M за ~ 50 мс И то, и другое кажется разумным для поставленной задачи. Насколько велики каталоги? Прежде чем пытаться действительно оптимизировать это, убедитесь, что оно действительно того стоит. ЯГНИ и все такое.

Вы всегда можете отслеживать загрузку, когда вам предоставляют файл. Таким образом, вам просто нужно отслеживать дельту при добавлении или удалении файлов.

...