2013-12-07 2 views
3

Я хотел бы ускорить запросы, такие как: find root_dir -atime -5 - найти файлы, к которым обращались менее пяти дней назад.Файловая система speedup - команда 'find'

Я думаю о хранении файловой файловой иерархии и метаданных файлов в db. Знаете ли вы какое-либо решение, которое может вам помочь? Возможно, существует файловая система с плавким предохранителем, которая может это сделать?

ответ

0

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

1

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

Обратите внимание, что создание вашей базы данных также по крайней мере займет время find. Не говоря уже о запуске синхронизации, чтобы отразить изменения файловой системы в вашей базе данных. Скорее всего, полная перестройка базы данных будет самым быстрым способом для этого.

Итак, что бы я сделал, это запустить find через интересующие вас части файловой системы (возможно, с периодическим заданием cron). Таким образом, в некотором смысле вы создаете «базу данных» в памяти и последующие find, du, и подобные вещи будут работать быстрее.

1

Для этого не существует «настоящего хорошего» решения. Вы можете запускать cron-скрипт один раз в час или в день, который создает базу данных, похожую на вашу, но если вы запустите это слишком часто, вы наложите большую нагрузку на свою файловую систему; если вы не запускаете его достаточно часто, ваши результаты будут устаревшими.

Другой способ - использовать механизм ядра для информирования вашей программы о изменениях файловой системы. Посмотрите на http://en.wikipedia.org/wiki/Inotify, чтобы начать. Однако это специфичный для Linux интерфейс, и он позволяет вам контролировать только определенные каталоги, а не всю файловую систему.

Смежные вопросы