Если я создаю файловый объект файла из каталога, имеющего полмиллиона файлов, будет ли поиск и открытие этого файла медленным? Если да, то в чем причина этого?Медленный поиск файлов для больших каталогов
ответ
Производительность обычно начинает ухудшаться, если у вас есть что-то на order
десятков тысяч файлов, так что да, полмиллиона файлов, вероятно, убьют ваш компьютер - это похоже на плохую идею.
Я сделал некоторые измерения с использованием Java 1.6 на Linux 2.6.32 (избегали шума JIT-компилятора) при открытии файла и списке каталогов. Открытие случайного файла должно быть O (LogN) в this, но нет никакого измеримого замедлиться ДО 1 миллиона файлов:
Opened random file in /tmp/fubar.100 in 0 ms
Last modified at 1385629306000
Opened random file in /tmp/fubar.1000 in 0 ms
Last modified at 1385631078000
Opened random file in /tmp/fubar.10000 in 0 ms
Last modified at 1385631054000
Opened random file in /tmp/fubar.100000 in 0 ms
Last modified at 1385630478000
Opened random file in /tmp/fubar.1000000 in 0 ms
Last modified at 1385632681000
Оказывается производительность File.listFiles() является O (п):
Listed 104 files in /tmp/fubar.100 in 2 ms
Listed 1001 files in /tmp/fubar.1000 in 9 ms (5x)
Listed 10001 files in /tmp/fubar.10000 in 19 ms (2x)
Listed 100006 files in /tmp/fubar.100000 in 186 ms (10x)
Listed 1000002 files in /tmp/fubar.1000000 in 1909 ms (10x)
Трассирование показывает getdents() вызывается несколько раз O (п) раз:
$ grep getdents err.100|wc
28 5006 72926
$ grep getdents err.1000|wc
33 44514 669558
$ grep getdents err.10000|wc
147 441327 6765305
$ grep getdents err.100000|wc
1213 4409107 68693705
$ grep getdents err.1000000|wc
11987 44085454 701243406
ya это совершенно очевидно, так как Робин сказал, что он зависит от оборудования подчеркивания, os и файловой системы. Большое спасибо за ваши усилия @gabor, теперь я знаю точную сложность листинга файлов. Но я хотел знать сложность проверки существования файла. –
Это выглядит довольно интересно, вот что я думал. Для случайного доступа к файлам не должно быть замедления. Я действительно ценю вашу работу. –
Несмотря на то, что он зависит от базовой аппаратной и файловой системы, современные файловые имена хэш-файлов файловой системы (перечисленные выше), поэтому поиск эффективен O (log N). На обратной стороне алфавитный список требует сортировки O (N * log N). – gabor
- 1. Поиск каталогов рекурсивно для больших файлов в C
- 2. Поиск Больших каталогов для нескольких папок - JAVA
- 3. Поиск каталогов для тонны файлов?
- 4. StreamReader очень медленный для больших файлов
- 5. Xpages SSJS - Вывод файлов медленный для больших файлов
- 6. Использование mongodb $ поиск на больших документах медленный
- 7. Поиск замены uniq -c для больших файлов
- 8. Отправка больших каталогов в perforce
- 9. Поиск больших текстовых разделов
- 10. PHP ScanDir -> Поиск файлов/каталогов
- 11. Сравнение двух больших каталогов
- 12. Поиск больших файлов в Mercurial Repository
- 13. Поиск нескольких каталогов, удаление дубликатов файлов
- 14. Загрузка и поиск больших файлов PDF
- 15. Быстрое хеширование файлов больших файлов
- 16. Опции для копирования очень больших каталогов
- 17. Поиск количества файлов в каталоге для всех каталогов в pwd
- 18. git очень медленный при отслеживании больших двоичных файлов
- 19. gdb поиск исходных каталогов
- 20. Сценарий powershell слишком медленный (перечисление файлов)
- 21. Как найти 10 самых больших файлов в структуре каталогов
- 22. Очень медленный StreamReader для файлов среднего размера.
- 23. Быстрый поиск файлов или каталогов данного пользователя и пути, когда есть много пользователей и файлов/каталогов
- 24. Поиск каталогов для строки с несколькими линиями
- 25. Медленный поиск по php
- 26. Поиск каталога для файлов
- 27. Несколько подстановочных каталогов/поиск файлов для произвольной структуры каталогов в C# .net
- 28. Медленный поиск по местоположению
- 29. Загрузка файлов не работает для больших файлов
- 30. Поиск Lucene неприлично медленный
Amir благодарит за тонну быстрой rply но проблема беспокоит меня, делает JVM пытается сопоставить путь к файлу с объект для каждого и e очень файлы в месте перед его открытием? –
@ShashankShekhar Нет, операционная система выполняет поиск. Это зависит от операционной системы (например, Windows, Linux, Mac OS X) и файловой системы (например, NTFS, ext4). –
@ShashankShekhar, делегаты JVM для ОС. –