Вопрос об асинхронных и синхронных запросах в базе данных

У меня есть обещание, которое одновременно выполняет 3 запроса в моей базе данных.

async parallel(){
   Promise.all([client.query('SELECT * FROM books where book_id = $1' 
   ['bookid']), client.query('SELECT * FROM username where username = $2', 
   ['username']), client.query('SELECT * FROM saved where saved_id = $3', 
   ['saved_id']))
   .then(queryResults => {
        console.info(queryResults[0]);
        console.info(queryResults[1]);
        console.info(queryResults[2]);
   })
}

Если 100 пользователей одновременно выполняют один и тот же запрос, будет ли моя база данных выполнять 300 запросов одновременно?

Было бы лучше сделать синхронный запрос, в котором первый запрос выполняет 100 одновременных запросов, за которыми следуют еще 100 и последние 100, чтобы базе данных приходилось обрабатывать меньше одновременных запросов в один и тот же момент?

Вы никогда не слышали о прокси-сервере?

Mister Jojo 13.06.2019 02:26
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
237
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Объект client может выполнять только один запрос за раз, поэтому запросы будут выполняться не одновременно, а последовательно.

Означает ли это, что если бы 100 пользователей выполняли этот запрос, в базе данных одновременно выполнялись бы только 100 запросов?

WHOATEMYNOODLES 13.06.2019 02:28

Не уверен - либо так, либо 100 запросов выполнялись бы один за другим. Но не все 300 одновременно.

Jack Bashford 13.06.2019 02:29

@WHOATEMYNOODLES Вы создаете новый объект client для каждого обрабатываемого запроса?

Barmar 13.06.2019 02:30

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

WHOATEMYNOODLES 13.06.2019 02:40
Ответ принят как подходящий

Как говорит @JackBashford, объект client представляет собой одно соединение с базой данных, и одновременно через соединение может выполняться только один запрос.

Если бы вы действительно хотели выполнять все 3 запроса одновременно, вам пришлось бы создать 3 разных клиента, и тогда код выглядел бы так:

async parallel(){
   Promise.all([client1.query('SELECT * FROM books where book_id = $1' 
   ['bookid']), client2.query('SELECT * FROM username where username = $2', 
   ['username']), client3.query('SELECT * FROM saved where saved_id = $3', 
   ['saved_id']))
   .then(queryResults => {
        console.info(queryResults[0]);
        console.info(queryResults[1]);
        console.info(queryResults[2]);
   })
}

И действительно, если 100 пользователей запускают этот код одновременно, вы получите 300 одновременных запросов. В зависимости от того, как вы настроили свою базу данных, у вас могут закончиться подключения к серверу, и некоторые из них не будут работать.

Так, например, в моем коде, скажем, каждый запрос выполнялся за одну секунду. Моя база данных будет выполнять 100 одновременных запросов в первую секунду, снова 100 в следующую секунду и еще 100 в третью секунду?

WHOATEMYNOODLES 13.06.2019 02:37

Да, это то, что, вероятно, произойдет.

Barmar 13.06.2019 02:41

Другие вопросы по теме