Бизнес-логика c:
Мое приложение сканирует множество (сотни, а иногда и тысячи) веб-страниц каждые несколько часов и сохраняет все ссылки (т.е. все теги привязки) на этом веб-страница в таблице базы данных MySQL, скажем, links
. Эта таблица растет очень день ото дня (уже около 20 миллионов записей).
Технические данные:
У меня есть уникальный индекс, объединенный на [webpage_id
, link
] в таблице links
. Также у меня есть столбец crawl_count
в той же таблице. Теперь, когда я сканирую веб-страницу, я уже знаю webpage_id
(внешний ключ к таблице webpages
), и я получаю ссылки на этой веб-странице (то есть массив link
), которые я просто делаю запрос вставки или обновления, не беспокоясь о что уже есть в таблице.
INSERT INTO ........ ON DUPLICATE KEY UPDATE crawl_count=crawl_count+1
Проблема:
Таблица растет каждый день, и я хочу оптимизировать таблицу для производительности. Я рассмотрел следующие варианты:
- Разделение: таблица разделов по доменам. Все веб-страницы принадлежат определенному домену. Например: веб-страница https://www.amazon.in/gp/goldbox?ref_=nav_topnav_deals принадлежит домену https://www.amazon.in/
- Нет SQL, как DynamoDB. У меня есть другие таблицы приложений в MySQL DB, которые я не хочу переносить в DynamoDB, если это абсолютно не требуется. Также я рассмотрел изменение в логике приложения c (например: измените структуру таблицы
webpages
на что-то вроде
{webpage: "http://example.com/new-brands", links: [link1, link2, link3]}
и перенесите эту таблицу в DynamoDB, чтобы у меня не было links
таблица. Но, опять же, существует ограничение для каждой записи в DynamoDB (400 КБ). Что, если оно превысит этот предел?
Я прочитал за и против использования любого из подходов. Что касается моего Понимание идет, DynamoDB, кажется, не подходит для моей ситуации. Но все же хотел опубликовать этот вопрос, чтобы я мог принять правильное решение для этого сценария.