Оптимизированное удаление данных

Мизантроп777

Новичок
Приветствую Вас Уважаемые форумчане.
Сразу к делу.
Имеется база данных в которой миллион записей, так вот удалить оттуда все записи не проблему, можно воспользоваться запросом TRUNCATE, но а что если определенное поле в таблице которую нужно очистить содержатся пути к файлам которые тоже нужно удалить?
К сожалению, в PHP нет функции при помощи которой можно удалить все содержимое папки без конструирования рекурсии. Так вот, как если тупо удалять все данные через циклы, то сервер может лечь.
Как оптимизировано удалить эти данные? Если воспользоваться sleep() ну скажем каждый сотый тысячный цикл, то на какое время усыплять программу? И поможет ли sleep() избежать перегрузки системы? Или есть другой вариант?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Мизантроп777, вызвать удаление НЕ через php, а скажем как rm -rf /path/to/dir при условии, что сможешь.
 

С.

Продвинутый новичок
К сожалению, в PHP нет функции при помощи которой можно удалить все содержимое папки без конструирования рекурсии. Так вот, как если тупо удалять все данные через циклы, то сервер может лечь.
Во-первых, все содержимое папки не удаляется разом без рекурсии даже на уровне файловой системы. Во-вторых, удаление -- пренебрежительно мизерная операция, никто никуда не ляжет.
 

depp

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

antson

Новичок
Партнер клуба
Мизантроп777,
посмотри в сторону двухпроходного удаления.
1) в таблице ставится флаг запись удалена (поправить запросы выборки данных с учетом флага)
2) по крону искать помеченные , удалять , связанную инфу, удалять запись в таблицы физически
в шаге 2 ни в коем случае не задействовать апач.

С.,
Во-вторых, удаление -- пренебрежительно мизерная операция, никто никуда не ляжет.
Это справедливо не всегда.
Быстро удалить миллион файлов в любом случае не получится.

Мизантроп777,
Если нужно удалить все файлы в папке, то переименуй папку, создай пустую вместо нее, если она еще нужна.
и через шелл запустить удаление с указанием минимального приоритета.
 
Сверху