Я работаю над приложением, которое включает в себя очень высокое выполнение запросов на обновление / выборку в базе данных.
У меня есть базовая таблица (A), в которой будет около 500 записей для объекта за день. И для каждого пользователя в системе изменение этого объекта создается на основе некоторых предпочтений пользователя, и они сохраняются в другой таблице (B). Это делается cron-работой, которая выполняется каждый день в полночь.
Таким образом, если в таблице A 10 000 пользователей и 500 записей, в этот день в таблице B будет 5 миллионов записей. Я всегда храню данные за один день в этих таблицах и в полночь архивирую исторические данные в HBase. Эта настройка работает нормально, и у меня пока нет проблем с производительностью.
В последнее время в бизнес-требованиях произошли некоторые изменения, и теперь некоторые атрибуты в базовой таблице A (для 15–20 записей) будут меняться каждые 20 секунд, и на основании этого мне придется пересчитать некоторые значения для всех этих записей вариантов в таблице B для все пользователи. Несмотря на то, что меняются только 20 основных записей, мне нужно пересчитать и обновить 200 000 пользовательских записей, что займет более 20 секунд, и к тому времени произойдет следующее обновление, в результате чего все запросы Select будут поставлены в очередь. Я получаю около 3 запросов / 5 секунд от онлайн-пользователей, что приводит к 6-9 запросам на выборку. Чтобы ответить на запрос API, я всегда использую поля в таблице B.
Я могу купить больше вычислительной мощности и решить эту ситуацию, но мне интересно иметь правильно масштабируемую систему, которая может обслуживать даже миллион пользователей.
Кто-нибудь здесь может предложить лучшую альтернативу? Помогает ли мне здесь nosql + реляционная база данных? Существуют ли какие-либо платформы / хранилища данных, которые позволяют мне часто обновлять данные без блокировки и в то же время дают мне гибкость при выполнении запросов на выборку в различных полях объекта?