С точки зрения проектирования/масштабируемости систем, каковы некоторые стандартные отраслевые стратегии работы с системой, которая требует интенсивной записи в конкретную таблицу в БД.
Для простоты предположим, что таблица представляет собой инвентарную таблицу для продуктов и имеет столбец «Название продукта» и столбец «Количество», и он просто увеличивается на +1 каждый раз, когда новый продукт покупается в системе. И есть миллионы пользователей, покупающих разные продукты каждую секунду, и мы должны отслеживать последний счет каждого продукта, но это не обязательно должно быть строго в реальном времени, может быть приемлемо 5-минутное отставание.
Мои варианты:
1) Репликация Master-Slave, где главная БД обрабатывает все записи, а подчиненные — чтение. Но это не решает проблему записи
2) Разделение БД на основе диапазона названий продуктов или его хэш-значения. Но что, если есть конкретный продукт (например, Apple), который получает большое количество обновлений за короткое время, он все равно попадет в одну и ту же базу данных.
3) Пакетные обновления? Использовать какое-то кэширование и записывать в таблицу каждые X секунд с кумулятивным подсчетом того, что мы получили за эти X секунд? Является ли это допустимым вариантом и какой механизм кэширования я использую? А что, если произойдет сбой между последним чтением и следующей записью? Как восстановить потерянный счет?
4) Есть ли другие очевидные варианты, о которых я забыл?
Любое понимание ценится!