#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
это то, что я в конечном итоге использовал.