The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"сортированный листинг файлов"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"сортированный листинг файлов"
Сообщение от mirya emailИскать по авторуВ закладки on 26-Авг-04, 19:04  (MSK)
можно ли такое получить для данной директории - не в стиле ls | sort, а именно готовый (ведь многие фс содержат индексы по файлам, было бы логично реализовать выше описанную фичу), т.е. в каких ОС и файловых системах такое поддерживается?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "сортированный листинг файлов"
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 27-Авг-04, 15:01  (MSK)
>можно ли такое получить для данной директории - не в стиле ls
>| sort, а именно готовый (ведь многие фс содержат индексы по
>файлам, было бы логично реализовать выше описанную фичу), т.е. в каких
>ОС и файловых системах такое поддерживается?

А при чем тут индексы по файлам? Такой feature нет, да и не нужна она.
Если нужно сортировать файлы по имени - сортируй сам.
Если не ограничивать ход твоих мыслей, то сразу же нужны features для получения отсортированого списка файлов по дате, размеру и т.п. ? Что же это за система будет такая.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "сортированный листинг файлов"
Сообщение от mirya emailИскать по авторуВ закладки on 27-Авг-04, 18:16  (MSK)
>А при чем тут индексы по файлам? Такой feature нет, да и
>не нужна она.
>Если нужно сортировать файлы по имени - сортируй сам.
>Если не ограничивать ход твоих мыслей, то сразу же нужны features для
>получения отсортированого списка файлов по дате, размеру и т.п. ? Что
>же это за система будет такая.

Пусть есть здоровенная директория, благодаря индеку можно быстро добраться до любого файла по имени. Теперь проблема: две такие здоровенные директории, нужно из второй удалить все файлы, к-рые отсутствуют в первой (т.е. по имени). Задача решается за n * log m, т.к. доступ к эл-ту директории по имени проходит за log m. Тут и проблема, что применяя эти индексы для листинга (к-рый времени на поиск не займет), можно параллельно пройтсь по обоим листингам и удалить лишнее за линейное время

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "сортированный листинг файлов"
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 27-Авг-04, 18:34  (MSK)
>
>Пусть есть здоровенная директория, благодаря индеку можно быстро добраться до любого файла
>по имени. Теперь проблема: две такие здоровенные директории, нужно из второй
>удалить все файлы, к-рые отсутствуют в первой (т.е. по имени). Задача
>решается за n * log m, т.к. доступ к эл-ту директории
>по имени проходит за log m. Тут и проблема, что применяя
>эти индексы для листинга (к-рый времени на поиск не займет), можно
>параллельно пройтсь по обоим листингам и удалить лишнее за линейное время
>

Есть такой термин, как "Bad design". Это применимо к сабжу. Файловая система никогда не разрабатывалась с расчетом на такие задачи, для этого используй Berkeley DB (http://www.sleepycat.com). Если это будет слишком сложно, используй СУБД (например MySQL). Я так считаю.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "сортированный листинг файлов"
Сообщение от mirya emailИскать по авторуВ закладки on 27-Авг-04, 18:39  (MSK)
конкретизирую: одна из директорий - табличка MySQL :)
  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "сортированный листинг файлов"
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 27-Авг-04, 18:41  (MSK)
>конкретизирую: одна из директорий - табличка MySQL :)

Извини, не понял. Как директория файловой системы может быть одной из таблиц СУБД MySQL? Поясни. Или ты вообще имеешь в виду не FS?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "сортированный листинг файлов"
Сообщение от mirya emailИскать по авторуВ закладки on 27-Авг-04, 18:51  (MSK)
есть директория ФС и таблица с именами файлов в МуСКЛ (индексированная). Нужно из директории удалить файлы, имена к-рых отсутствуют в табличке. И табл., и дир. огромные
  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "сортированный листинг файлов"
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 27-Авг-04, 19:04  (MSK)
>есть директория ФС и таблица с именами файлов в МуСКЛ (индексированная). Нужно
>из директории удалить файлы, имена к-рых отсутствуют в табличке. И табл.,
>и дир. огромные

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

В файловой системе, возможно, присутствуют имена файлов, которые отсутствуют в таблице СУБД, исходя из этого, выборка должна вестись средствами не FS, а  СУБД. Роль FS - выдать список всех файлов, роль СУБД - выдать список всех имен файлов, которых в её списках нет. Solution такой:
  1) Выбераем все имена файлов директории в массив (files).
  2) Формируем запрос "SELECT column FROM table WHERE column <> 'files[0]' AND column <> 'files[1]'....."
  3) Запрос вернет массив имен файлов, которых нет в таблице СУБД, удаляем эти файлы из директории в порядке их пребывания в массиве. Пусть этот массик (MYSQL_RESULT todel), тогда ...

while (res = mysql_result_next(todel)) {
...
   unlink(res[0]);....
}

Что-то в этом роде.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "сортированный листинг файлов"
Сообщение от mirya emailИскать по авторуВ закладки on 27-Авг-04, 19:08  (MSK)
1) размер запроса будет немного великоватым
2) как для отсылки, так и для парсера
3) интересно будет посмотреть на EXPLAIN Для него
4) все-рано это не даст линейную сложность
  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "сортированный листинг файлов"
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 27-Авг-04, 19:09  (MSK)
>>есть директория ФС и таблица с именами файлов в МуСКЛ (индексированная). Нужно
>>из директории удалить файлы, имена к-рых отсутствуют в табличке. И табл.,
>>и дир. огромные
>
>Ясно. В этом случае файловая система уже уходит на второй план. Её
>задача лишь в том, чтобы дать тебе список файлов директории. Я
>вижу этот алгоритм так:
>
>В файловой системе, возможно, присутствуют имена файлов, которые отсутствуют в таблице СУБД,
>исходя из этого, выборка должна вестись средствами не FS, а  
>СУБД. Роль FS - выдать список всех файлов, роль СУБД -
>выдать список всех имен файлов, которых в её списках нет. Solution
>такой:
>  1) Выбераем все имена файлов директории в массив (files).
>  2) Формируем запрос "SELECT column FROM table WHERE column <> 'files[0]' AND column <> 'files[1]'....."
>  3) Запрос вернет массив имен файлов, которых нет в таблице
>СУБД, удаляем эти файлы из директории в порядке их пребывания в
>массиве. Пусть этот массик (MYSQL_RESULT todel), тогда ...
>
>while (res = mysql_result_next(todel)) {
>...
>   unlink(res[0]);....
>}
>
>Что-то в этом роде.

ОЙ, постой!!! Я начудил, СУБД в таком случае ничего не вернет :((

Необходимо проверять наявность файла в СУБД запросом, тогда запросов будет столько, сколько файлов у тебя в директории... это плохо, трафик пойдет и загрузка ...

Ещё вариант, взять список всех файлов из СУБД в std::set. std::set - это отсортированый контейнер. Потом перебирать все файлы в директории, проверять, есть ли он в std::set, если нет - удалять. По-моему хорошее решение!

  Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "сортированный листинг файлов"
Сообщение от mirya emailИскать по авторуВ закладки on 27-Авг-04, 20:09  (MSK)
не, ну опять та же проблема - майскл выбирает сортированный список за линейное время, а ФС все равно все затормозит до н * лог н (для каждого файла директории поиск по сету за лог н). Если бы задействовать сортированность директории....
  Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "сортированный листинг файлов"
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 27-Авг-04, 21:00  (MSK)
>не, ну опять та же проблема - майскл выбирает сортированный список за
>линейное время, а ФС все равно все затормозит до н *
>лог н (для каждого файла директории поиск по сету за лог
>н). Если бы задействовать сортированность директории....

Не, дружище, ты не прохавал тему. Если мускуль выбирает весь мусор за линейное время по твоему утверждению, то FS - тоже.
Ты просто берешь список у FS и у СУБД. Все там и все тут, никаких сортировок, ничего. Потом SQL список засовываешь в std::set, отсортированый список уникальных значений. Потом по порядку если в SQL нет - удаляешь. Проверку на то, есть ли в SQL делает std::set, а удаление - дело то житейское. Вот и все. Работа FS - только отдать тебе список файлов текущей директории, а потом удаление файла. Как ни крути как не верти - ничего не изменишь!!!

  Рекомендовать в FAQ | Cообщить модератору | Наверх

12. "сортированный листинг файлов"
Сообщение от qq Искать по авторуВ закладки(??) on 27-Авг-04, 21:32  (MSK)
>есть директория ФС и таблица с именами файлов в МуСКЛ (индексированная). Нужно
>из директории удалить файлы, имена к-рых отсутствуют в табличке. И табл.,
>и дир. огромные


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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

13. "сортированный листинг файлов"
Сообщение от mirya emailИскать по авторуВ закладки on 27-Авг-04, 21:38  (MSK)
ну тебя и вставило, дружище бобер... (nothing personal :)

до тебя никто никаких файловых операций, кроме анлинка, делать не собирался :), читай вопрос в 6-м посте

  Рекомендовать в FAQ | Cообщить модератору | Наверх

14. "сортированный листинг файлов"
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 27-Авг-04, 22:00  (MSK)
>ну тебя и вставило, дружище бобер... (nothing personal :)
>
>до тебя никто никаких файловых операций, кроме анлинка, делать не собирался :),
>читай вопрос в 6-м посте

Да у нас тут последняя пятница месяца - день именинников, пятница-тяпница)) Вот и вставило. Но в принципе мой солюшн мне нравится. При чем тут файловая система вообще? Вон кюкю предложил солюшн, но там по моему пьяному мнению слишком много телодвижений.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

15. "сортированный листинг файлов"
Сообщение от qq Искать по авторуВ закладки(ok) on 27-Авг-04, 22:08  (MSK)
>ну тебя и вставило, дружище бобер... (nothing personal :)
>
>до тебя никто никаких файловых операций, кроме анлинка, делать не собирался :),
>читай вопрос в 6-м посте

ну, сделать хардлинк это не такая уж тяжелая операция..

тут у тебя по любому будет затык либо со стороны фс либо со стороны бд
ну или со стороны требуемой памяти...

тут либо идти по списку из бд, последовательно обрабатывая файлы
либо идти по списку из фс, последовательно проверяя наличие имени в бд..

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

17. "сортированный листинг файлов"
Сообщение от qq Искать по авторуВ закладки(??) on 04-Сен-04, 03:27  (MSK)
только что узнал, что
оказывается в linux 2.6 есть indexed директории (htree)
и есть backport патчи для 2.4

возможно это тебе как-то поможет...

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

18. "сортированный листинг файлов"
Сообщение от qq Искать по авторуВ закладки(ok) on 04-Сен-04, 04:47  (MSK)
>только что узнал, что
>оказывается в linux 2.6 есть indexed директории (htree)
>и есть backport патчи для 2.4
>
>возможно это тебе как-то поможет...
>
>не похоже, что это как то позволяет получить отсортированный листинг, но
>вроде как доступ к большим директориям сильно ускоряется..

(речь идет о ext3 fs )

  Рекомендовать в FAQ | Cообщить модератору | Наверх

16. "сортированный листинг файлов"
Сообщение от kva Искать по авторуВ закладки on 02-Сен-04, 14:50  (MSK)
такое можно было реализoвать BFS (BeOS). там был язык запросов к ФС.
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру