У меня есть обещание, которое одновременно выполняет 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, чтобы базе данных приходилось обрабатывать меньше одновременных запросов в один и тот же момент?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Объект client может выполнять только один запрос за раз, поэтому запросы будут выполняться не одновременно, а последовательно.
Означает ли это, что если бы 100 пользователей выполняли этот запрос, в базе данных одновременно выполнялись бы только 100 запросов?
Не уверен - либо так, либо 100 запросов выполнялись бы один за другим. Но не все 300 одновременно.
@WHOATEMYNOODLES Вы создаете новый объект client для каждого обрабатываемого запроса?
Нет, я использую один и тот же клиент только для всего запроса. Я также использую пулы, поэтому надеюсь, что у меня не закончатся подключения к серверу.
Как говорит @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 в третью секунду?
Да, это то, что, вероятно, произойдет.
Вы никогда не слышали о прокси-сервере?