Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумРазбор ошибок

Двойные записи в выгрузке: ищем источник

Оксана В.
Оксана В.
Участник
сообщений 350
с дек
22 августа, 17:07первое сообщение

Ночной прогон по каталогу, на выходе csv. Заказчик считает строки и присылает мне список: двадцать две тысячи записей, из них шестьсот сорок повторяются по артикулу.

Прогон идёт в тридцать потоков, каждый пишет в общий файл через блокировку. Задачи разбираются из очереди, одна задача это одна страница списка.

Пока непонятно даже, задваивается страница целиком или отдельные карточки. Как подступиться?

Костя Фомин
Костя Фомин
Знаток
сообщений 1600
с апр
1 января, 08:24#2

Сперва разделите повторы на два вида, дальше искать станет вдвое легче.

# одинаковые по ключу
cut -d';' -f1 vygruzka.csv | sort | uniq -d | wc -l
# одинаковые целиком, вся строка
sort vygruzka.csv | uniq -d | wc -l

Если оба числа сошлись, у вас дважды записана одна и та же карточка. Если ключей больше, чем полных повторов, карточку читали в разное время и поля успели разойтись.

byteflow
byteflow
Новичок
сообщений 225
с фев, второй сезон
8 июня, 11:41#3

Про повторную запись подкину частый источник. Запрос уходит, сайт отвечает медленно, у клиента срабатывает таймаут, задача уходит на второй заход. Первый ответ при этом доезжает и его успевают записать. Итог: две копии, отличаются на доли секунды.

Лечится тем, что запись идёт по ключу. Держите артикулы в множестве и сверяйтесь с ним перед каждой строкой.

Юля Ким
Юля Ким
Знаток
сообщений 1240
с мая
15 ноября, 14:58#4

А я бы сначала посмотрела на номера страниц. У нас ровно такая история тянулась месяца три, и виноват был сам каталог.

Мы ходили по страницам списка обычным способом, двадцать четвёртая, двадцать пятая, двадцать шестая. Сортировка на сайте стояла по новизне, товар в базе шевелился прямо во время прогона. Пока мы читали двадцать четвёртую, пара карточек уехала вниз и попала на двадцать пятую. Она к нам приезжает второй раз, а кто-то другой в это время проваливается в щель и теряется совсем.

Проверяется просто: добавьте в выгрузку колонку с номером страницы и посмотрите, на каких номерах сидят повторы. Если они лепятся к границам страниц, дело именно в перетасовке.

откуда пришли шестьсот сорок повторов
откуда пришли шестьсот сорок повторов

Чинится сменой порядка обхода: сортировка по такому полю, которое не шевелится, либо ход по идентификаторам вместо номеров страниц. Мы ушли на сортировку по артикулу, и повторы закончились в ту же ночь.

loginless
loginless
Новичок
сообщений 130
с мая, второй сезон
22 апреля, 17:15#5

а два запуска по расписанию не могли наложиться? у меня раз так было

Оксана В.
Оксана В.
Участник
сообщений 350
с дек
1 сентября, 08:32#6

Проверила всё по кругу, докладываю.

Юля Ким: посмотрите, на каких номерах сидят повторы

Колонку добавила, и картинка совпала с вашей почти один в один: львиная доля повторов сидит на стыках страниц, сортировка на сайте стояла по дате поступления. Перевела обход на сортировку по артикулу, следующей ночью повторов по этой причине ноль.

Замечание loginless тоже пригодилось. Прогон длится дольше, чем я думала, и утренний запуск действительно накладывался на хвост ночного. Повесила на скрипт flock, второй запуск теперь тихо уходит, пока работает первый.

Осталась горстка повторов от таймаутов, их сняла проверкой артикула перед записью, как советовал byteflow. Двадцать две тысячи строк, повторов ноль. Спасибо, тема закрыта.