База данных — HackerX https://hackerx.ru Блог о программировании, СУБД, сетях и алгоритмах. Уроки и статьи по разным языкам программирования Wed, 11 Jul 2018 07:15:23 +0000 ru-RU hourly 1 https://wordpress.org/?v=4.9.8 Что такое Memcached — Основы работы с NoSQL хранилище данных https://hackerx.ru/memcached-nosql/ https://hackerx.ru/memcached-nosql/#respond Mon, 31 Jul 2017 13:08:04 +0000 https://hackerx.ru/?p=620 Memcached — это высокопроизводительная программное обеспечение, который предназначен для кэширование объектов в оперативной памяти на основе хеш-таблицы. Проще говоря, Memcached — это NoSQL хранилище данных, а данные хранятся в оперативной памяти по принципу key-value (ключ/значение). Данная система изначально разработали инженеры / разработчики компании Danga Interactive для LiveJournal. Но после этого данная система была выпущена как открыть проект и его начали использовать такие гиганты, как Wikipedia, YouTube, Facebook… Memcached отличается […]

The post Что такое Memcached — Основы работы с NoSQL хранилище данных appeared first on HackerX.

]]>
Memcached — это высокопроизводительная программное обеспечение, который предназначен для кэширование объектов в оперативной памяти на основе хеш-таблицы. Проще говоря, Memcached — это NoSQL хранилище данных, а данные хранятся в оперативной памяти по принципу key-value (ключ/значение).

Данная система изначально разработали инженеры / разработчики компании Danga Interactive для LiveJournal. Но после этого данная система была выпущена как открыть проект и его начали использовать такие гиганты, как Wikipedia, YouTube, Facebook…

Memcached отличается от других хранилищ данных фантастическими характеристиками производительности. Это за счет того, что данная система не использует жесткий диск, вместо этого он хранит данные только в оперативной памяти компьютера / сервера. Но у такой системы ест и недостатки:

  • Ограниченный объем данных
  • Надежность хранение данных

 

Так как мы храним данные в оперативной памяти, то из за сбоя системы, перезагрузки сервера или просто заполнение данных мы потеряем данные из хранилища. Но ест много задач, где его можно использовать, где не критично потеря данных, например, для кэширование сайта. То есть, у нас имеется основная база, где хранятся все данные, и есть данные, которые часто запрашиваются пользователями. Мы можем эти данные сохранить в оперативной памяти и оттуда отдавать пользователей. Это ускорить работу и снизить нагрузку на основную базу. Но если по данные были удалены с временной хранилища, то мы можем опять индексировать. Это одно из множество задач, где данная система применяется.

Кроме Memcached есть еще одна примерно такая система хранилища данных. Он тоже все данные хранить в оперативной памяти, и он тоже NoSQL база. Но кроме того, что он все данные хранить в операционной системе, он время от времени данные записывает на жесткий диск, и если данные были удалены с оперативной памяти, он автоматический восстановить из жесткого диска (Все этого настраивается как вам угодно). Это Redis, и у меня есть несколько статей по Redis:

 

Memcached реализует базовый необходимый минимум функции хранилища данных:

  • Соединение с сервером
  • Добавление, удаление и обновление объекта
  • Получение значение объекта
  • Инкремент, декремент и еще пара других операции.

 

Основы работы с Memcached




Давайте немного подробнее рассмотрим данную систему. После соединение клиента с хранилищем данных, клиенту будут доступны следующие команды:

  • set — установить ключу объект в качестве значение,
  • add — добавить кэш-пару ключ/объект (это тоже самое, что и set, но будет выполняться, если в системе такого ключа не было),
  • replace — поменять значение ключа,
  • get — получить из хранилища объект по указанному ключу,
  • delete — удалить ключ и значение по указанному ключу.

 

Это нам напоминает стандартные SQL операции — INSERT, UPDATE, DELETE. Кроме этих операций, есть дополнительные, значение которых трудно переоценить.

  • cas — установить ключу объект в качестве значение, в том случае, если он не был изменен с момента последней операции чтения. Cas (check and set) — это аналог транзакции,
  • gets — делает то, что и get, но получает дополнительные данные — версию пары ключ-значения,
  • incr / decr — инкремент и декремент. Увеличение или уменьшение значение ключа на единицу,
  • append / prepend — добавление значение в конец и начало строгого значение ключа.

 

Имея данные команды на руках мы можем в Memcached реализовать довольные сложные структуры.

Memcached реализован в качестве демона (daemon), который слушает TCP-порт — по умолчанию это 11211. Мы можем работать с ним напрямую, но это немного сложно, поэтому для большинства языков программирования давно созданы библиотеки, которые, кроме удобства добавляют дополнительный функционал. В следующем уроке мы будем работать с Memcached из Node.js, посмотрим какие модули / библиотеки есть для этой цели, какой функционал он представляет и напишем небольшое приложение.

Весь список уроков Node.js вы можете найти на этом странице.

The post Что такое Memcached — Основы работы с NoSQL хранилище данных appeared first on HackerX.

]]>
https://hackerx.ru/memcached-nosql/feed/ 0
ORM-система Sequelize для Node.js https://hackerx.ru/orm-sequelize-node-js/ https://hackerx.ru/orm-sequelize-node-js/#respond Sat, 29 Jul 2017 12:28:25 +0000 https://hackerx.ru/?p=543 В этом уроке мы узнаем, что такое ORM, зачем он нужен, какие ORM библиотеки есть для Node.js и как с ними работать. ORM (англ. Object-Relational Mapping, рус. объектно-реляционное отображение) — это технология программирования, который связывает базу данных с моделью объектно-ориентированных языков программирования. Он создает для СУБД виртуальный объектный интерфейс. ORM помогает программистам избавиться от больших кусков кода, ошибок и повышает скорость разработки. То есть, […]

The post ORM-система Sequelize для Node.js appeared first on HackerX.

]]>
В этом уроке мы узнаем, что такое ORM, зачем он нужен, какие ORM библиотеки есть для Node.js и как с ними работать.

ORM (англ. Object-Relational Mapping, рус. объектно-реляционное отображение) — это технология программирования, который связывает базу данных с моделью объектно-ориентированных языков программирования. Он создает для СУБД виртуальный объектный интерфейс.

ORM помогает программистам избавиться от больших кусков кода, ошибок и повышает скорость разработки. То есть, мы избавляемся от обычных SQL запросов, пишем небольшие куски кодов в объектно-ориентированным стилем, а библиотека транслирует этот код в sql запросы.

Сейчас есть довольно большое количество ORM библиотек для различных языков. Например, для PHP это Propel, Doctrine и Qcodo. Для Python это SQLAlchemy, Storm. Для Java это Hibernate. Для всех популярных объектно-ориентированных языков есть по крайней мере один свой ORM.

После того, как с помощью языка JavaScript (Node.js) стало возможно программировать на сервере, и для этого языка появились ORM системы. Самый популярный из них — это Sequelize. Как понимаете, в этом уроке мы будем изучать его.

Node.js и ORM-система Sequelize — Начинаем работать

Библиотека Sequelize — это Node.js ORM система для работы с такими базами данных, как PostgreSQL, MySQL, SQLite и MSSQL. Давайте начнем работать с Sequelize. Нам нужно установить данную библиотеку. Для установки открываем терминал (командная строка) и вводим команду ниже.

npm install --save sequelize

После этого нужно установить одну из библиотек. Например, если вы хотите работать с MySQL, то нужно установить mysql2.

npm install --save pg pg-hstore // PostgreSQL
npm install --save mysql2  // MySQL
npm install --save sqlite3  // SQLite
npm install --save tedious  // MSSQL

Настройка соединения




После установки библиотек мы можем установить соединение с базой данных.

const Sequelize = require("sequelize");
const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql'|'sqlite'|'postgres'|'mssql',

  pool: {
    max: 5,
    min: 0,
    idle: 10000
  },

  // Только Для SQLite
  storage: 'path/to/database.sqlite'
});

Давайте немного подробнее рассмотрим этот код. После подключение ORM-системы Sequelize, нам в первом строке кода вернется функция / конструктор. Конструктор принимает несколько аргументов. Во второй строке кода мы вызываем конструктор (создаем новый объект с помощью оператора new), и передаем нужные аргументы / параметры.

Первые три аргументы — это данные доступа к базе данных:

  • database — имя базы данных
  • username — логин пользователя
  • password — пароль пользователя базы данных

 

Последним аргументом конструктор принимает объект, где в виде key-value указаны необходимые параметры.

  • host — это адрес сервера базы данных. Обычно тут нужно указать localhost, если база и проект находятся на одном сервере, если база данных на другом сервере, то там нужно будет указать IP адрес сервера.
  • dialect — здесь нужно указать с каким СУБД вы работаете. Например, если вы работаете с PostgreSQL, то нужно указать postgres.
  • storage — Этот ключ нужно только в том случае, если вы используете в качестве базы данных SQLite. Там нужно в виде строки указать путь к базе.

 

Пример кода, который указан выше, это общий пример, поэтому предлагаю рассмотреть конкретный пример. Например, давайте подключимся к базе данных MySQL.

const Sequelize = require("sequelize");
const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql',

  pool: {
    max: 5,
    min: 0,
    idle: 10000
  }
});

В константе (переменная) sequelize содержится экземпляр соединения и мы можем с ним работать. Sequelize имеет функцию (метод) authenticate, с помощью которого можно проверить состояние соединение.

sequelize
  .authenticate()
  .then(() => {
    console.log('Соединение установлено.');
  })
  .catch(err => {
    console.error('Ошибка соединения:', err);
  });

В этом уроке мы узнали, что такое ORM, как установить ORM-систему Sequelize, и как с Node.js подключится к серверу БД с помощью Sequelize. В следующем уроке мы продолжим знакомиться с ORM Sequelize и создадим CRUD приложения.

Полный список уроков Node.js представлен на этом странице.

The post ORM-система Sequelize для Node.js appeared first on HackerX.

]]>
https://hackerx.ru/orm-sequelize-node-js/feed/ 0
Использование Redis в Node.js https://hackerx.ru/redis-%d0%b8-node-js/ https://hackerx.ru/redis-%d0%b8-node-js/#respond Mon, 30 Jan 2017 17:27:01 +0000 https://hackerx.ru/?p=385 В предыдущем статье я рассказал, как можно установить Redis на операционную систему Linux. Сегодня я вкратце расскажу — что такое Redis, какие типы данных существует, как и где данные хранятся, будем выполнять базовые операции. Что такое Redis Redis — это высокопроизводительная key-value хранилище данных. Все данные хранятся в оперативной памяти. Также, по мере необходимости данные дублируются на физический носитель. После сбоев или перезагрузки сервера Redis читать […]

The post Использование Redis в Node.js appeared first on HackerX.

]]>
В предыдущем статье я рассказал, как можно установить Redis на операционную систему Linux. Сегодня я вкратце расскажу — что такое Redis, какие типы данных существует, как и где данные хранятся, будем выполнять базовые операции.

Что такое Redis

Redis — это высокопроизводительная key-value хранилище данных. Все данные хранятся в оперативной памяти. Также, по мере необходимости данные дублируются на физический носитель. После сбоев или перезагрузки сервера Redis читать данные с диска. Используя Redis, мы получаем хранилище данных, которые хранятся в оперативной памяти, и после сбоев или перезагрузки сервера мы не теряем эти данные.

Сохранение данных на физический диск можно настроить двумя способами:

  1. через определенный промежуток времени он сохранял данные на диск;
  2. после определенное количество атомарных изменений он сохранял данные на диск.

Redis обладает такими возможностями и механизмы, как журналирование, снимки, поддержка работы с такими данными, для каждого из которых существует свой набор команд, транзакции, неблокирующая master-slave репликация на несколько узлов, подтяжка использование нескольких БД, с возможностью атомарного переноса ключей между ними, Pipeline (отправка на выполнение набора команд и отложенное получение ответа).

Типы данных Redis

  • Строки (String) Базовый тип данных Redis. Строки в Redis бинарно-безопасны, могут использоваться так же как числа.
  • Списки (List) — Классические списки строк, упорядоченные в порядке вставки, которая возможна как со стороны головы, так и со стороны хвоста списка.
  • Множества (Set) — Множества строк в математическом понимании: не упорядочены, поддерживают операции вставки, проверки вхождения элемента, пересечения и разницы множеств.
  • Хеш-таблицы (Hash) — Классические хеш-таблицы или ассоциативные массивы.
  • Упорядоченные множества (Sorted Sets) — Упорядоченное множество отличается от обычного тем, что его элементы упорядочены по особому параметру «score».

Обычно стандартные key-value хранилищи позволяют работать только с ключами. Но Redis нарушает эти принципы. Для каждого типа содержимое у него своя логика работы и набор команд.

Redis и Node.js — Модуль Redis для Node.js




Для работы с Redis v Node.js нам нужно установить модуль redis:

npm install redis

А теперь, давайте подключаем модуль и начнем работу с ним.

// Подключаем модуль
const redis  = require("redis");
// Создаем клиента
const client = redis.createClient();

// Выбираем базу данных
client.select(0, ( ) => {
    client.on("error", (err) =>  {
        console.log("Error " + err);
    });

    // .......

    client.quit( );
});

После подключение модуля и создание redis-клиента мы выбрали базу данных — 0. Но в данном случае это лишний шаг, по умолчанию используется база 0.

После выбора базы данных можно работать с Redis — записать данные в базу, получить и удалить данные с базы.

const redis  = require("redis");
const client = redis.createClient();

client.select(0, ( ) => {
    client.on("error", (err) =>  {
        console.log("Error " + err);
    });

    // Запись данных
    client.set("string_key", "string value", redis.print);

    // Получение данных
    client.get("string_key", (err, data) => {
        if(err) console.log(err);

        console.log(data);
    });

    client.quit( );
});

С помощью метода set объекта client записать данные в виде «Ключ — Значение», а с помощью метода get мы получаем данные по ключу.

Также, мы можем удалить данные по ключу с помощью метода del:

client.del("string_key", (err) => {
    if(err) console.log(err);
});

Данный модуль поддерживает все команды Redis. Например, мы с помощью одной команды можем одновременно работать с множеством ключей и значение.

client.mset(
    "string_key_1", "string value 1",
    "string_key_2", "string value 2",
    "string_key_3", "string value 3",
    "string_key_4", "string value 4",
    (err, result) => {
        if(err) console.log(err);

        console.log(result);
    }
);

В следующем статье я покажу, как на Node.js можно создать модель для Redis.

The post Использование Redis в Node.js appeared first on HackerX.

]]>
https://hackerx.ru/redis-%d0%b8-node-js/feed/ 0
Установка Redis на Linux Ubuntu 16.04 и 14.04 https://hackerx.ru/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-redis-%d0%bd%d0%b0-linux-ubuntu/ https://hackerx.ru/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-redis-%d0%bd%d0%b0-linux-ubuntu/#respond Sat, 21 Jan 2017 16:39:50 +0000 https://hackerx.ru/?p=371 Redis — это высокопроизводительная key-value хранилище данных. Он хранит данные в оперативной памяти. Redis разработан в 2009 году. Это NoSQL база данных, который позволяет хранить большие объемы данных. Redis поддерживает большое количество языков программирования. Redis можно использовать как и в качество основной базы данных, так и для хранение кэша. В отличие от Memcached, который может в любой момент удалить ваши данные, он хранит информацию […]

The post Установка Redis на Linux Ubuntu 16.04 и 14.04 appeared first on HackerX.

]]>
Redis — это высокопроизводительная key-value хранилище данных. Он хранит данные в оперативной памяти. Redis разработан в 2009 году. Это NoSQL база данных, который позволяет хранить большие объемы данных. Redis поддерживает большое количество языков программирования. Redis можно использовать как и в качество основной базы данных, так и для хранение кэша. В отличие от Memcached, который может в любой момент удалить ваши данные, он хранит информацию постоянно.

Настройки для установки Redis

В первую очередь нам нужно обновить все пакеты:

sudo apt-get update

После обновление пакетов нам нужно скачать и установить компилятор, который поможет установить Redis.

sudo apt-get install build-essential

И, наконец, нам нужно скачать tcl:

sudo apt-get install tcl8.5

Установка Redis

И так, приступаем к установке Redis. С официального сайта загружаем последнюю стабильную версию Redis:

wget http://download.redis.io/releases/redis-stable.tar.gz

После загрузки, нужно разархивировать архив и перейти в каталог:

tar xzf redis-stable.tar.gz
cd redis-stable

А сейчас нам нужно компилировать бинарные файлы Redis. Это делается с помощью команды make.

make

После компиляции, мы можем запустить тесты, чтобы убедиться, что все правильно скомпилировано:

make test

После выполнение тестов можно установить бинарные данные. Эта команда устанавливает Redis в масштабах всей системы:

sudo make install

После установки, нужно запустить Redis. Redis поставляется с скриптом, с помощью которого можно запустить программу.

Переходим в каталог utils:

cd utils

Из этого каталога запускаем установочный скрипт (Ubuntu / Debian):

sudo ./install_server.sh

После завершение работы скрипта, Redis будет работать в фоновом режиме. По умолчанию Redis запускается на порту 6379. Redis можно запустить и остановить с помощью этих команд:

sudo service redis_6379 start
sudo service redis_6379 stop

Можно получить доступ к базе данных с терминала с помощью этой команды:

redis-cli

У хранилище данных Redis есть очень много настроек. В следующем статье я расскажу о самых важных настроек и об обеспечение безопасности данных. Также, можете узнать, как можно использовать Redis в Node.js.

The post Установка Redis на Linux Ubuntu 16.04 и 14.04 appeared first on HackerX.

]]>
https://hackerx.ru/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-redis-%d0%bd%d0%b0-linux-ubuntu/feed/ 0
MySQL и Node.js — Подключение к базе данных https://hackerx.ru/mysql-node-js-connect-to-database/ https://hackerx.ru/mysql-node-js-connect-to-database/#respond Mon, 28 Nov 2016 19:31:46 +0000 https://hackerx.ru/?p=323 Существует несколько модулей для работы с MySQL в Node.js. Но самый популярный модуль — это node-mysql. Данный модуль появилось одним из первых, и с его помощью написан довольно много Node.js / MySQL приложений. Давайте приступим к делу. Чтобы начать использовать MySQL в проекте, сначало нужно установить модуль mysql. npm install mysql После успешной установки нам нужно произвести подключение к базе […]

The post MySQL и Node.js — Подключение к базе данных appeared first on HackerX.

]]>
Существует несколько модулей для работы с MySQL в Node.js. Но самый популярный модуль — это node-mysql. Данный модуль появилось одним из первых, и с его помощью написан довольно много Node.js / MySQL приложений.

Давайте приступим к делу. Чтобы начать использовать MySQL в проекте, сначало нужно установить модуль mysql.

npm install mysql

После успешной установки нам нужно произвести подключение к базе данных.

const mysql = require("mysql");

const connection = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "my_password"
});

connection.connect();

Это пока еще не все, мы открыли соединение с сервером MySQL и не закрыли. Если мы сейчас запустим даный сценарий, он не завершается сам. Для закрытие соединение у объекта connection есть метод end — connection.end();

Метод принимает callback функцию, и он гарантирует, что все активные запросы успеют завершится до закрытие соединение.

connection.end(function(err){
    if(err) return console.log(err);

    console.log("Disconnect");
});

Метод createConnection может принимать и другие (необязательные) параметры. Вот некоторые из них:

  • charset — Это кодировка, по умолчанию стоит UTF8_GENERAL_CI,
  • timezone — Временная зона, по умолчанию локальная времия — local,
  • flags — Список флагов соединения,
  • multipleStatements — По умолчанию отключена для защиты от SQL-инъекций. Разрешает многократное использование SQL-инструкции за один запрос.

А теперь давайте сделаем запрос к базе данных. Для выполнение запросов к базе есть метод query. Он первым параметром принимает SQL запрос, а вторым callback функцию.

connection.query("SELECT * FROM users", function(err, rows, fields){
    if(err) return console.log(err);

    // Действие с результатом
});

Метод query нужно вызвать до закрытие соединение.

В следующей статье я более подробно расскажу о запросах к базе MySQL из Node.js, и посмотрим как можно реализовать CRUD операции.

The post MySQL и Node.js — Подключение к базе данных appeared first on HackerX.

]]>
https://hackerx.ru/mysql-node-js-connect-to-database/feed/ 0