Здравствуйте.
Прошу совета по поводу решения такой задачи:
Нужно получать и хранить у себя все отзывы с одного маркетплейса.
Мне поставили такую задачу и начал я с малого - написал парсеры, а именно
- парсер продавцов
- парсер товаров каждого продавца (на вход id продавца)
- парсер отзывов каждого товара (на вход id товара)
Напиcал на php (laravel) запустил джобу (которой вертит Horizon), при тестировании все ок (опустил моменты про подстановку прокси, про сохранние еще какой-то не важной сейчас информации)
В итоге у меня несколько табличек вышло: продавцы, товары, отзывы, авторы (отзывов) все.
Все это даже работает в ограниченных рамках (парсинг одной категории)
По расчетам база должны быть порядка 450ГБ и там 10+ ярдов отзывов.
С такими объемами я даже близко ранее не работал, поэтому прошу помощи.
Мои основной вопрос:
Сейчас парсер работает с одним воркером, те один долгоживущий процесс добавляет отзывы в базу, для продакшена это не годится, будет порядка 1000 воркеров, я не могу уложить в голове как 1000 процессов будут делать инсерт в базу и как будет пересчитываться индекс при этом? это же займет все время, а мне еще и селекты нужно к базе выполнять же... я вижу тут проблему и не понимаю как выйти из нее, вставлять батчами, а батчи в редисе хранить... уже какими-то костлями пахнет, как делаю взрослые дядьки?
Может я стек для хранения не тот выбрал (Mysql)
Может смотреть в строну постгрес, партицирования, шардинга и репликаци, опять же не сталкивался с этм в проде, только читал для себя и не представляю как сделать рпавильно, буду рад услышапть ваши мылси?
А может кликхаус (хотя зачем.. аналитики никакой, селекты нужны с джоинами, текущие селекты за нескольк мс отдаются, инлексы помогают)
Вобщем не понимаю как дальше делать и не наломать дров.
Кратко: как вставлять по 100.000 строк в секнду при этом пресчиытвать индексы да и так чтобы select запросы не повисли