Хорошо, давайте посмотрим, сможете ли вы, волшебники, помочь мне с этой проблемой, против которой я бьюсь головой.
Сценарий - довольно стандартная установка с точкой продажи (где я нахожусь) и бэк-офисом, отслеживающим складскую информацию. Проблема в том, что мне нужно синхронизировать базу данных в точке продажи с текущей информацией о запасах из бэк-офиса. Прямо сейчас это делается путем извлечения каталога из бэк-офиса через Интернет. Каталог содержит информацию, такую как доступные в настоящее время единицы, текущая цена и уникальные идентификаторы для каждого типа. В моей базе данных у меня точно такая же информация, и я обновляю ее после загрузки каталога. Мне важно вставлять новые типы единиц по мере их появления, обновлять уже существующие типы информацией о доступности и ценой и, наконец, удалять типы (или помечать их как недоступные), когда они опускаются ниже определенного порога.
Текущая реализация просто помечает все элементы как недоступные в случае их удаления из каталога, а затем для каждого элемента в каталоге выдает запрос, подобный следующему:
INSERT INTO store (id, quantity, price)VALUES(x, y, z)
ON DUPLICATE KEY quantity=y, price=z;
Идентификатор установлен как уникальный, чтобы избежать дублирования данных, которые устарели в базе данных, и вызвать коллизию, которая инициирует обновление. Основная проблема заключается в том, что при этом выдается один запрос для каждого типа в каталоге, который может быстро расти.
Есть ли более быстрое решение этой проблемы?