0

Я работаю над приложением, которое включает очень высокое выполнение запросов обновления/выбора в базе данных.Какое хранилище данных лучше всего подходит для моего сценария

У меня есть базовый стол (A), который будет содержать около 500 записей для объекта в течение дня. И для каждого пользователя в системе, вариация этого объекта создается на основе некоторых предпочтений пользователя, и они сохраняются в другой таблице (B). Это делается заданием cron, которое выполняется ежедневно в полночь.

Так что, если в таблице A будет 10 000 пользователей и 500 записей, в таблице B на этот день будет 5M записей. Я всегда держу данные за один день в этих таблицах, а в полночь я архивирую исторические данные в HBase. Эта настройка работает нормально, и до сих пор у меня нет проблем с производительностью.

В последнее время произошли некоторые изменения в бизнес-требованиях, и теперь некоторые атрибуты в базовой таблице A (для 15-20 записей) будут меняться каждые 20 секунд и на основе этого я должен пересчитать некоторые значения для всех этих записей изменений в таблице B для всех пользователей. Несмотря на то, что изменяется только 20 основных записей, мне необходимо выполнить перерасчет и обновить 200 000 пользовательских записей, которые занимают более 20 секунд, и к тому моменту следующее обновление происходит в конечном итоге, в результате чего все запросы выбора становятся в очереди. Я получаю около 3 запросов/5 секунд от онлайн-пользователей, что приводит к 6-9 Выбор запросов. Чтобы ответить на запрос api, я всегда использую поля в таблице B.

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

Может ли кто-нибудь предложить лучшую альтернативу? Помогает ли мне база данных nosql + reational? Существуют ли какие-либо платформы/хранилища данных, которые позволят мне часто обновлять данные без блокировки и в то же время давать мне гибкость при выполнении отдельных запросов в разных полях в сущности?

Приветствия Кувшины

ответ

0

Я рекомендую, глядя на СУБД памяти, которая полностью реализует MVCC, чтобы исключить блокирование вопросов. Если ваше приложение в настоящее время использует SQL, тогда нет причин для перехода от него к nosql. Требования к характеристикам, которые вы описываете, безусловно, могут быть выполнены с помощью СУБД с поддержкой SQL.

0

Что я понимаю из вашего высказывания, что вы обновляете 200 тыс. Записей за каждые 20 секунд. Затем, как и через 10 минут, вы обновите почти все свои данные. В таком случае, почему вы записываете это состояние в базу данных, если это так часто обновляется. Я ничего не знаю о ваших требованиях, но почему бы вам просто не рассчитать его по требованию, используя данные из таблицы A?

Смежные вопросы