Как правильно обновлять\добавлять данные в бд из источника?
Приветствую!
Есть такая проблемка - каждые 40 сек по АПИ передаются данные с товарами. При этом цены реально меняются каждые 40 сек (т.к. товаров много - около 5 тысяч). А еще каждые. примерно, полчаса, всегда в разное время добавляются\убираются какие-то позиции. Как бы оптимизировать запрос в БД так, чтобы раз в 40 секунд происходила сверка информации - данные обновлялись, а те, которых нет - добавлялись? Неужели единственным вариантом останется сделать выборку из бд, и сверять ее с пришедшим массивом, а потом добавлять несуществующие позиции? Не слишком ли это ресурсо затратно?
Создать индексы составные, делать count запросы, что бы не дергать те данные, которые не изменились. Более подробный ответ можно дать если Вы хотя бы пример данных дадите. Что и как в базе? Что приходит и в каком виде по api? Откуда цифра 40 секунд взялась и насколько принципиально обновлять именно с такой периодичностью?
Проблема в том, что данных для идентификации конкретного товара почти не приходит. Приходят цены, айди товара, приоритет продажи товара (постоянно меняется, это обычные цифры от 1 до бесконечности, 1 - самый приоритетный), фотография и описание. Вот все данные. В БД уже занес первую партейку через INSERT. Теперь надо подумать, как бы это дело обновлять. Собственно, если бы дело было в обновлении без добавления - то просто update того то, там где айди = тому то. А вот загвоздка в том, что еще надо смотреть, были ли добавлены новые товары и удалены старые...
suhuxa1: советую почитать тут: https://habrahabr.ru/post/247373/
там есть инфо по индексам в БД. Что есть практически основным инструментом оптимизации. Так что знать обязательно. Идея в том, что так как у Вас множество и частых запросов в БД - их надо оптимизировать. Самый быстрый запрос, это запрос count к индексу. Так что если у Вас будет индекс составной из тех столбцов, что к Вам приходят, можно будет оптимально проверить изменились ли данные, просто сделав count запрос.
каким образом удаляются? передается ид и модификатор удалить?
Нет, просто айди товара исчезает из приходящего массива. Например, сегодня пришли товары 1-2-3-4, а завтра 1-3-6-9. Ну и база должна постоянно находиться в движении, т.к. оставлять товары смысла нет, в 90% случаев они больше добавлены не будут. Ассортимент очень быстро меняется.