помимо основных полей есть id (уникальный внешний бигинт авто инкремент), таймстамп сбора данных, мд5 хэш полного текста ответа апи сбора. Сейчас все это добро хранится в одной большой таблице постгреса, ETL перезаписывает строки с тем же id и изменившимся хэшем, но из-за больших объемов это происходит небыстро.
Парсер пишет чанки по 250 товаров в csv, вне зависимости от того есть товар с таким же id+md5 в базе или нет, потом обработчик (пандас) эти чанки сгребает, колдует и пуляет в сырую таблицу сравнивая id+md5.
Очевидная проблема, что разделенные парсер и обработчик приводят к тому, что пока обновленный товар лежит в csv, а в базу еще не попал, парсеру и обработчику эта информация недоступна, и выходит что если накопилось 2-3 изменения товара, то будет происходить обработка этого товара столько же раз вместо игнорирования предыдущих версий и залива только актуальной, что аффектит скорость обновления информации в бд
Собственно идея в хранении метаданных в микроинстансе редиса в виде хэш таблицы, это разгрузит постгрес и чтение/запись метаданных будет сильно быстрее, и обработчик уже будет в курсе что можно выбросить Плюсы минусы подводные камни?
Понимаю что надо будет делать бэкапы редиса периодические, но это не страшно
> ETL перезаписывает строки с тем же id и изменившимся хэшем, но из-за больших объемов это происходит небыстро. Большие объемы это сколько записей в секунду7
Большие объёмы это прежде всего размер конечной таблицы, 3.4 миллиона записей Есть партиции по месяцу, но не особо спасает, это 3 месяца всего
3.4 млн изменений (которые добавляются) в день? Если всего строк в таблице, так это копейки. По памяти, инкремент в одну таблицу был до 1 ляма записей в день (а всего "товаров" было 8 млн которые каждый день проверялись). Сами таблицы с историей были ок 500 лям. таких таблиц до 10 на один сервер
Не, обновлений порядка 200к в день
Я возможно туплю, но просто добавлять, не перезаписывая нельзя? А в момент получения, оконкой все селектить? Насколько я помню, у пг шустрая оконка
Боюсь базу раздует совсем( Попробую попрофайлить это дело, спасибо за идею
Обсуждают сегодня