Добрый день. Имеется задача выполнения импорта товаров на сайт из xml. Собственно сама выгрузка сделана и все работает, но меня волнует факт, что при поиске ключевых слов получается кубическая сложность (три вложенных цикла), а значит по мере увеличения как базы данных, так и файлов xml будет увеличиваться длительность выгрузки, причем значительно.
Алгоритм выгрузки сейчас таков:
Делаем выборку из бд из таблицы "категории".
Для каждого "правильного" элемента из xml мы берем поле "категория", далее в каждой категории, которая находится в базе данных существует поле "ключевые слова", которые, в свою очередь, разбиваются на элементы. Сравниваем элементы поля "ключевые слова" из бд с полем "категория" из xml. Если нашли - ставим в соответствие нашей выгрузке категорию в бд, иначе отправляем в категорию "Прочее". Приведу упрощенный код:
$validated; // "правильные" элементы из xml
$categories = getCategoriesFromDb; // выборка из таблицы категории
foreach ($validated as $item) {
foreach($categories as $category) {
$splitted = explode(',',$category['keywords']) {
foreach($splitted as $element)
// проверка нахождения элемента в поле категория в выгрузке xml
}
}
}
Меня интересует есть ли какой-нибудь более правильный и умный алгоритм для поиска ключевых слов или же в данном случае подходит только брутфорс? Если брутфорс, то есть ли смысл копать в сторону псевдомногопоточности или же многопроцессовости?