Получение размера папки и всего содержимого для каждого пользователя

#ruby-on-rails #ruby #linux

#ruby-on-rails #ruby #linux

Вопрос:

Я видел на нескольких сайтах SAAS, где люди хранят данные, и сайт отслеживает, сколько данных находится на их серверах. Они отображают эту информацию пользователю.

Используя ruby on rails, как некоторые из этих сайтов делают это? Похоже, что это делают достаточно сайтов, о которых должен быть стандартный способ, о котором я просто не знаю. Или каждый в значительной степени реализует свое собственное решение?

Если каждый реализовал свое собственное решение, то является ли это хорошей оценкой использования:

 `du -s <directory>` 
  

и просто проанализировать данные.

Ответ №1:

Все зависит от того, как сайт хранит фактические данные и метаданные об объектах, которые его пользователи загружают на него. Вполне возможно, что данные хранятся не в традиционной файловой системе (такой как S3). Так что в случаях, когда подобное du не сработало бы.

Итак, если вы храните метаданные в базе данных, включая размер, вы можете просто получить сумму размера загрузки с помощью запроса, и вам не обязательно обращаться к базовой файловой системе…

Комментарии:

1. Я об этом вообще не подумал. Это дает мне больше поводов для размышлений. Спасибо.

2. При использовании файловой системы для хранения может быть достаточно чего-то вроде du . Помните, что объем пространства, который файл занимает на диске, может отличаться от размера файла в зависимости от размера блока, установленного на диске, следовательно, фактический объем дискового пространства больше, чем сумма размеров отдельных файлов.

3. да, файлы должны были находиться в файловой системе, так что du выглядит моим лучшим вариантом. Я просто никогда даже не рассматривал мысль о получении метаданных и их сохранении. Это такая простая идея, хотя я не знаю, почему я до этого не додумался. Спасибо.

4. Помните, что du может быть довольно интенсивным в подсистеме ввода-вывода, поэтому вы, вероятно, не захотите запускать ее постоянно, и особенно не по требованию пользователя, поскольку таким образом вы можете довольно быстро столкнуться с проблемами производительности..

Ответ №2:

du это очень хороший инструмент для такого рода задач, он, вероятно, быстрее, чем тот, который вы могли бы выполнить вручную с помощью Find, но вам нужно быть осторожным при разборе выходных данных.

Нередко каталоги содержат экзотические символы в своих именах, которые включают в себя очевидные, такие как пробелы, и необычные, такие как новые строки. Это делает разбор выходных данных du несколько ненадежным, если кто-то делает это:

 % mkdir "foo
1234     bar"
  

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

Комментарии:

1. Я пометил это как ответ, поскольку du это то, что я в конечном итоге использовал.