Советы по управлению большим количеством файлов?

Используйте RegexOptions.Singleline, он меняет значение. включить новые строки

Regex.Replace (content, searchText, replaceText, RegexOptions.Singleline);

13
задан Community 23 May 2017 в 22:15
поделиться

6 ответов

Один путь состоит в том, чтобы присвоить уникальный номер каждому файлу и использовать его для поиска фактического расположения файла. Тогда Вы использование, что число для распределения файлов в различных каталогах в файловой системе. Например, Вы могли использовать что-то вроде этого схема:

/images/{0}/{1}/{2}

{0}: file_number % 100
{1}: (file_number / 100) % 100
{2}: file_number

12
ответ дан Mehrdad Afshari 23 May 2017 в 22:15
поделиться

Я не могу сказать многое о том, как апач и PHP управляют файлами, но я могу сказать что-то о ext3 файловой системе. ext3, кажется, не имеет проблемы с большими количествами файлов в том же каталоге. Я протестировал его максимум с миллионом файлов. Удостоверьтесь, что dir_index опция включена в файловой системе прежде, чем создать каталоги. Можно проверить выполнение dump2fs и изменить эту опцию путем выполнения tune2fs. Хеширование файлов в дерево подкаталогов может все еще быть полезным, потому что инструменты командной строки могут все еще иметь проблемы при списке содержания каталога.

1
ответ дан Eric Anastas 23 May 2017 в 22:15
поделиться

Я имею, столкнулся с этой проблемой некоторое время назад для веб-сайта, который размещал много файлов. То, что мы сделали, было взятием GUID (который является также полем Primary Key файла) (например, BCC46E3F-2F7A-42b1-92CE-DBD6EC6D6301), и храните файл как это:/B/C/C/BCC46E3F-2F7A-42b1-92CE-DBD6EC6D6301/filename.ext

Это имеет определенные преимущества:

  • можно масштабировать горизонтально файловые серверы по нескольким серверам (и присвоить определенные каталоги каждому)
  • , Вы не должны переименовывать файл
  • , Ваши каталоги, как гарантируют, будут уникальны

Hope, которой это помогает!

9
ответ дан Jeroen Landheer 23 May 2017 в 22:15
поделиться

Я обычно проявляю этот подход:

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

Поэтому, если файл расположен в /www/uploads/image.jpg, Ваши настройки varible указывают на/www/uploads, Ваша строка базы данных имеет image.jpg. Это - гибкий путь, который разъединяет Вашу системную структуру каталогов из Вашего приложения.

Далее можно фрагментировать хранилище файлов в каталогах на основе того, каких таблиц базы данных они касаются. Скажите, что у Вас есть таблица user_reports и таблица user_photos. Вы храните файлы, которые касаются user_reports в/www/uploads/user_reports. Если у Вас есть большое количество пользовательских загрузок, можно реализовать fragmentaion еще больше. Скажите, что пользователь загружает файл 20.03.2009, файл называют report.pdf, таким образом, Вы храните его в /www/uploads/user_reports/2009/03/20/report.pdf.

1
ответ дан Vasil 23 May 2017 в 22:15
поделиться

Чтобы постараться не создавать чрезмерное количество записей в единственном каталоге, можно хотеть основывать каталоги создания на частях имени файла. Так, например, если у Вас есть файл, названный d7f5ae9b7c5a.png, можно хотеть сохранить его в media/d7/f5/d7f5ae9b7c5a.png. Если Ваши имена файлов будут все шестнадцатеричными тогда, то это ограничит количество записей в единственном каталоге к 256 вплоть до заключительного уровня.

7
ответ дан Ignacio Vazquez-Abrams 23 May 2017 в 22:15
поделиться
  1. Одно пользовательское изображение ~ 100 КБ, таким образом позвольте, имеют 10 000 пользователей в базе данных, каждый пользователь будет иметь в средних 5 изображениях, таким образом, у нас будет DB на 5 терабайт, и каждый вывод изображения будет выполняться через DB, и этот дополнительный трафик DB уменьшит общую производительность сервера БД.... можно ли использовать кластер DB, чтобы избежать этого, но предположить, что это дорого

  2. Пользовательский отчет об ошибке на живой базе данных, (на тесте - все работы правильно), как Вы создали бы, выводят распаковывание его на машине разработчиков? Сколько времени потребуется?

  3. Через один момент можно ли решить поместить изображения на некоторый CDN, каковы будут изменения в исходном коде?

2
ответ дан se_pavel 23 May 2017 в 22:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: