You are on page 1of 21

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

УКРАЇНИ
«КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ ІМЕНІ
ІГОРЯ
СІКОРСЬКОГО»
ІНСТИТУТ ТЕЛЕКОМУНІКАЦІЙНИХ СИСТЕМ

«Методичні рекомендації до роботи з NoSQL базами


даних на основі СУБД Redis»

Виконав:
студент групи ТІ-81
Дешко М.Л.

Київ 2020

Зміст
Вступ..........................................................................................................3
SQL бази даних.........................................................................................3
Бази даних NoSQL………………………………………………………4
Порівняння MySQL та NoSQL…………………………………………5
Що таке Redis?…………………………………………………………..6
Як працює Redis?………………………………………………………..7
Робота з Redis-server…………………………………………………….7
Типи данних Redis………………………………………………………9
Базові операції…………………………………………………………..9
Переваги Redis…………………………………………………………18
Завдання на лабараторну роботу 1……………………………………19
Завдання на лабараторну роботу 2……………………………………20

Вступ
Одне з найбільш важливих рішень, яке приймає розробник, полягає
в тому, яку базу даних використовувати. Протягом багатьох років
опції були обмежені різними варіантами реляційних баз даних, які
підтримували мову структурованих запитів (SQL). До них
відносяться MS SQL Server, Oracle, MySQL, PostgreSQL, DB2 і
багато інших.
За останні 15 років на ринку з'явилося багато нових баз даних в
рамках підходу No-SQL. До них відносяться сховища ключів-
значень, такі як Redis і Amazon DynamoDB, широкі колоночного
бази, такі як Cassandra і HBase, сховища документів, такі як
MongoDB і Couchbase, а також графові бази даних і пошукові
системи, такі як Elasticsearch і Solr.

SQL бази даних


Реляційна база даних - це набір формально описаних таблиць, з
яких можна отримати доступ до даних або зібрати їх різними
способами без необхідності реорганізації таблиць бази даних.
Одна з найбільш популярних систем управління базами даних SQL
це MySQL з відкритим вихідним кодом. Вона реалізована в першу
чергу як система керування базами даних (RDBMS) для програмних
додатків на базі веб-технологій.
Так виглядає проста таблиця SQL бази даних:

Базы данных NoSQL


Існує безліч баз даних NoSQL ("не тільки SQL").
Бази даних NoSQL моделюють дані способами, що виключають
табличні відношення, які використовуються в реляційних базах
даних. Ці бази даних стали популярними на початку 2000-х років
серед компаній, яким була потрібна хмарна кластеризація баз даних
через їх явних вимог до масштабування (наприклад, Facebook). У
таких додатках узгодженість даних була набагато менш важливою,
ніж продуктивність і масштабованість.
На початку бази даних NoSQL часто використовувалися для
нішевих завдань управління даними. В основному, коли справа
доходила до веб та хмарних додатків, бази даних NoSQL обробляли
і розподіляли значні обсяги даних. Інженерам, які працюють з
NoSQL, також сподобалася гнучка схема даних (або її повна
відсутність), так що були можливі швидкі зміни в оновлюваних
додатках.
Ключові особливості NoSQL:
- Дуже гнучкий спосіб зберігання даних
- Горизонтальне масштабування до кластерів
- Можлива послідовність на сталість / поширення
- Документи, які ідентифікуються з використанням унікальних
ключів

Для кращого розуміння NoSQL,давайте розглянемо приклад.


Уявімо що нам треба зберігати якусь певну інформацію про родичів
в блокноті. Тоді на обкладинці блокноту буде написано великими
літерами “Родичі”, а на першій сторінці будуть дані про першого
родича:
А наприклад на другій :

Тоді на кожній сторінці блокноту зберігається інформація про


кожного родича, і щоб отримати цю інформацію, потрібно просто
відкрити блокнот на цій сторінці.

Порівняння MySQL та NoSQL


MySQL вимагає певної і структурованої схеми.
NoSQL дозволяє зберігати будь-які дані в «документі».

MySQL підтримує величезне співтовариство.


У NoSQL є невелике і швидко зростаюче співтовариство.
NoSQL відрізняється простотою масштабування.
MySQL потребує більшої керованості.

MySQL використовує SQL, який застосовується в безлічі типів баз


даних. NoSQL - це база даних на
основі дизайну з популярними реалізаціями.

MySQL використовує стандартний мову запитів (SQL).


NoSQL не використовує стандартний мову запитів.

MySQL має багато відмінних інструментів звітності. У


NoSQL є кілька інструментів звітності, які складно стандартизувати.

MySQL може видати проблеми з продуктивністю для великих даних.


NoSQL забезпечує відмінну продуктивність на великих даних.

Що таке Redis?
Redis (розшифровується як Remote Dictionary Server) - це швидке
сховище даних типу «ключ-значення» в пам'яті з відкритим
вихідним кодом для використання в якості бази даних, кеша,
брокера повідомлень або черги.
Redis забезпечує час відгуку на рівні долею мілісекунди і дозволяє
додаткам, що працюють в режимі реального часу, виконувати
мільйони запитів в секунду. Такі додатки затребувані в сфері ігор,
рекламних технологій, фінансових сервісів, охорони здоров'я і IoT.
Redis широко застосовується для кешування, управління сеансами,
розробки ігор, створення таблиць лідерів, аналітики в режимі
реального часу, роботи з геопросторовими даними, підтримки служб
таксі, чатів і сервісів обміну повідомленнями, потокової передачі
мультимедіа і додатків з відправкою повідомлень за моделлю
«видавець - передплатник »(Pub / Sub).

Як працює Redis?
Всі дані в Redis зберігаються в пам'яті, а не на дисках або
твердотільних накопичувачах, як в інших базах даних. Оскільки
Redis, як і інші сховища даних в пам'яті, не потребує доступі до
диска, це виключає затримки, пов'язані з пошуком, і забезпечує
доступ до даних за мікросекунди. У число можливостей Redis
входить підтримка різноманітних структур даних, забезпечення
високої доступності, робота з геопросторовими даними, створення
скриптів Lua, проведення транзакцій, постійне зберігання даних на
диску і підтримка кластерів. Все це спрощує створення додатків, що
працюють в режимі реального часу в масштабі всього Інтернету.

Робота з Redis-server
Проект Redis офіційно не підтримує Windows.
Проте, група Microsoft Open Tech розробляє і підтримує цей порт
Windows, орієнтований на Win64.

Ви можете завантажити різні версії або останню версію Redis


github.com/MSOpenTech/redis/releases
1. Завантажте файл .msi або .zip
2. Вилучіть zip файл в потрібну папку:

3. Далі запускаємо файл redis-server.exe:


4. Після успішного запуску redis-сервера. Ви можете отримати до
нього доступ і перевірити команди, запустивши redis-cli.exe:

Команда PING використовується для перевірки працездатності


з'єднання.

Якщо треба отримати інформацію про будь яку команду Redis,


можна скористатися посиланням: https://redis.io/commands
Типи данних Redis
 Рядки (strings). Базовий тип даних Redis. Рядки в Redis
бінарному-безпечні, можуть використовуватися так само як
числа, обмежені розміром 512 Мб.
 Списки (lists). Класичні списки рядків, впорядковані в порядку
вставки, яка можлива як з боку голови, так і з боку хвоста
списку. Максимальна кількість елементів - 232 - 1.
 Множини (sets). Множини рядків в математичному розумінні: не
впорядковані, підтримують операції вставки, перевірки
входження елемента, перетину і різниці множин. Максимальна
кількість елементів - 232 - 1.
 Хеш-таблиці (hashes). Класичні хеш-таблиці або асоціативні
масиви. Максимальна кількість пар «ключ-значення» - 232 - 1.
 Впорядковані множини (sorted sets). Впорядкована множина
відрізняється від звичайного тим, що його елементи
впорядковані по особливому параметру «score».

Базові операції
Тепер від теорії можна перейти і до практики.
Для спілкування з Redis використовується клієнтська програма redis-
cli.
SET , GET , GETSET
Команда set використовується для встановлення значення ключа.В
даному випадку ключу name поставлено у відповідність значення
Kolya.
Команда get використовується для отримання значення по ключу.
Команда getset встановлює значення ключа, а також виводить
попереднє значення цього ключа. Команди mset та mget дозволяють
встановити або вивести значення декількох ключі відповідно.
EXISTS
Дана команда допомогає перевірити чи зберігається за даним
ключом значення. В даному випадку при перевірці ключа name
отримуємо 1, а при перевірці ключа surname отримуємо 0.

TYPE
За допомогою команди type можна дізнатися який тип данних
зберігається під даним ключем.

KEYS
Команда keys дає змогу знайти ключі. В даному випадку було
знайдено ключ name по шаблону na*
DEL
Команда del видаляє значення по ключу.

ЧАС ЖИТТЯ ЗНАЧЕННЯ КЛЮЧА.


При створенні ключа можна вказати додатковий параметр EX, який
вказує через скільки секунд ключ видалиться. Команда ttl дозволяє
подивитися скільки часу ще буде “жити” об’єкт.
Якщо не вводити параметр EX, то при вводі команди ttl, виведеться
значення -1, а якщо час життся об’єкту вже сплинув, то виведеться
значення -2.

RENAME
Дозволяє змінити назву ключа. В даному випадку змінюємо назву
ключа test на назву space.
Операції декремент та інкримент
Команди incr та decr додають до значення ключа одиницю та
віднімають від значення ключа одиницю відповідно.
Команди incrby та decrby збільшують значення на задане число.

Робота з множинами (невпорядкована множина значень)


Множини в Redis - це невпорядкована колекція рядків. Множина
може містити тільки унікальні значення.
Команда sadd додає значення до множини по ключу.
За допомогою команди smembers можна подивится всі значення
даної множини. Бачимо що всі значення упорядковані в
випадковому порядку.
sismember перевіряє чи входить дане значення в множину.
spop видаляє значення з множини
Робота з впорядкованими множинами
У впорядкованих множинах сортування відбувається по
додатвокому значенню score.За допомогою команди zadd створюємо
впорядковану множину та додаємо до неї значення.

Команда zrange повертає заданий діапазон елементів у


відсортованому наборі, що зберігається у ключі. В даному випадку
відсортованих за роком народження в порядку зростання.
zrevrange сортує в порядку спадання.
zrangebyscore повертає всі елементи в відсортованому наборі за
ключем зі значеннями між min та max. Елементи вважаються
упорядкованими в порядку зростання.
zremrangebyscore видаляє всі елементи в відсортованому наборі, що
зберігається у ключі, між значеннями між min та max (включно).
Списки
За допомогою команди rpush створюємо список та додаємо до нього
певні значення. Rpush додає значення в кінець списку, lpush в
початок.

За допомогою команди lrange виводимо даний список у певному


інтервалі.

Команда llen показую скільки елементів міститься у списку.


lpop видаляє та повертає перший елемент списку. Rpop - останній.
Хеш - таблиці
Хеш-таблиця — структура даних, що реалізує інтерфейс
асоціативного масиву, а саме, вона дозволяє зберігати пари (ключ,
значення) і здійснювати три операції: операцію додавання нової
пари, операцію пошуку і операцію видалення за ключем.
У хеш-таблиці замість безпосереднього використання ключа як
індексу масиву, індекс обчислюється за значенням ключа.
Для створення або додання до хеш-таблиці значення та ключа,
використовуємо команду hset.
Для виводу на ключів хеш-таблиці, використовуємо команду hkeys.
Для виводу значень - hvals.
Для створення одразу декількох ключів в одній операції,
використовується hmset
Для виводу і значень, і ключів - hgetall

HINCRBY, HDEL
За допомогою команди hincrby можна додати до якогось поля певне
значення. В даному випадку ми збільшили значення age на 2.
Для видалення певного ключа, можна скористатися командою hdel.
Тразнакції
Redis також підтримує транзакції, що дозволяють виконати за один
крок групу команд, і команда інших запитів не зможуть в неї
вклинитися, при цьому він гарантує не суперечливість і
послідовність виконання набору команд, а в разі якихось проблем
дозволяє і відкотити ці зміни
Для реалізації транзакцій у Redis використовуються наступні
основні команди:
MULTI - почати записувати команду для транзакцій.
EXEC - виконувати записані команди.
DISCARD - видалити всі записані команди.
WATCH - команда, гарантуючи подання типу «реєстрація та
встановлення» (CAS) - транзакція виконується лише у випадку,
якщо інші клієнти не змінили значення переменної. Іначе EXEC не
виконував записаних команд.
Тепер давайте спробуємо почати транзакцію, а потім перервати.

PUB/SUB повідомлення в Redis


Для передачі повідомлень відкриваємо два клієнти.
На першому підписуємося на повідомлення, а на іншому відправимо
повідомлення. В першому вікні виконується підписка на
повідомлення, а з іншого відправляємо.
Переваги Redis
Сховище даних в пам'яті
Всі дані Redis знаходяться в основній пам'яті сервера, на відміну від
таких баз даних, як PostgreSQL, Cassandra, MongoDB та інших, які
більшу частину даних зберігають на магнітних дисках або SSD-
накопичувачах. У порівнянні з традиційними дисковими базами
даних, які вимагають циклічного звернення до диска для більшості
операцій, сховища даних в пам'яті, такі як Redis, вільні від цього
обмеження. Завдяки цьому істотно зростає кількість виконуваних
операцій і скорочується час відгуку. В результаті забезпечується
надзвичайно висока продуктивність. Операції читання або запису
в середньому займають менше мілісекунди, швидкість роботи
досягає мільйонів операцій в секунду.
Гнучкі структури даних
На відміну від спрощених сховищ на основі пар «ключ - значення»,
які підтримують обмежений набір структур даних, Redis підтримує
величезну різноманітність структур даних, що дозволяє
задовольнити потреби різноманітних додатків.
Простота і зручність
Redis спрощує код, дозволяючи писати менше рядків для зберігання,
використання даних і організації доступу до даних в додатках.
Наприклад, якщо додаток містить дані, що зберігаються в хеш-
таблиці, і потрібно зберегти ці дані в сховище, можна просто
використовувати структуру даних хеш-таблиці Redis. Рішення
такого завдання з використанням сховища даних, що не підтримує
структури хеш-таблиць, зажадає написання серйозного обсягу коду
для перетворення даних з одного формату в інший. Redis вже
оснащений вбудованими структурами даних і надає безліч
можливостей їх комбінування і взаємодії з даними клієнта.
Розробникам під Redis доступні більше ста клієнтів з відкритим
вихідним кодом. Мови програмування включають Java, Python, PHP,
C, C ++, C #, JavaScript, Node.js, Ruby, R, Go і багато інших.

Завдання на лабораторну роботу 1 :


1. Створити ключ name:id:1 зі значення імені студента (ввести своє
ім’я).
2. Вивести значення створеного в попередньому пункті ключа.
3. За допомогою команди exists перевірити чи є ключі name:id:1 та
name:id:2.
4. Створити ключ name:id:2 та присвоїти йому будь яке ім’я.
5. Змінити значення name:id:2 на будь яке інше ім’я при цьому
вивівши на екран його попереднє значення.
6. Сторити ключ age:id:1 та присвоїти цілочисленне значення віку
студента (будь яке значення).
7. За допомогою команди type перевірити типи значень ключів
age:id:1 та name:id:1.
8. Вивести на екран всі ключі, які закінчуються одиницею. Вивести
всі ключ.
9. Змінити назву ключа name:id:1 на DELETED.
10. Видалити всі створені ключі.
11. Створити ключі name,age та group однією командою. (Значення
ключів встановлювати довільними)
12. Видалити всі створені ключі.
13. Значення age збільшити на одиницю, а потім зменшити на
одиницю.
14. Значення age збільшити на 20, а потім зменшити на 10.
15. Створити довільний ключ з довільним значенням, який
видалиться через ([Номер в списку групи] + 20 секунд). (За
допомогою команди ttl декілька раз вивести через скільки
видалиться ключ).

Завдання на лабараторну роботу 2 :


1. Створити список names, який складається п’яти довільних імен.
(Перші три елементи повинні бути вставлені в кінець списку, а
останні два - в початок)
2. Вивести по черзі: всі елементи списку, перший та другий, з
третього по п’ятий.
3. Видалити перший та останній елементи списку. Вивести довжину
списку.
4. Створити хеш-таблицю з трьома ключами:name,age та group.
Вивести ключів таблиці, значення ключів, а потім ключі і значення.
5. Збільшити значення ключу хеш таблиці на [Порядковий номер у
списку групи].
6. Створити множину set:1, яка складається з 5-ти довільних значень
від 1 до 15. Створити множину set:1,яка складається з 5-ти значень
від 1 до 5.
7. Знайти перетин множин set:1 та set:2.
8. Створити впорядковану множину people,в якій параметр score
буде приймати роки народження. (Множина має містити 7 - 10
значень.Імена обираються довільні. score обирається будь-який з
інтервалу [1950 - 2000] ).
9. Вивести всі значення створеної множини в попередньому пункті.
10. Вивести всі імена людей,які старші 1970-го року.Вивести імена
людей, які народилися з 1970 по 1980 роки.
11. Вивести значення множини people в порядку спадання.
12. Почати транзакцію,в якій треба: створити три ключі name та age
(age має бути integer, а name - string) , збільшити значення ключа age
на 1, а до ключа name додати прізвище (команда
append),переіменувати name на name:surname.
13. Завершити транзакцію.
14. Повторити хід виконання минулого пункту, але перервати
транзакцію на одному з етапів.

You might also like