Size: a a a

Node.js — русскоговорящее сообщество

2020 March 23

CM

Chingiz Mamiyev in Node.js — русскоговорящее сообщество
Dmitriy Gololobov
Всем привет.
Может кто-то популярно объяснить пару моментов работы с mysql .

Подключаюсь из express через mysql2/promise

Каким образом лучше выполнять соединения?

Первый вариант (соединение с бд проходит внутри хэндлеров):

app.get('/point1', async(req, res)=>{
    const conn = await mysql.createConnection(dbOptionsObject)
   // тут обработчик маршрута плюс запросы к базе
    conn.end()
  res.send('OK')
})
app.post('/point2', async(req, res)=>{
    const conn = await mysql.createConnection(dbOptionsObject)
   // тут обработчик маршрута плюс запросы к базе
    conn.end()
  res.send('OK')
})


Второй вариант (соединение с бд происходит до обработчиков):
const conn = await mysql.createConnection(dbOptionsObject)

app.get('/point1', async(req, res)=>{
   // тут обработчик маршрута плюс запросы к базе
  res.send('OK')
})
app.post('/point2', async(req, res)=>{
   // тут обработчик маршрута плюс запросы к базе
  res.send('OK')
})


И есть еще вариант с пулами, но тут я прям дуб-дубом

Суть в том, что мне надо каким-то образом распределить нагрузку.
Есть события некторые при которых одновременно на фронт стучится 200-300 человек.
При этом от каждого в бэк летит запрос, которые требует доступа к бд.
И скрипт падает с ошибкой "too many connections to MySql..."

Вот от этого хотелось бы избавиться
Не надо каждый раз подключаться к бд
источник

KG

Kool Guy in Node.js — русскоговорящее сообщество
Dmitriy Gololobov
Всем привет.
Может кто-то популярно объяснить пару моментов работы с mysql .

Подключаюсь из express через mysql2/promise

Каким образом лучше выполнять соединения?

Первый вариант (соединение с бд проходит внутри хэндлеров):

app.get('/point1', async(req, res)=>{
    const conn = await mysql.createConnection(dbOptionsObject)
   // тут обработчик маршрута плюс запросы к базе
    conn.end()
  res.send('OK')
})
app.post('/point2', async(req, res)=>{
    const conn = await mysql.createConnection(dbOptionsObject)
   // тут обработчик маршрута плюс запросы к базе
    conn.end()
  res.send('OK')
})


Второй вариант (соединение с бд происходит до обработчиков):
const conn = await mysql.createConnection(dbOptionsObject)

app.get('/point1', async(req, res)=>{
   // тут обработчик маршрута плюс запросы к базе
  res.send('OK')
})
app.post('/point2', async(req, res)=>{
   // тут обработчик маршрута плюс запросы к базе
  res.send('OK')
})


И есть еще вариант с пулами, но тут я прям дуб-дубом

Суть в том, что мне надо каким-то образом распределить нагрузку.
Есть события некторые при которых одновременно на фронт стучится 200-300 человек.
При этом от каждого в бэк летит запрос, которые требует доступа к бд.
И скрипт падает с ошибкой "too many connections to MySql..."

Вот от этого хотелось бы избавиться
Второе
источник

DG

Dmitriy Gololobov in Node.js — русскоговорящее сообщество
Спасиб. Подтвердили догадки.
Уже не помню почему сделал подключение в первом варианте.
Придется переписывать)
источник

IK

Iliya Kobaliya in Node.js — русскоговорящее сообщество
Не могу разобраться, мне такая выборка дает все связи городов , а мне надо получить для определенного пользователя... SELECT cities.name FROM cities JOIN user_cities ON cities.id = user_cities.city_id;
источник

СМ

Сергей Мезенцев in Node.js — русскоговорящее сообщество
Iliya Kobaliya
Не могу разобраться, мне такая выборка дает все связи городов , а мне надо получить для определенного пользователя... SELECT cities.name FROM cities JOIN user_cities ON cities.id = user_cities.city_id;
А условие где?
источник

IK

Iliya Kobaliya in Node.js — русскоговорящее сообщество
insert into users (id,name) values (1,"Roma");
insert into users (id,name) values (2,"Seva");
insert into users (id,name) values (3,"Iliya");

insert into cities (id,name) values (1,"Dnepr");
insert into cities (id,name) values (2,"Kharkov");
insert into cities (id,name) values (3,"Kramatorsk");

insert into user_cities (user_id,city_id) values (1,1);
insert into user_cities (user_id,city_id) values (2,2);
insert into user_cities (user_id,city_id) values (3,1);
insert into user_cities (user_id,city_id) values (3,2);
insert into user_cities (user_id,city_id) values (3,3);

SELECT cities.name FROM cities
JOIN users ON user_cities.user_id = 3;
JOIN user_cities ON cities.id = user_cities.city_id;
источник

СМ

Сергей Мезенцев in Node.js — русскоговорящее сообщество
WHERE users.id = 3 где?
источник

И

Илья | 😶 in Node.js — русскоговорящее сообщество
Кто ? Who?
источник

СМ

Сергей Мезенцев in Node.js — русскоговорящее сообщество
И первый JOIN неправильный
источник

СМ

Сергей Мезенцев in Node.js — русскоговорящее сообщество
SELECT cities.name from CITIES
INNER JOIN user_cities ON cities.id = user_cities.city_id
WHERE user_cities.user_id = 3;
источник

СМ

Сергей Мезенцев in Node.js — русскоговорящее сообщество
Хотя бы так
источник

IK

Iliya Kobaliya in Node.js — русскоговорящее сообщество
Inner можно не указывать?
источник

СМ

Сергей Мезенцев in Node.js — русскоговорящее сообщество
Почитай в документации, чем разные JOIN-ы отличаются
источник

IK

Iliya Kobaliya in Node.js — русскоговорящее сообщество
Сергей Мезенцев
Почитай в документации, чем разные JOIN-ы отличаются
Огромное Вам спасибо!)
источник

🇻

🇻 in Node.js — русскоговорящее сообщество
Привет, хочу сделать проект для обучения и взять новые технологии, которыми не пользовался, а именно typescript, graphql и mongodb

И вот я замечаю что интерфейсы ts, схемы gql и mongo похожи, да и делают они вообщем то одно и тоже - описывают структуру данных
Нет ли какой то штуки, что бы я мог в одном месте создать схему для всех трех сразу
Ну то есть что бы я описал интерфейс на typescript и он сконвертировался бы в схемы mongoose и graphql?
источник

IK

Iliya Kobaliya in Node.js — русскоговорящее сообщество
Такой еще вопрос,можно как-то ограничить максимальное кол-во связей для пользователя? Или мне на сервере каждый раз проверять?
источник

СМ

Сергей Мезенцев in Node.js — русскоговорящее сообщество
Iliya Kobaliya
Такой еще вопрос,можно как-то ограничить максимальное кол-во связей для пользователя? Или мне на сервере каждый раз проверять?
Непонятно
источник

IK

Iliya Kobaliya in Node.js — русскоговорящее сообщество
Ну вот у меня есть таблица - города,пользователи,связи. Могу ли я пользователям ограничить связь,тоесть у пользователя не более 10 городов?
источник

IK

Iliya Kobaliya in Node.js — русскоговорящее сообщество
вот пример создания  связей пользователь - город по id.
insert into user_cities (user_id,city_id) values (1,1);
insert into user_cities (user_id,city_id) values (2,2);
insert into user_cities (user_id,city_id) values (3,1);
insert into user_cities (user_id,city_id) values (3,2);
insert into user_cities (user_id,city_id) values (3,3);
источник

IK

Iliya Kobaliya in Node.js — русскоговорящее сообщество
что бы у некоторого user_id было не более 10 city_id
источник