Всем привет Вопрос про эффективное хранение метаданных Есть парсер товаров, у товаров

помимо основных полей есть id (уникальный внешний бигинт авто инкремент), таймстамп сбора данных, мд5 хэш полного текста ответа апи сбора. Сейчас все это добро хранится в одной большой таблице постгреса, ETL перезаписывает строки с тем же id и изменившимся хэшем, но из-за больших объемов это происходит небыстро.
Парсер пишет чанки по 250 товаров в csv, вне зависимости от того есть товар с таким же id+md5 в базе или нет, потом обработчик (пандас) эти чанки сгребает, колдует и пуляет в сырую таблицу сравнивая id+md5.
Очевидная проблема, что разделенные парсер и обработчик приводят к тому, что пока обновленный товар лежит в csv, а в базу еще не попал, парсеру и обработчику эта информация недоступна, и выходит что если накопилось 2-3 изменения товара, то будет происходить обработка этого товара столько же раз вместо игнорирования предыдущих версий и залива только актуальной, что аффектит скорость обновления информации в бд

Собственно идея в хранении метаданных в микроинстансе редиса в виде хэш таблицы, это разгрузит постгрес и чтение/запись метаданных будет сильно быстрее, и обработчик уже будет в курсе что можно выбросить Плюсы минусы подводные камни?
Понимаю что надо будет делать бэкапы редиса периодические, но это не страшно

6 ответов

3 просмотра

> ETL перезаписывает строки с тем же id и изменившимся хэшем, но из-за больших объемов это происходит небыстро. Большие объемы это сколько записей в секунду7

Алексей-Мелолян Автор вопроса

Большие объёмы это прежде всего размер конечной таблицы, 3.4 миллиона записей Есть партиции по месяцу, но не особо спасает, это 3 месяца всего

Алексей Мелолян
Большие объёмы это прежде всего размер конечной та...

3.4 млн изменений (которые добавляются) в день? Если всего строк в таблице, так это копейки. По памяти, инкремент в одну таблицу был до 1 ляма записей в день (а всего "товаров" было 8 млн которые каждый день проверялись). Сами таблицы с историей были ок 500 лям. таких таблиц до 10 на один сервер

Алексей-Мелолян Автор вопроса

Я возможно туплю, но просто добавлять, не перезаписывая нельзя? А в момент получения, оконкой все селектить? Насколько я помню, у пг шустрая оконка

Алексей-Мелолян Автор вопроса
Владислав Lazycat
Я возможно туплю, но просто добавлять, не перезапи...

Боюсь базу раздует совсем( Попробую попрофайлить это дело, спасибо за идею

Похожие вопросы

Обсуждают сегодня

if (user?.choseType === 'oneDay') { await ctx.reply( 'Добро пожаловать в команду «Магнита»! Правда, на один день ☺️ ', ); await ctx.s...
Kokni
1
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Это фейк @cruppto_newbot?
Antskup
13
всем салют сегодня утро заметил что бот не может отправлять фотки по url. ручками в браузере ссылка норм открывает фотки. падает ошибка 'Bad Request: failed to send message ...
Vasya Ivanov
9
ребят, привет. за какое время бот полученную заявку на вступление в группу может принять \отклонить? Помню речь была про 5 минут, сейчас как?
Роман Ромашин :)
10
Доброго времени суток. Правильно ли я понимаю, что с введением новой платежной единицы stars, я просто могу оставить текущую платёжку от Юкассы, которая выполняется на сайте с...
Prokhor Chulkov
7
Добрый день! Не подскажете как к модели Категории Шопоголика добавить отношение Тейлора. Пробовал по документации, но не получается. Мб уже кто-то делал?
Николай Афанасенко
6
Добрый день! На Odoo 16.0 через 1-2 дня перестают работать кроны. В логах одна только ошибка на момент, когда сработал последний крон. Может кто-то уже с этим разбирался?
Denis Валенчиц
3
вопрос: кто как решает вопрос с динамической подгрузкой скриптов для отдельных страниц с включенным turbo router?
Sergei Toroptsev
25
https://pastebin.com/BC4pjp4u кто-нибудь мне может объяснить почему это так работает и как работает правильно wizard и почему иногда в контекст появляются сообщения от бота, н...
Kokni
1
Карта сайта