Доступ к базе данных: процесс на пользователя, поток на пользователя и общий пул - PullRequest
0 голосов
/ 30 сентября 2018

Во время вебинара я слышал, что существует три способа доступа к базе данных для нескольких пользователей:

  1. Использование процесса для пользователя
  2. Поток для пользователя
  3. И пул процессов

Лектор сказал, что процесс на пользователя избавляет от необходимости заботиться о распараллеливании / блокировке / и т. Д., Но он слишком тяжелый и сложный.Поток на пользователя легок, но требует много накладных расходов на блокировку.Пул процессов имеет общую структуру данных при доступе к БД.

Что мне не ясно, - разве пользователи не всегда имеют доступ к одной и той же структуре данных, и независимо от того, есть ли у нас процесс, поток или опрос - нам все еще нужно реализовать блокировку?Почему процессы не требуют блокировки?Каково различие между процессом на пользователя и пулом процессов?Как сказал лектор - общие структуры данных.Но что это значит, если процессы не разделяют БД?Реплицируется ли БД для каждого пользователя, если мы находимся в процессе для каждой пользовательской ситуации?

Я действительно хочу, чтобы это выяснилось, но я не мог спросить об этом во время вебинара.

Спасибо!

1 Ответ

0 голосов
/ 30 сентября 2018

Блокировка требуется только при наличии общего ресурса.При подключении к БД вы сначала создаете объект подключения, а затем через этот объект вы подключаетесь и отправляете свои запросы.В MySQL innoDb база данных выполняет блокировку на уровне строк, и не вся таблица блокируется.Таким образом, если несколько процессов пытаются получить доступ к разным строкам, блокировка не требуется.

При переходе к потокам люди чаще всего создают пул соединений, в котором несколько threads получают доступ к этому пулу.Допустим, у вас есть 50 потоков и пул соединений из 5 объектов.Теперь все 50 потоков не могут получить доступ к этим 5 объектам соединения, которые им нужны, чтобы дождаться освобождения объекта соединения, и как только оно освободится, они могут использовать объект соединения для запуска запроса.Потоки разделяют одно и то же пространство памяти, поэтому в основном все общие ресурсы должны быть поточно-безопасными

Поскольку создание процесса довольно тяжелое, вы хотели бы сохранить его менее 10-20 процессов на машине 4 ГБ.Но создавать потоки дешевле, вы можете иметь их в большом количестве (~ 50).Так что, если не для чего делиться, потоки дадут больше параллелизма.

Опять все сводится к тому, насколько хорош ваш дизайн, и это очень специфично для проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...