Как при помощи Node.js + MySQL упорядочить 100 Гбайт данных
Эта статья поведает о том, как можно эффективно обрабатывать миллиарды строк, которые занимают сотни гигабайт памяти, при помощи Node.js и MySQL. Вторичная цель статьи — это помочь определиться, подходит ли такое решение для ваших нужд. Код, который будет использоваться в этом примере, можно найти на GitHub.
Почему Node.js и MySQL?
MySQL будет использоваться для хранения информации из Trace — инструмента Node.js для отладки и мониторинга производительности.
Выбор пал на MySQL, потому что на момент принятия решения Postgres не очень хорошо обновлял строки и обновление неизменяемых данных было бы неоправданно сложным. К сожалению, эти решения не соответствуют требованиям ACID, что затрудняет их использование.
Однако при хорошем индексировании и правильном планировании MySQL, это может быть подходящим решением для поставленной задачи.
2 августа в 19:00, Онлайн, Беcплатно
MySQL имеет несколько модулей хранения. InnoDB является стандартным, в котором есть большинство функций. Однако следует учитывать, что таблицы InnoDB не изменяемы, что означает, что каждый оператор ALTER TABLE скопирует все данные в новую таблицу. Это ухудшит ситуацию, когда возникнет необходимость в переносе уже существующей базы данных.
Если имеются номинальные значения, каждое из которых имеет множество связанных данных, например, у каждого из пользователей есть множество продуктов, а пользователей довольно много — пожалуй, наиболее оптимальным будет создание отдельных таблиц с именем _ для каждой из сущностей. Таким образом можно значительно уменьшить размер конкретной таблицы.
Кроме того, если не разделить пользователей по таблицам, очистка данных пользователя в случае удаления учетной записи будет являться операцией с постоянной временной сложностью алгоритма O(1), когда время выполнения не зависит от размера обрабатываемых данных. Это очень важно, потому что, если нужно удалить большое количество значений из больших таблиц, MySQL может решить использовать неверный индекс или вообще не использовать индексы. Если не создавать отдельных таблиц для каждой сущности, вы не сможете использовать подсказки для DELETE , чтобы указать MySQL, какие именно индексы нужно обрабатывать. Вы также можете захотеть использовать ALTER для таблицы, чтобы удалить данные, но это приведет к копированию каждой строки в новую таблицу, что не является рациональным при использовании одной большой таблицы для всех пользователей.
Создание таблиц для каждого пользователя, на первый взгляд, усложняет задачу, но это может быть единственным решением, когда дело касается удаления пользователей или подобных объектов с огромным количеством связанных данных.
Однако перед тем как использовать динамически созданные таблицы, стоит попробовать удалить строки в чанках (англ. chunks). Такой вариант также может сработать и в этом случае упростит весь процесс. Конечно, если данные появляются быстрее, чем происходит их удаление, решение с чанками не подойдет.
Но что если таблицы все еще остались огромными даже после их разделения по пользователями и также нужно удалить устаревшие строки? А данные все еще появляются быстрее, чем происходит их удаление? В этом случае стоит попробовать встроенный в MySQL инструмент для секционирования таблиц. Это удобно, когда нужно разделить данные по постоянным или переменным значениям, например, по времени создания.
Секционирование таблиц с помощью MySQL
С MySQL секционированная таблица будет работать так, как если бы она была несколькими таблицами, но можно использовать тот же привычный интерфейс без изменений в логике приложения. Это также означает, что можно удалять разделы, как если бы происходило удаление таблиц.
Документация хорошая, но довольно многословная (в конце концов, это не простая тема), поэтому просто создадим секционированную таблицу.
В коде нет ничего необычного до PARTITION BY RANGE .
В MySQL таблицы можно разделить на RANGE , LIST , COLUMN , HASH и KEY , о которых можно прочитать в документации. Стоит обратить внимание, что ключ секционирования должен быть частью первичного ключа или любых уникальных индексов.
Все, что начинается с , должно быть понятным. Каждый раздел содержит значения, для которых столбец created_at меньше даты следующего дня. Это также означает, что from20120414 содержит все данные, которые старше 2012-04-15, так что этот раздел будет удален при выполнении очистки.
Разделы start и future нуждаются в некотором разъяснении: future содержит данные для дат, которые еще не включены в правила секционирования. Если невозможно выполнить секционирование вовремя, все данные, поступившие 2017-05-17 и позже, будут в этом разделе, и мы ничего не потеряем. Раздел start является неким защитным механизмом. Ожидается, что все строки имеют значение DATETIME created_at , однако нужно подготовиться к возможным ошибкам. Если по какой-то причине в строке в этом поле будет NULL , она окажется в разделе start . Это укажет нам на ошибки, и, значит, нужно разбираться.
При использовании секционирования MySQL сохранит эти данные на отдельных частях диска, как если бы они были отдельными таблицами, и автоматически упорядочит все данные на основании ключа секционирования.
Однако есть некоторые ограничения при использовании секционирования, которые необходимо принять во внимание:
- кэш запросов не поддерживается;
- внешние ключи не поддерживаются для секционированных таблиц InnoDB;
- секционированные таблицы не поддерживают индексы или поисковые запросы FULLTEXT .
Ограничений гораздо больше, это лишь основные.
Если нужно создать новый раздел, то необходимо реорганизовать существующий и разбить его в соответствии с потребностями:
Удаление разделов происходит с помощью ALTER TABLE , поскольку выполняется аналогично удалению таблиц:
Как можно увидеть, нужно включать фактические имена и описания разделов в операторах. Они не могут быть динамически генерированы MySQL, поэтому придется обрабатывать их в логике приложения. Это будет рассмотрено дальше.
Пример секционирования при помощи Node.js и MySQL
Рассмотрим практическое решение. Для примера здесь используется knex — инструмент запросов для JavaScript. Для тех, кто знаком с SQL, понимание кода не составит труда.
Сначала создадим таблицу:
Это практически то же выражение, что было выше, но в задаче необходимо динамически создавать имена и описания разделов. Вот почему был создан метод getPartitionStrings .
MAX_DATA_RETENTION — 2 = 5 создает последовательность от 5 до -2 (последнее число не входит в последовательность) → [ 5, 4, 3, 2, 1, 0, -1 ] , после этого вычитаются значения из текущего времени и создается раздел today и его предел tomorrow . Порядок очень важен, поскольку MySQL выдаст ошибку, если значения для разделения находятся не в возрастающем порядке.
Пример удаления больших масштабов данных при помощи MySQL и Node.js
Теперь можно шаг за шагом разобраться с удалением данных. Полный код можно посмотреть здесь.
Первый метод, removeExpired , получает список текущих разделов, затем передает его в repartition .
Сначала выбираются все существующие в настоящее время разделы из таблицы information_schema.partitions , которая управляется MySQL.
Затем создаются все разделы, которые должны существовать для таблицы. Если A — это множество разделов, которые существуют, а B — множество разделов, которые должны существовать, тогда:
partitionsToBeCreated = B \ A
partitionsToBeDropped = A \ B
getPartitionsThatShouldExist creates set B .
Создание объектов разделов очень похоже на создание выражения CREATE TABLE . PARTITION BY RANGE . Также важно проверить, является ли раздел, который будет создан, старше текущего самого старого раздела, ведь со временем может понадобиться изменить dataRetention .
Пример одного из возможных сценариев:
Пользователи могут хранить данные в течение 7 дней, но также существует возможность расширить этот диапазон до 10 дней. Сначала у пользователя есть разделы, которые охватывают дни в следующем порядке: [ start, -7, -6, -5, -4, -3, -2, -1, future ] . Вскоре пользователь решает увеличить срок хранения данных. Отсутствующие разделы в этом случае: [ -10, -9, -8, 0 ] .
При очистке текущий скрипт попытается реорганизовать раздел future для отсутствующих разделов, добавляя их после текущих.
Создание дополнительных разделов, которые старше 7 дней, не имеет смысла, потому что эти данные будут заброшены так далеко, что это создаст список разделов, который выглядит так: [ start, -7, -6, -5, -4, -3, -2, -1, -10, -9, -8, 0, future ] . Непоследовательно возрастающий список приведет к ошибке MySQL, и вся операция завершится неудачей.
Функция MySQL TO_DAYS(date) вычисляет количество дней, прошедших с 1 января 2000 года, поэтому мы повторяем это в JavaScript.
Теперь, когда созданы разделы, которые нужно удалить, и разделы, которые должны быть созданы, нужно создать новый раздел для нового дня.
Здесь просто выполняется код для создания новых разделов.
Запуская этот скрипт ежечасно, можно убедиться в том, что все идет по плану. Это также поможет выполнять очистку должным образом, по крайней мере, один раз в день.
Итак, первое, что нужно проверить — это создать любой раздел. Это должно произойти только при первом прогоне, после чего функция 23 раза в день будет лишь выполнять проверку.
Также необходимо удалить устаревшие разделы.
Этот код создает тот же самый ALTER TABLE . DROP PARTITION , который был показан выше.
И, наконец, все готово к реорганизации.
Заключение
Как можно видеть, вопреки распространенному мнению, совместимые с ACID решения СУБД, такие как MySQL, могут использоваться, когда обрабатываются большие объемы данных, поэтому необязательно отказываться от функций транзакционных баз данных.
Тем не менее, разделение таблиц имеет довольно много ограничений, а это означает, что невозможно будет использовать все возможности, которые InnoDB предоставляет для обеспечения гарантированного сохранения данных. Также может потребоваться обработать в логике приложения то, что без секционирования было бы реализовано средствами СУБД. Например, ограничения внешнего ключа или полнотекстовый поиск.
Источник
Node js mysql таблица
Введние в Node.JS
Node.js — это платформа на котрой можно запустить JavaScript и использует асинхронное программирование.
Node.js можно использовать в приложениях баз данных.
Одна из самых популярных баз данных — MySQL.
Сохраните приведенный выше код в файле с именем connect.js и запустите этот файл:
C:\Users\Your Name>node connect.js
Что даст вам такой результат:
Connected!
Метод запроса принимает в качестве параметра инструкции sql и возвращает результат.
Сохраните приведенный выше код в файле с именем create_db.js и запустите файл:
C:\Users\Your Name>node create_db.js
Что даст вам такой результат:
Connected!
Database created
Сохраните приведенный выше код в файле с именем create_table.js и запустите файл:
C:\Users\Your Name>node create_table.js
Что даст вам такой результат:
Connected!
Table created
Сохраните приведенный выше код в файле с именем db_insert.js и запустите этот файл:
C:\Users\Your Name>node db_insert.js
Что даст вам такой результат:
Connected!
1 record inserted
Сохраните приведенный выше код в файле с именем db_insert_multple.js и запустите этот файл:
C:\Users\Your Name>node db_insert_multple.js
Что даст вам такой результат:
Connected!
Number of records inserted: 14
Что даст такой результат:
14
Сохраните приведенный выше код в файле с именем db_insert_id.js и запустите этот файл:
C:\Users\Your Name>node db_insert_id.js
Что даст вам что-то вроде этого взамен:
1 record inserted, ID: 15
Что даст такой результат:
Apple st 652
Что даст такой результат:
address
Обратите внимание на предложение WHERE в синтаксисе DELETE: предложение WHERE указывает, какую запись или записи следует удалить. Если вы опустите предложение WHERE, все записи будут удалены!
Сохраните приведенный выше код в файле с именем db_delete.js и запустите этот файл:
C:\Users\Your Name>node db_delete.js
Что даст вам такой результат:
Number of records deleted: 1
Что даст такой результат:
1
Сохраните приведенный выше код в файле с именем db_drop_table.js и запустите этот файл:
C:\Users\Your Name>node db_drop_table.js
Что даст вам такой результат:
Table deleted
Как видите, единственное отличие состоит в том, что для свойства warningCount установлено значение 1, если таблица не существует.
Обратите внимание на предложение WHERE в синтаксисе UPDATE: предложение WHERE указывает, какую запись или записи следует обновить. Если вы опустите предложение WHERE, все записи будут обновлены!
Сохраните приведенный выше код в файле с именем db_update.js и запустите этот файл:
C:\Users\Your Name>node db_update.js
Что даст вам такой результат:
1 record(s) updated
Что даст такой результат:
1
Примечание: Номера поменяны местами: «LIMIT 2, 5» совпадает с «LIMIT 5 OFFSET 2».
Как видно из приведенного выше результата, возвращаются только записи с совпадением в обеих таблицах.
Источник
Node.js MySQL Create Table
Creating a Table
To create a table in MySQL, use the «CREATE TABLE» statement.
Make sure you define the name of the database when you create the connection:
Example
Create a table named «customers»:
var mysql = require(‘mysql’);
var con = mysql.createConnection( <
host: «localhost»,
user: «yourusername«,
password: «yourpassword«,
database: «mydb»
>);
con.connect(function(err) <
if (err) throw err;
console.log(«Connected!»);
var sql = «CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))»;
con.query(sql, function (err, result) <
if (err) throw err;
console.log(«Table created»);
>);
>);
Save the code above in a file called «demo_create_table.js» and run the file:
Which will give you this result:
Primary Key
When creating a table, you should also create a column with a unique key for each record.
This can be done by defining a column as «INT AUTO_INCREMENT PRIMARY KEY» which will insert a unique number for each record. Starting at 1, and increased by one for each record.
Example
Create primary key when creating the table:
var mysql = require(‘mysql’);
var con = mysql.createConnection( <
host: «localhost»,
user: «yourusername«,
password: «yourpassword«,
database: «mydb»
>);
con.connect(function(err) <
if (err) throw err;
console.log(«Connected!»);
var sql = «CREATE TABLE customers (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), address VARCHAR(255))»;
con.query(sql, function (err, result) <
if (err) throw err;
console.log(«Table created»);
>);
>);
If the table already exists, use the ALTER TABLE keyword:
Источник
Создание RESTful API с использованием NodeJS и MySQL
REST (Representational State Transfer) представляет собой набор принципов построения веб-службы, предназначенной для изменения или просмотра информации без обращения к серверу. Использование RESTful API экономит время. Так как REST является наиболее эффективным и распространенным стандартом создания API для интернет-сервисов.
Рассмотрим, как создать RESTful API, используя для обработки HTTP-запросов NodeJS. Вы сможете использовать его с любым приложением, которое отправляет HTTP-запрос. Это оптимальный способ, особенно если создаете мобильное приложение.
Для начала установите NodeJS и MySQL, создайте таблицы или загрузите БД из Git-репозитория.
Таблица пользователей
Содержит всю регистрационную информацию пользователей.
Таблица сообщений
Здесь хранятся все сообщения пользователей.
Настройка проекта Node Restful
Зайдите в терминал или командную строку и создайте папку проекта.
Инициализируйте проект NodeJS. В результате будет создан файл package.json.
Установите для RESTful API плагин hapi.js .
Создание сервера Node Hapi
Откройте текстовый редактор, создайте новый файл и скопируйте в него приведенный ниже код. В нем const (JavaScript ES6) — это идентификатор, который не будет переопределяться. Если хотите, можно использовать var .
Запустите проект
Откройте в браузере URL-адрес http://localhost:8000/helloworld, и вы увидите текст «hello world»:
Подключение к базе данных
База данных MySQL
Используя менеджер пакетов NodeJS (NPM), установите пакет MySQL для NodeJS.
Источник
Использование MySQL с Node.js и JavaScript-клиентом mysql
Базы данных NoSQL довольно популярны среди разработчиков Node, причем MongoDB («M» в стеке MEAN) возглавляет пакет. Однако при запуске нового проекта Node вы не должны просто принимать Mongo в качестве выбора по умолчанию. Скорее, тип базы данных, который вы выбираете, должен зависеть от требований вашего проекта. Если, например, вам нужно динамическое создание таблиц или вставки в реальном времени, то решение NoSQL — это путь. Если ваш проект имеет дело со сложными запросами и транзакциями, с другой стороны, база данных SQL имеет гораздо больший смысл.
В этом уроке мы рассмотрим начало работы с модулем mysql — клиентом Node.js для MySQL, написанным на JavaScript. Я объясню, как использовать модуль для подключения к базе данных MySQL и выполнения обычных операций CRUD, прежде чем рассматривать хранимые процедуры и избегать ввода данных пользователем.
Эта популярная статья была обновлена в 2020 году, чтобы отразить современные практики использования MySQL с Node.js.
Быстрый старт: как использовать MySQL в Node
Если вы прибыли сюда в поисках быстрого способа начать работу с MySQL в Node, мы поможем вам!
Вот как использовать MySQL в Node за пять простых шагов:
- Создайте новый проект: mkdir mysql-test && cd mysql-test .
- Создайте файл package.json : npm init -y .
- Установите модуль mysql: npm install mysql .
- Создайте файл app.js и скопируйте его во фрагмент app.js ниже (при необходимости app.js местозаполнители).
- Запустите файл: node app.js Обратите внимание на сообщение «Подключено!».
Установка модуля mysql
Теперь давайте подробнее рассмотрим каждый из этих шагов.
Прежде всего мы используем командную строку для создания нового каталога и перехода к нему. Затем мы создаем файл package.json с помощью команды npm init -y . Флаг -y означает, что npm будет использовать значения по умолчанию, не проходя интерактивный процесс.
Этот шаг также предполагает, что в вашей системе установлены Node и npm. Если это не так, ознакомьтесь с этой статьей SitePoint, чтобы узнать, как это сделать: Установите несколько версий Node.js с помощью nvm .
После этого мы устанавливаем модуль mysql из npm и сохраняем его как зависимость проекта. Зависимости проекта (в отличие от devDependencies) — это пакеты, необходимые для запуска приложения. Вы можете прочитать больше о различиях между ними здесь .
Если вам нужна дополнительная помощь по использованию npm, обязательно ознакомьтесь с этим руководством или спросите на наших форумах .
Начиная
Прежде чем мы перейдем к подключению к базе данных, важно, чтобы на вашем компьютере был установлен и настроен MySQL. Если это не так, пожалуйста, обратитесь к инструкции по установке на их домашней странице .
Следующее, что нам нужно сделать, — это создать базу данных и таблицу базы данных для работы. Вы можете сделать это с помощью
графический интерфейс, например Adminer , или с помощью командной строки. В этой статье я буду использовать базу данных с именем sitepoint и таблицу с именем authors . Вот дамп базы данных, так что вы можете быстро приступить к работе, если хотите следовать:
Подключение к базе данных
Теперь давайте создадим файл с именем app.js в нашем app.js mysql-test и посмотрим, как подключиться к MySQL из Node.js.
Теперь откройте терминал и войдите в node app.js Как только соединение будет успешно установлено, вы увидите сообщение «Соединение установлено» в консоли. Если что-то идет не так (например, вы вводите неправильный пароль), вызывается обратный вызов, которому передается экземпляр объекта JavaScript Error ( err ). Попробуйте войти в консоль, чтобы увидеть, какую дополнительную полезную информацию она содержит.
Использование nodemon для просмотра файлов на предмет изменений
Запуск node app.js вручную каждый раз, когда мы вносим изменения в наш код, будет немного утомительным, поэтому давайте автоматизируем это. Эта часть не обязательна, чтобы следовать вместе с остальной частью учебника, но, безусловно, сэкономит вам несколько нажатий клавиш.
Давайте начнем с установки пакета nodemon . Это инструмент, который автоматически перезапускает приложение Node при обнаружении изменений файла в каталоге:
Теперь запустите ./node_modules/.bin/nodemon app.js и внесите изменения в app.js nodemon должен обнаружить изменение и перезапустить приложение.
Примечание: мы запускаем nodemon прямо из папки node_modules . Вы также можете установить его глобально или создать скрипт npm, чтобы запустить его.
Выполнение запросов
чтение
Теперь, когда вы знаете, как установить соединение с базой данных MySQL из Node.js, давайте посмотрим, как выполнять SQL-запросы. Начнем с указания имени базы данных ( sitepoint ) в команде createConnection :
Как только соединение будет установлено, мы будем использовать переменную con для выполнения запроса к authors таблицы базы данных:
Когда вы запустите app.js (либо с помощью nodemon, либо введя node app.js в свой терминал), вы сможете увидеть данные, возвращенные из базы данных, записанной в терминал:
Данные, возвращаемые из базы данных MySQL, можно анализировать, просто зацикливая объект rows .
Это дает вам следующее:
Создание
Вы можете выполнить запрос вставки к базе данных, например так:
Обратите внимание, как мы можем получить идентификатор вставленной записи, используя параметр обратного вызова.
обновление
Точно так же, при выполнении запроса на обновление, количество затронутых строк может быть получено с помощью result.affectedRows :
разрушающий
То же самое относится и к запросу на удаление:
Расширенное использование
Я хотел бы закончить, посмотрев на то, как модуль mysql обрабатывает хранимые процедуры и экранирование пользовательского ввода.
Хранимые процедуры
Проще говоря, хранимая процедура представляет собой подготовленный код SQL, который можно сохранить в базе данных, чтобы его можно было легко использовать повторно. Если вам требуется освежить хранимые процедуры, ознакомьтесь с этим руководством .
Давайте создадим хранимую процедуру для нашей базы данных sitepoint которая извлекает все данные об авторе. Мы назовем это sp_get_authors . Для этого вам понадобится какой-то интерфейс к базе данных. Я использую Adminer . Выполните следующий запрос к базе данных sitepoint , чтобы sitepoint , что у вашего пользователя есть права администратора на сервере MySQL:
Это создаст и сохранит процедуру в базе данных information_schema в таблице ROUTINES .
Примечание: если синтаксис разделителя выглядит для вас странно, это объясняется здесь .
Затем установите соединение и используйте объект соединения для вызова хранимой процедуры, как показано:
Сохраните изменения и запустите файл. После его выполнения вы сможете просматривать данные, возвращаемые из базы данных:
Наряду с данными, он возвращает некоторую дополнительную информацию, такую как количество затронутых строк, insertId и т. Д. Вам нужно insertId 0-й индекс возвращаемых данных, чтобы отделить детали сотрудника от остальной информации:
Это дает вам следующее:
Теперь давайте рассмотрим хранимую процедуру, которая требует входной параметр:
Мы можем передать входной параметр во время вызова хранимой процедуры:
Это дает вам следующее:
В большинстве случаев, когда мы пытаемся вставить запись в базу данных, нам нужно, чтобы последний вставленный идентификатор был возвращен в качестве параметра out. Рассмотрим следующую хранимую процедуру вставки с параметром out:
Чтобы сделать вызов процедуры с параметром out, сначала нам нужно включить несколько вызовов при создании соединения. Итак, измените соединение, установив для выполнения нескольких операторов значение true :
Затем, при вызове процедуры, установите параметр out и передайте его:
Как видно из приведенного выше кода, мы установили параметр @author_id out и передали его во время вызова хранимой процедуры. Как только вызов сделан, нам нужно выбрать параметр out для доступа к возвращенному идентификатору.
Запустите app.js При успешном выполнении вы должны увидеть выбранный параметр наряду с другой информацией. rows[2] должны дать вам доступ к выбранному параметру:
Примечание. Чтобы удалить хранимую процедуру, необходимо выполнить команду DROP PROCEDURE
; против базы данных, для которой вы ее создали.
Экранирование ввода пользователя
Чтобы избежать атак SQL-инъекций, вы всегда должны избегать любых данных, которые вы получаете от пользователей, прежде чем использовать их в запросе SQL. Давайте продемонстрируем, почему:
Это кажется достаточно безопасным и даже возвращает правильный результат:
Однако попробуйте изменить userSubmittedVariable следующим образом:
У нас внезапно появляется доступ ко всему набору данных. Теперь измените это на это:
Теперь у нас проблемы!
Хорошей новостью является то, что помощь под рукой. Вам просто нужно использовать метод mysql.escape :
Вы также можете использовать заполнитель вопросительного знака, как мы это делали в примерах в начале статьи:
Почему бы просто не использовать ORM?
Прежде чем мы перейдем к плюсам и минусам этого подхода, давайте на секунду рассмотрим, что такое ORM. Следующее взято из ответа о переполнении стека :
Объектно-реляционное отображение (ORM) — это метод, который позволяет запрашивать и манипулировать данными из базы данных с использованием объектно-ориентированной парадигмы. Говоря об ORM, большинство людей ссылаются на библиотеку, которая реализует технику объектно-реляционного отображения, отсюда и фраза «ORM».
Таким образом, это означает, что вы пишете логику своей базы данных на языке предметной области ORM, в отличие от ванильного подхода, который мы использовали до сих пор. Чтобы дать вам представление о том, как это может выглядеть, вот пример использования Sequelize , который запрашивает базу данных для всех авторов и записывает их в консоль:
То, имеет ли смысл использовать ORM для вас, будет во многом зависеть от того, над чем вы работаете и с кем. С одной стороны, ORMS, как правило, делают разработчиков более продуктивными, частично абстрагируя большую часть SQL, так что не всем в команде нужно знать, как писать суперэффективные запросы к базе данных. Также легко перейти на другое программное обеспечение базы данных, потому что вы развиваетесь до абстракции.
С другой стороны, однако, можно написать какой-то действительно грязный и неэффективный SQL в результате непонимания того, как ORM делает то, что делает. Производительность также является проблемой, поскольку гораздо проще оптимизировать запросы, которые не должны проходить через ORM.
Какой бы путь вы ни выбрали, зависит от вас, но если это решение, которое вы принимаете, проверьте этот поток переполнения стека: Почему вы должны использовать ORM? , Также проверьте этот пост на SitePoint: 3 JavaScript ORM, которые вы, возможно, не знаете .
Вывод
В этом руководстве мы установили клиент mysql для Node.js и настроили его для подключения к базе данных. Мы также увидели, как выполнять операции CRUD, работать с подготовленными операторами и избегать ввода данных пользователем, чтобы смягчить атаки с использованием SQL-инъекций. И тем не менее, мы только поцарапали поверхность того, что предлагает клиент MySQL. Для более подробной информации рекомендую ознакомиться с официальной документацией .
И имейте в виду, что модуль mysql — не единственное шоу в городе. Есть и другие варианты, такие как популярный узел-mysql2 .
Источник