Ниже приведены две таблицы: -
- таблица документов - эта таблица содержит путь к файлу, который фактически содержит HTML-содержимое, а также имеет столбец для иерархии
найти и заменить - эта таблица содержит слово для поиска и замены (строка замены может быть ссылкой или сам HTML), а остальные поля - идентификаторы, разделенные запятыми (идентификатор документа из таблицы 1), который указывает, какое слово должно бытьзаменено в каком документе
Короче говоря, этот процесс позволит пользователю находить и заменять ключевые слова на основе второй таблицы и только внеобходимые документы.
Алгоритм работает следующим образом: -
- Получить количество всех записей в таблице документов
- Разбить на 100 наборов записей (чтобы уменьшитьтайм-аут сервера)
- цикл по набору 100 каждый и для каждой записи здесь с использованием идентификатора документа и иерархии не получить список ключевых слов, а также содержимое, которое будет заменено для замены в этом конкретном документе (Примечание, условие where выполняется в строке, разделенной запятыми)
- извлечь файл с сервера, используя путь в первой таблице, и извлечь HTML-продолжениеent
- запустить цикл для каждого ключевого слова в последовательности и заменить требуемым содержимым согласно второй таблице в содержимом
- создать окончательный файл и сохранить на сервере
Процесс работает нормально и дает желаемые результаты.
Проблема начинается с увеличения данных.На данный момент в первой таблице содержится около 50 000 записей и, следовательно, столько же файлов на сервере.
Вторая таблица содержит около 15 000 записей поиска и заменяет ключевые слова длинными строковыми запятыми, разделенными идентификатором документов..
Для такого количества данных этот процесс будет выполняться в течение нескольких дней, и этого не должно происходить.
Для базы данных используется MySQL 5.5, а бэкэнд - PHP (Laravel 5.4).ОС Centos 7 с веб-сервером nginx.
Есть ли способ сделать этот процесс гладким и менее трудоемким?Любая помощь приветствуется.