Professional Documents
Culture Documents
Курсова робота
Курсова робота
Факультет електроніки
та комп’ютерних технологій
КУРСОВА РОБОТА
групи ФеС-23
Науковий керівник
Львів 2022
ЗМІСТ
АНОТАЦІЯ……………………………………………………………………..3
ВСТУП………………………………………………………………………….4
РОЗДІЛ 1. РЕЛЯЦІЙНА ТА НЕРЕЛЯЦІЙНА СЕРЕДА БАЗИ ДАНИХ…..5
1.1 Бази даних…………………………………………………………...5
1.1.1 Дані…………………………………………………………5
1.1.2 Визначення баз даних……………………………………..5
1.2 Реляційна база даних………………………………………………..5
1.2.1 Принцип нормалізації……………………………………..6
1.2.2 Типи логічних зв’язків…………………………………….6
1.2.3 Ключі……………………………………………………….7
1.3 Нереляційна база даних…………………………………………….8
1.3.1 Поява бази даних NoSQL…………………………………9
1.3.2 Типи нереляційних баз даних………………………….....9
1.3.3 Плюси і мінуси NoSQL………………………….……….10
1.3.4 Відсутність SQL………………………………………….10
1.3.5 Простота NoSQL…………………………………………11
1.3.6 Соціальні дані………………………………………….…12
1.3.7 Аналіз даних……………………………………………...13
РОЗДІЛ 2. COUCHDB, POUCHDB, JAVASCRIPT, HTTP ПРОТОКОЛ
ТА АРХІТЕКТУРА КЛІЄНТ-СЕРВЕРА……………………………………14
2.1 CouchDB……………………………………………………………14
2.1.1 Особливості………………………………………………..14
2.2 PouchDb…………………………………………………………….16
2.3 JavaScript……………………………………………………………16
2.3.1 Можливості JavaScript…………………………………….17
2.3.2 API………………………………………………………….17
2.4 HTTP протокол………………………………………….…..18
2.4.1 Структура протоколу…………………...…………………18
2.5 Архітектура клієнт-сервера……………………………………….19
РОЗДІЛ 3. ПРОГРАМНА РЕАЛІЗАЦІЯ ЗАВДАНЬ……………………….20
ВИСНОВКИ…………………………………………………………………..22
ЛІТЕРАТУРА…………………………………………………………………23
ДОДАТОК………………………………………………………………….…24
2
АНОТАЦІЯ
SUMMARY
3
ВСТУП
Діставати для себе любу інформацію в «один клік» стало для людей
чимось буденним. Але мало хто догадується що відбувається «по той бік
екрану» і які виконуються складні махінації з величезною кількістю даних.
У наш час без збирання і сортування інформації ніяк не обійтися.
Тому для виконання такого важливого завдання люди створили бази
даних, щоб облегшити собі роботу. Але баз даних на сьогоднішній день є
дуже багато, наприклад: бази даних часових рядів, стовбчикові бази даних,
ієрархічні, прості структурні і т.д. Усі вони мають різний функціонал та
свої плюси і мінуси.
У цій курсовій роботі ми розглянемо лише два типи баз даних:
реляційні, які вважаються одними з домінуючими на ринку, та
нереляційні, одне з недооцінених, на мою думку, баз даних. Ми детально
ознайомимося з їхніми можливостями, для чого їх використовують та з
якими недоліками зустрічається людина, яка взялася працювати з ними.
Але найбільший акцент ми поставимо на нереляційні бази даних і
дізнаємося чи заслужено ним користуються, чи можливо ніхто насправді
не замічає справжніх його можливостей? Чи приречене воно бути не
популярною базою даних, чи можливо NoSQL є революцією у наший час?
Ця курсова робота розрахована на перевідкриття цієї бази даних для
людей, які не можуть вирішити чи працювати у цьому середовищі та
роботи у ній.
4
РОЗДІЛ 1. РЕЛЯЦІЙНА ТА НЕРЕЛЯЦІЙНА СЕРЕДА БАЗИ ДАНИХ
1.1.1 Дані
Це інформація, яку має зберігати наша система й з якою буде
працювати. Дані можуть бути фактами, пов’язаними з будь-яким
предметом. Як от, ваше ім’я, вік, зріст, вага. Зображення, файл теж можна
вважати даними.
5
ключем таблиці клієнтів є customer_id. Це допомагає ідентифікувати
кожен запис окремо. Припустимо також, що в базі даних продажів є ще
одна таблиця під назвою orders. Містить order_id, order_name, date,
customer_id. customer_id у таблиці клієнтів є зовнішнім ключем у таблиці
замовлень. Тому ці дві таблиці пов’язані одна з одною. У реляційних базах
даних таблиці пов’язані одна з одною.
Ми можемо нормалізувати дані в таблицях реляційної бази даних,
щоб мінімізувати надмірність даних. Крім того, мова структурованих
запитів (SQL) допомагає запитувати дані в реляційних базах даних.
1.2.3 Ключі
Ключ — це стовпець (може бути кілька стовпців), який
додається до таблиці, щоб можна було встановити зв’язок із
записами в іншій таблиці.
Існує два типи ключів: первинний і вторинний (чужий).
Первинний ключ — це одне або кілька полів (стовпців),
комбінація значень яких однозначно ідентифікує кожен запис у
таблиці. Первинний ключ не може бути нульовим і завжди повинен
мати унікальний індекс. Первинні ключі використовуються для
зв’язку між таблицями та зовнішніми ключами в інших таблицях.
Вторинний (чужий) ключ — це одне або кілька полів
(стовпців) у таблиці, які містять посилання на поле первинного
ключа іншої таблиці. Вторинний ключ визначає спосіб об’єднання
таблиць.
З двох логічно пов’язаних таблиць одна називається таблицею
первинного ключа або головною таблицею, а інша — таблицею
вторинного (чужого) ключа або дочірньою таблицею. СУБД
дозволяє зіставляти пов’язані записи з обох таблиць і відображати їх
разом у формі, звіті чи запиті.
Існує три типи первинних ключів: ключові поля лічильника,
прості ключі та складені ключі.
1. Поле лічильника (тип даних «Лічильник»). Кожен запис у
цьому полі таблиці автоматично заповнюється унікальним
числовим значенням.
2. Простий ключ. Якщо поле містить унікальні значення, такі
як коди або інвентарні номери, ми можемо визначити це
поле як первинний ключ. Будь-яке поле, що містить дані,
можна визначити як ключ, якщо поле не містить
повторюваних або нульових значень.
3. Складений ключ. Якщо ми не можемо гарантувати
унікальність кожного значення поля, ми можемо створити
7
ключ, що складається з кількох полів. Найчастіше така
ситуація виникає з таблицями, які використовуються для
з’єднання двох таблиць у зв’язку «багато-до-багатьох».
Поле первинного ключа має містити лише унікальні значення
для кожного рядка в таблиці. Тобто зіставлення не дозволено, а
зіставлення значень дозволено для рядків таблиці в полях
вторинного або зовнішнього ключа. Якщо вибрати правильний тип
первинного ключа складно, потрібно вибрати поле лічильника як
ключ.
Програми, призначені для структурування інформації,
упорядкування її в таблицях і обробки даних, називаються
системами керування базами даних (СУБД). Іншими словами, СУБД
призначена як для створення та підтримки баз даних, так і для
доступу до даних. Існує більше 50 видів СУБД для персональних
комп'ютерів. Деякі з найпоширеніших включають MS SQL Server,
Oracle, Informix, Sybase, DB2 і MS Access.
8
1.3.1 Поява бази даних NoSQL
Основним фактором, який змусив світову ІТ-спільноту думати
про нові стратегії зберігання та доступу до інформації, є
систематичне зростання обсягу даних в Інтернеті. У цьому контексті
з’явилися великі дані. Великі дані – це стратегія ефективної обробки
величезних і постійно зростаючих масивів даних.
Крім того, концепція великих даних чітко показала потребу в
моделі бази даних, яка фокусується на швидкості доступу та
масштабованості. Потрібне було рішення, яке було б простіше, ніж
існуючі реляційні бази даних, але не менш ефективне для вирішення
конкретних завдань. В першу чергу це завдання побудови хмарного
сховища, і кінцевих користувачів в першу чергу хвилює швидкість
доступу та обсяг інформації, який там може зберігатися.
Реляційні бази даних неефективні для зберігання великих
обсягів даних, таких як BigData. Рішенням цієї проблеми є
нереляційні бази даних. Ці бази даних можуть зберігати великі
обсяги даних. Ми також можемо згрупувати свої дані на кількох
машинах, щоб зменшити витрати на обслуговування.
Більшість нереляційних баз даних можна знайти на таких веб-
сайтах, як Google, Yahoo, Amazon і Facebook. Ці веб-сайти мають
мільйони користувачів, які щодня впроваджують тисячі нових
програм, і існуючі рішення RDBMS не можуть встигати за різким
скороченням трафіку. РСУБД не може вирішити цю проблему, тому
люди перейшли на новий тип СУБД, який може обробляти дані веб-
масштабу нереляційним способом.
9
2. Документно-орієнтована база даних — це система для зберігання
ієрархічних структур даних (документів) із структурою дерева
або лісу. Приклади такого типу СУБД: CouchDB, Couchbase,
MarkLogic, MongoDB, eXist.
3. Графова модель бази даних є узагальненням моделі мережевих
даних і характеризується міцними зв’язками між вузлами.
Найвідомішими графовими СУБД є ArangoDB, FlockDB, Giraph,
HyperGraphDB, Neo4j і OrientDB.
4. База даних, як-от Bigtable або сховище сімейства стовпців,
містить дані, упорядковані у формі розрідженої матриці, рядки та
стовпці якої використовуються як ключі. Прикладами такого
типу СУБД є HBase, Cassandra, Hypertable, SimpleDB.
10
породжують багато непотрібних або відверто помилкових запитів.
Незважаючи на те, що мова SQL є універсальною, вона має дуже
великі можливості, і для її серйозного використання потрібні певні
знання. У той же час рідна мова запитів сучасних репозиторіїв
NoSQL краще підходить для виконання простих операцій з базами
даних.
Це рішення також має свої недоліки, але в довгостроковій
перспективі воно цілком може переважити всі його переваги.
4. Додатки сильно прив'язані до конкретної СУБД. Мова SQL є
спільною для всіх реляційних баз даних, і користувачам не потрібно
повністю переписувати весь код, якщо СУБД зміниться. Навіть якщо
дві системи NoSQL концептуально практично не відрізняються,
існує кілька спільних стандартів для API і специфікацій запитів.
5. Вбудована мова запитів має обмежені можливості. SQL має
дуже багату історію та багато стандартів. Це дуже потужний і
складний інструмент для обробки даних і звітності. Практично всі
API зберігання даних NoSQL і мови запитів побудовані на основі
деяких функцій SQL. Результатом є набагато менша
функціональність.
6. Низька цінність знань і вузький профіль — набагато легше
знайти фахівця з хорошими знаннями SQL, але мало хто всерйоз
цікавиться подробицями операцій API для деяких рішень NoSQL —
це означає, що оператори баз даних повинні вивчити багато
специфічних операцій.
12
інформації та безпека даних користувача. Блискавична швидкість і
нескінченна масштабованість системи рідко висуваються на перший
план при реалізації дуже складних багатокористувацьких проектів.
Перш за все, компанії прагнуть створювати надійні продукти.
13
РОЗДІЛ 2. COUCHDB, POUCHDB, JAVASCRIPT, HTTP ПРОТОКОЛ
ТА АРХІТЕКТУРА КЛІЄНТ-СЕРВЕРА
2.1 CouchDB
Apache CouchDB — це розподілена документно-орієнтована система
керування базами даних системного класу NoSQL, яка не потребує опису
схеми даних. До CouchDB можна надсилати запити та індексувати дані
відповідно до парадигми MapReduce, яка використовує JavaScript для
формування логіки вибірки даних.
CouchDB можна розглядати як сервер веб-додатків. Щоб втілити цю
ідею в життя, у CouchDB вбудовано продуктивний веб-сервер, а не
оброблений код (як і дані) зберігається в тій же базі даних.
Запит CouchDB та індексування даних можна виконувати відповідно
до парадигми MapReduce, яка використовує JavaScript для формування
логіки пошуку даних. Доступ до бази даних здійснюється за протоколом
HTTP з RESTful JSON API. Документ з унікальним ідентифікатором і
версією, що містить довільний набір іменованих полів у форматі
ключ/значення, діє як одиниця зберігання даних. Організація псевдо
структурованих наборів даних із довільних документів використовує
концепцію формування уявлень, визначення якої використовує мову
JavaScript. У JavaScript ми також можемо визначити функції, які
перевіряють правильність даних під час додавання нового документа в
певному поданні.
CouchDB зберігає дані у формі впорядкованого списку та дозволяє
часткову реплікацію даних у кількох базах даних у режимі «головний-
головний», який одночасно виявляє та вирішує конфліктні ситуації. Кожен
сервер підтримує власний локальний набір даних, синхронізованих з
іншими серверами, і їх можна перевести в автономний режим для
регулярного повторення змін. Зокрема, така можливість робить CouchDB
привабливим рішенням для організації синхронізації програмних
налаштувань між різними комп’ютерами.
2.1.1 Особливості
На відміну від реляційних СУБД, як і інших документно
орієнтованих СУБД (Mnesia, Lotus Notes, MongoDB), CouchDB
14
розроблена для роботи з напівструктурованою інформацією та має
наступні особливості:
1. Дані зберігаються у формі JSON-подібних документів, а не рядків
чи стовпців, де моделює дерево, а не таблиця.
2. Цілісність бази даних гарантується лише на рівні окремих
записів.
3. Операції об’єднання (JOIN) між таблицями не визначені, оскільки
в’язки між таблицями або записами принципово не
підтримуються.
4. Функції перегляду використовуються для створення індексів і
виконання запитів.
5. Функції-валідатори, функції-типи та функції-фільтри
зберігаються в текстовій формі в самій базі даних.
6. Ці функції зазвичай написані на JavaScript або Erlang, викликають
окремий сервер запитів для їх виконання та взаємодіють за
допомогою сокетів і текстових протоколів JSON.
7. Кожна база даних у системі CouchDB відповідає одному
B-дереву.
8. Кожне B-дерево зберігається на диску як окремий файл.
9. Ми можемо запускати кілька потоків одночасно для читання бази
даних і лише один потік для запису.
10.Цілісність бази даних гарантується лише тоді, коли дані
записуються на диск.
11.Початкові дані та їхні індекси, що зберігаються в базі даних,
постійно оновлюються, але все В-дерево оновлюється кожного
разу, коли оновлюється початкова функція або відображення.
12.Для обробки даних використовується спрощена модель технології
MapReduce за допомогою функціонального стилю, який допускає
паралельні обчислення, в тому числі на багатоядерних
процесорах.
13.Розподіл обчислень між кількома вузлами не підтримується.
Замість цього використовується механізм реплікації.
14.Обробка даних за допомогою ланцюжка послідовних функцій
MapReduce не підтримується.
15.Підтримується вертикальна масштабованість. Це означає, що
підтримуються портативні пристрої, а також величезні кластери.
16.Зовнішній інтерфейс (API) до цієї СУБД побудований на основі
архітектури REST. Іншими словами, сама база даних, окремі
записи, перегляди та запити є сутністю ресурсів, які мають
15
унікальні адреси (URL) і підтримують GET, PUT, POST,
DELETE. Тому було створено багато клієнтських бібліотек для
взаємодії з базами даних, включаючи такі мови, як JavaScript,
PHP, Ruby, Python і Erlang.
17.Взаємодія між окремими компонентами СУБД, тобто взаємодія з
початковим сервером, знову ж таки виконується за допомогою
текстового протоколу, дані надсилаються у форматі JSON. Це
дозволяє створювати ці компоненти за допомогою різних мов
програмування, таких як Java, Python і JavaScript.
2.2 PouchDb
PouchDB – документно-орієнтована система управління базами
даних та розширена версія СУБД Apache CouchDB, написана на JavaScript.
PouchDB може працювати у вашому браузері.
Модель зберігання копіює CouchDB та надає засоби вирішення
конфліктів. PouchDB сумісний з CouchDB на рівні API для зберігання та
отримання даних. Код розповсюджується під ліцензією Apache 2.0.
PouchDB дозволяє створювати повнофункціональні веб-застосунки в
автономному режимі і може реплікувати дані з фіксованої бази даних на
основі CouchDB. Іншими словами, коли веб-програма не підключена до
мережі, вона може накопичувати зміни на основі PouchDB в локальному
сховищі, а коли вона підключена до мережі, вона може синхронізувати
зміни із зовнішнім сервером, що підтримує CouchDB API, або
забезпечувати синхронізацію даних та перейти між клієнтами.
PouchDB працює у всіх сучасних браузерах, а також у серверних
рішеннях на базі Node.js та окремих клієнтських програмах на базі
Cordova/PhoneGap, NW.js та Electron. PouchDB не прив'язаний до жодного
веб-фреймворку, але окремо надає прив'язки для різних фреймворків,
включаючи Angular, React, Ember і Backbone.
2.3 JavaScript
JavaScript – це мова програмування, яка дозволяє веб-документам
реалізовувати безліч складних рішень. Він допомагає зробити сторінки
сайту більш інтерактивними та обробляє дії користувачів сайту. Це
об'єктно-орієнтована клієнтська мова, що підтримується програмами, що
керують дизайном сайту. JavaScript став ще популярнішим серед
16
розробників, коли з'явилася технологія AJAX, що призвело до нового
етапу розробки сайтів.
Нижче наведено деякі конкретні приклади застосування технологій:
1. Відображення контенту, що регулярно оновлюється.
2. Створення якісної анімації та графічних об'єктів у форматах
2D/3D.
3. Можливість прокручувати відео в медіа плеєрі.
Поряд із HTML та CSS, JavaScript є третім важливим будівельним
блоком, з якого побудовано більшість стандартних веб-інтерфейсів.
17
1. Стандартна бібліотека.
2. Стандартний інтерфейс для роботи з серверами та базами даних.
3. Система керування пакетами.
18
2. Заголовок;
3. Тіло повідомлення, яке містить дані запиту, запитаний ресурс або
опис проблеми, якщо запит не виконано.
Мінімально необхідний запит – це стартовий рядок.
Починаючи з HTTP/1.1, заголовок Host: тепер потрібний (щоб
розрізняти кілька доменів з однією і тією ж IP-адресою).
19
РОЗДІЛ 3. ПРОГРАМНА РЕАЛІЗАЦІЯ ЗАВДАНЬ
20
Рис 3. Вміст файла index.html
21
ВИСНОВКИ
22
ЛІТЕРАТУРА
23
ДОДАТОК
Код файлу index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Some title</title>
<script src=
"//cdn.jsdelivr.net/npm/pouchdb@7.3.0/dist/pouchdb.min.js"></script>
<script>
function syncDb() {
db.replicate.to('http://admin:admin@127.0.0.1:5984/my_database_couch',
[
24
{mode: "no-cors"}
]);
}
</script>
</head>
<body>
<button onclick="syncDb()">replicate</button>
</body>
</html>
25