Соединение 1 дБ для всех функций в вызове API - PullRequest
0 голосов
/ 16 января 2020

У меня есть маршрут, который обрабатывает вызовы API для временных отметок. Один из вызовов - "clock_in".

router.route('/clock_in').post(managerCheck, startTimeCheck, isClockedIn, clockIn);

Каждая из этих функций будет выполнять свое собственное соединение с БД, запрашивать у БД некоторую информацию, затем отвечать пользователю или go на следующее ( ) function.

Я использую пул из 'pg-poll'.

Мое соединение выглядит следующим образом.

export const **isClockedIn** = (request, response, next) => {

  const query = `select * from....`;

  const values = [value1, value2];

  pool.connect((err, client, release) => {

    client.query(query, values, (err, result) => {
    //do stuff
    }

и соединение по существу такое же для все функции.

То, что я хотел бы сделать, это иметь только 1 экземпляр pool.connect , тогда каждая функция в вызове API будет использовать это соединение для выполнения своего клиента. запрос . Я просто не уверен, как бы это настроить.

Надеюсь, мой вопрос понятен. Весь мой код работает, он просто неэффективен, так как он создает несколько соединений БД для одного вызова API.

1 Ответ

0 голосов
/ 16 января 2020

Я многому научился, наблюдая за своими соединениями с БД, когда я совершал вызовы из моего API.

Когда вы делаете свой первый вызов с помощью pg.pool, соединение с БД будет установлено. После того как ваш запрос завершится, соединение переводится в состояние ожидания, если выполняется другая команда pg.pool, она будет использовать это незанятое соединение. Соединение будет закрыто через 10 секунд бездействия (вы можете настроить это).

Вы также можете установить максимальное количество соединений (по умолчанию 10). Таким образом, если вы выполните 10 запросов одновременно, они все откроют соединение и запустятся. Их соединения останутся бездействующими после завершения. Если вы запустите еще 10 одновременно, они снова будут использовать эти соединения.

, если вы хотите принудительно установить только 1 соединение, которое никогда не закрывается (не говоря о том, что вы хотите это сделать), вы устанавливаете время простоя на 0 и максимум 1 соединение. Затем, если вы запустите 10 запросов одновременно, они будут выстроены в линию и будут запускаться по одному за раз.

const pool = new pg.Pool({
  user: 'postgres',
  host: 'localhost',
  database: 'database',
  password: 'password',
  port: 5000,
  idleTimeoutMillis: 0,
  max: 1,
});

Эта страница очень полезна, хотя я ее не понимал, пока не посмотрел соединение с базой данных. как мой API работал.

https://node-postgres.com/api/pool

Примечание: приведенный выше код должен быть в своем собственном файле js, и все соединения должны ссылаться на него. Я полагаю, что если вы создадите новый pg.Pools, они откроют свои собственные соединения, которые могут не соответствовать вашим ожиданиям.

...