Веб-разработка

Синхронизация каталога WooCommerce по API: как избежать зависания базы данных

651 
 

Разбор архитектуры пакетной фоновой синхронизации остатков и цен из ERP-систем на чистом PHP с использованием транзакций MySQL.

Прямой импорт остатков из внешних систем или 1С через стандартные вебхуки плагинов часто намертво блокирует таблицы базы данных wp_posts и wp_postmeta. Когда скрипт пытается обновить 5 000 товаров в один поток, вызывая функции WP в цикле, сайт выдает ошибку 504 Gateway Timeout или падает от нехватки оперативной памяти.

Мы в команде IT-Gig разберем, как правильно спроектировать отказоустойчивую архитектуру фоновой синхронизации пакетами.

1. Пакетная обработка данных через транзакции

Главная ошибка готовых модулей — вызов функции update_post_meta() внутри тяжелого неизолированного цикла. Каждое обновление генерирует отдельный запрос к MySQL. Намного быстрее использовать прямые SQL-запросы ядра через глобальный класс $wpdb, завернутые в единую транзакцию:

function it_gig_fast_update_stock($products_data) {

global $wpdb;

$wpdb->query('START TRANSACTION');

foreach ($products_data as $sku => $stock) {

$post_id = $wpdb->get_var($wpdb->prepare(

"SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_sku' AND meta_value = %s LIMIT 1",

$sku

));

if ($post_id) {

$wpdb->query($wpdb->prepare(

"UPDATE {$wpdb->postmeta} SET meta_value = %s WHERE post_id = %d AND meta_key = '_stock'",


Разместите
тендер бесплатно

Наша система сама подберет вам исполнителей на услуги, связанные с разработкой сайта или приложения, поисковой оптимизацией, контекстной рекламой, маркетингом, SMM и PR.

Заполнить заявку 13691 тендер
проведено за восемь лет работы нашего сайта.


$stock, $post_id

));

$wpdb->query($wpdb->prepare(

"UPDATE {$wpdb->postmeta} SET meta_value = %s WHERE post_id = %d AND meta_key = '_stock_status'",

$stock > 0 ? 'instock' : 'outofstock', $post_id

));

}

}

$wpdb->query('COMMIT');

}

2. Принудительная очистка объектного кэша WordPress

При массовой работе с базой данных WordPress кэширует каждый измененный объект в оперативной памяти (Object Cache). При импорте больших массивов данных это вызывает мгновенное переполнение выделенного лимита памяти сервера (PHP Memory Limit). Обязательно сбрасывайте кэш вручную после обработки каждого пакета товаров:

wp_cache_flush();

Своевременный вызов wp_cache_flush() очищает RAM сервера и позволяет скрипту беспрепятственно обрабатывать каталоги на 50 000+ позиций даже на скромных VDS.

Полные технические листинги архитектуры и другие гайды по бесплагинной оптимизации WordPress мы выложили в нашем блоге:

👉 Как подключить API Deepseek к WordPress на чистом PHP — Разбор IT-Gig (https://it-gig.ru/wordpress-deepseek-api-integration-php/)

👉 Пишем быстрый AJAX-фильтр товаров через REST API — Код и конфиг (https://it-gig.ru/highload-woocommerce-custom-ajax-filter/)

👉 Оптимизация базы данных при синхронизации WooCommerce — Инструкция (https://it-gig.ru/woocommerce-api-sync-database-optimization/)

Если вашему интернет-магазину необходим глубокий технический аудит, комплексный рефакторинг архитектуры или бесшовная интеграция с внешними API — доверьте это команде IT-Gig (https://it-gig.ru).

Выскажите мнение
Авторизуйтесь, чтобы добавить свой комментарий.




651

Лучшие статьи

Поделиться: 0 0 0

Оцените статью
Спасибо за оценку