Автор оригинала: Shahid Shaikh.
Благодаря примерам кода, этот учебник Node.js научит вас, как начать работу с использованием MySQL, как его использовать в производстве и как тестировать одновременные пользователи. Статья была первоначально опубликована в Кодаментатор Шахид Шах ‘s блог .
Node.js и mysql – одно из необходимых обязательств, необходимых для любого веб-приложения. MySQL – один из самых популярных баз данных с открытым исходным кодом в мире, а также эффективно. Почти каждый популярный язык программирования, как Java или PHP Предоставляет драйвер доступа и выполнять операции с MySQL.
В этом руководстве я пытаюсь прикрыть код для обучения и кода для производства.
Вступление
Node.js богат количеством популярных пакетов, зарегистрированных в реестре Package под названием NPM Отказ Большинство из них не так надежны для использования для производства, но есть некоторые, на которых мы можем положиться. Для MySQL есть один популярный водитель под названием Node-Mysql Отказ
В этом руководстве я собираюсь покрывать следующие пункты, связанные с Node.js и mysql:
- Пример кода для начала.
- Код для производства.
- Тестирование параллельных пользователей.
Начиная
Каталог проекта
---node_modules -----+ mysql -----+ express ---index.js ---package.json
Package.json.
{ "name": "node-mysql", "version": "0.0.1", "dependencies": { "express": "^4.10.6", "mysql": "^2.5.4" } }
Установите зависимости с использованием
npm install
Вот пример код, который подключается к базе данных и выполняет запрос SQL:
var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : '< MySQL username >', password : '< MySQL password >', database : '' }); connection.connect(); connection.query('SELECT * from < table name >', function(err, rows, fields) { if (!err) console.log('The solution is: ', rows); else console.log('Error while performing Query.'); }); connection.end();
Убедитесь, что вы начали MySQL на своем порте по умолчанию, который у вас есть и изменил параметр в код выше. Затем запустите код, используя:
node file_name.js
Использование MySQL в производстве
Первый пример код только для учебных целей, а не для полезной нагрузки на производство. MySQL отличается для производственного сценария, так как могут быть тысячи параллельных пользователей, которые превращаются в тонны MySQL-запросов. Первый образец не будет работать для одновременных пользователей, и я покажу вам, почему.
Давайте модифицируем наш код немного и добавьте экспресс-маршруты в этом:
test.js ( Change database settings in code )
var express = require("express"); var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '', database : 'address_book' }); var app = express(); connection.connect(function(err){ if(!err) { console.log("Database is connected ... \n\n"); } else { console.log("Error connecting database ... \n\n"); } }); app.get("/",function(req,res){ connection.query('SELECT * from user LIMIT 2', function(err, rows, fields) { connection.end(); if (!err) console.log('The solution is: ', rows); else console.log('Error while performing Query.'); }); }); app.listen(3000);
Установить осада в вашей системе. Я использую эту команду для установки его в Ubuntu:
apt-get install siege
Затем запустите наш узел и сервер, а затем используйте следующую команду (при условии, что вы запустили сервер узла на порт 3000):
node test.js siege -c10 -t1M http://localhost:3000
Вот выход:
В указанном выше коде мы выпускаем его для автономных подключений I.E одно соединение за раз, но реальность немного отличается. Вы можете получить 100 или 1000 подключений в одном конкретном времени, и если ваш сервер недостаточно мощным, чтобы обслуживать эти запросы, то, по крайней мере, он должен поставить их в очередь.
Пул соединений в MySQL
Пул соединения – это механизм для поддержания кэша соединений баз данных. Таким образом, это соединение можно повторно использовать после его освобождения. В узле MySQL мы можем использовать объединение непосредственно для обработки нескольких соединений и повторно использовать их. Давайте напишем какой-нибудь код с объединением, и проверьте, могут ли он обрабатывать несколько подключений или нет. test.js.
var express = require("express"); var mysql = require('mysql'); var app = express(); var pool = mysql.createPool({ connectionLimit : 100, //important host : 'localhost', user : 'root', password : '', database : 'address_book', debug : false }); function handle_database(req,res) { pool.getConnection(function(err,connection){ if (err) { connection.release(); res.json({"code" : 100, "status" : "Error in connection database"}); return; } console.log('connected as id ' + connection.threadId); connection.query("select * from user",function(err,rows){ connection.release(); if(!err) { res.json(rows); } }); connection.on('error', function(err) { res.json({"code" : 100, "status" : "Error in connection database"}); return; }); }); } app.get("/",function(req,res){- handle_database(req,res); }); app.listen(3000);
Запустите приложение, используя
node test.js
и пожар 10 одновременных пользователей на 1 минуту, используя осаду, используя эту команду:
siege -c10 -t1M http://localhost:3000
Вот выход:
Окончательные комментарии
Осада – это действительно мощный инструмент для тестирования серверов под давлением. Мы создали ограничение в 100 соединений в коде, поэтому вам может быть задается вопросом, будет ли код после 100 одновременных соединений. Ну, позвольте мне ответить на это через код. Огонь 1000 одновременный пользователь на 1 минуту и давайте посмотрим, как наш код реагирует.
siege -c1000 -t1M http://localhost:3000
Если ваш сервер MySQL настроен для обработки такого трафика на одном сокете, то он будет работать, и наш код будет управлять планированием одновременного подключения. Он будет служить 100 соединениями время, но оставшиеся 900 будут в очереди. Таким образом, код не сломается.
Заключение
MySQL является одним из широко используемых баз данных в мире в мире, и она очень хорошо работает с узлом. Узел-MySQL Пул и отладки на основе событий действительно мощно и просты в коде.
дальнейшее чтение
Я верю GitHub Help Страница для модуля Node-mysql достаточно. Посмотрите и дайте ему звезду.