Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Реляционные базы данных
Левон Авакян/ WoT Server/
l_avakyan@wargaming.net
Или как работать с данными
1
2
Оглавление
Оглавление 3
• Реляционные базы данных
• Представление данных
• Реляционная алгебра
• Проектирование реляционных баз данных
• Язык запросов SQL
• Внутри СУБД
• Современные СУБД
4
Реляционные базы
данных
Реляционные базы данных 5
• Широко распространены
• Очень простая концепция
• Существует высокоуровневые языки, которые легко позволяют оперировать данными
Модель 6
• База данных множество именованных отношений (таблиц)
• Атрибуты ( колонки), которые описывают отношения
• Кортежи ( строки) – конкретные значения атрибутов
• Каждый атрибут имеет тип (атомарный или структурный). Так же существует тип NULL
• Схема формальное описание базы данных
• Ключ – атрибут или несколько атрибутов (составной ключ) делающим кортеж уникальным
Что такое реляционная база данных
Запросы 7
Q Q2
Запросы 8
• Clan(cName,server,count)
• Player(pID,pName,rating,bCount)
• Apply(pID,cName,role,decision)
Пример
cName server count pID pName rating bCount pID cName role desc
PlayerClan Apply
Запросы 9
Вывести всех игроков у которых рейтинг больше 50 и который подались в клан WG
• Реляционная алгебра – формальный язык
(𝜋𝐼𝐷 𝜎 𝑟𝑎𝑡𝑖𝑛𝑔>50⋏𝑐𝑁𝑎𝑚𝑒=′ 𝑊𝐺′(𝑃𝑙𝑎𝑦𝑒𝑟 ⋈ Apply))
• SQL – фактический язык, в основе которого лежит реляционная алгебра
(Select Player.pID From Player, Apply Where Player.pID=Apply.pID and rating>50 and cName=‘WG’)
Пример
cName server count pID pName rating bCount pID cName role desc
PlayerClan Apply
10
Представление
данных
Subtitle
XML 11
Сравнение с реляционными БД
Реляционное
представление
XML
Структура Таблицы Иерархическое дерево
Схема Зафиксированная Гибкая
Запросы Достаточно простые Есть проблемы
Порядок данных Нет Подразумевается
Имплементация Поддерживается в
СУБД
Есть варианты
JSON 12
Сравнение с реляционными БД
Реляционное
представление
JSON
Структура Таблицы Вложенное множество
массивов
Схема Зафиксированная Гибкая
Запросы Достаточно простые Есть проблемы
Порядок данных Нет Массивы
Имплементация Поддерживается в
СУБД
Есть встроенные в
СУБД
13
Реляционная алгебра
Проще чем матан 
Операторы 14
Основные:
• R – relation
• 𝜎𝑐𝑜𝑛𝑑(𝐸) – выбор кортежей (select)
• 𝜋 𝐴1,…,𝐴𝑛 𝐸 - выбор атрибутов (project)
• (E1) × (E2) – кросс продукт
• E1 ∪ E2 - объединение
• E1 − E2 - разность
• PR(A1,…,An)(E) - переименование
Производные:
• E1 ⋈ E2 natural join
• E1 ⋈ 𝜃E2 условный (тета) join
• E1 ∩ E2 пересечение
Примеры 15
Вывести имена и рейтинг игроков у которых больше 1000 боев и который подались на роль
командира взвода и были отклонены
𝜋 𝑝𝑁𝑎𝑚𝑒,𝑟𝑎𝑡𝑖𝑛𝑔 𝜎 𝐴𝑝𝑝𝑙𝑦.𝑝𝐼𝐷=𝑃𝑙𝑎𝑦𝑒𝑟.𝑝𝐼𝐷⋏𝑏𝐶𝑜𝑢𝑛𝑡>1000⋏𝑟𝑜𝑙𝑒=′ 𝑐𝑜𝑚𝑚𝑎𝑛𝑑𝑒𝑟′⋏𝑑𝑒𝑠𝑐=′ 𝑟′
(𝑃𝑙𝑎𝑦𝑒𝑟 × Apply)
Вывести имена и рейтинг игроков у которых больше 1000 боев и который подались на роль
командира взвода в кланы с более чем 50 игроками и были отклонены
𝜋 𝑝𝑁𝑎𝑚𝑒,𝑟𝑎𝑡𝑖𝑛𝑔 𝜎 𝑏𝐶𝑜𝑢𝑛𝑡>1000⋏𝑟𝑜𝑙𝑒=′ 𝑐𝑜𝑚𝑚𝑎𝑛𝑑𝑒𝑟′⋏𝑑𝑒𝑠𝑐=′ 𝑟′⋏𝑐𝑜𝑢𝑛𝑡>50
(𝑃𝑙𝑎𝑦𝑒𝑟 ⋈(Apply ⋈ 𝐶𝑙𝑎𝑛 ))
cName server count pID pName rating bCount pID cName role desc
PlayerClan Apply
Эквивалентность 16
E1∩E2≡ E1 - (E1- E2)
17
Проектирование
реляционных баз
данных
Проблема 18
• ID и имя
• Клан в который подается заявка
• Любимая техника включая нацию
• Язык
Apply(pID,pName,cName,vehicle,nation,lang)
Пример заявки в клан
pID pName cName vehicle nation lang
1 Alex WG Maus Ger RU
1 Alex WG Maus Ger BY
1 Alex Korn Maus Ger RU
… … … … … …
Аномалии 19
• Избыточность
• Аномалии-модификации проявляются в том, что изменение одних данных
может повлечь просмотр всей таблицы и соответствующее изменение некоторых
записей таблицы.
Аномалии-удаления — при удалении какого либо кортежа из таблицы может
пропасть информация, которая не связана на прямую с удаляемой записью.
Аномалии-добавления возникают, когда информацию в таблицу нельзя
поместить, пока она не полная, либо вставка записи требует дополнительного
просмотра таблицы.
Пример заявки в клан
Нормальные формы 20
Нормальная форма — требование, предъявляемое к структуре таблиц в теории
реляционных баз данных для устранения из базы избыточных функциональных
зависимостей между атрибутами
Метод нормальных форм (НФ) состоит в сборе информации о объектах решения
задачи в рамках одного отношения и последующей декомпозиции этого отношения
на несколько взаимосвязанных отношений на основе процедур нормализации
отношений.
Цель нормализации: исключить избыточное дублирование данных, которое
является причиной аномалий, возникших при добавлении, редактировании и
удалении кортежей(строк таблицы).
Шесть Нормальных форм и Нормальная форма Бойса-Кодда (НФБК)
Дизайн основаны на декомпозиции 21
• «Мега» отношения + свойства данных
• Проводим декомпозицию основываясь на свойствах данных
• Окончательное множество отношений удовлетворяет нормальным формам
• Отсутствуют аномалии
• Функциональные зависимости - Нормальная форма Бойса-Кодда (НФБК)
• Многозначная зависимость - 4НФ
Декомпозиция 22
𝑅 𝐴
𝑅1 𝐵
𝑅2 𝐶
Немного вспомним реляционную алгебру
𝐵 ∪ 𝐶 = 𝐴
𝑅1 ⋈ 𝑅2 = 𝑅
𝑅1 = 𝜋 𝐵 𝑅
𝑅2 = 𝜋 𝐶(𝑅)
Функциональная зависимость 23
• Функциональная зависимость (𝐴 → 𝐵)
• Вводятся основываясь на знаниях о мире
• Позволяет архивировать данные
• Оптимизация запросов
∀𝑡, 𝑢 ∈ 𝑅: 𝑡 𝐴 = 𝑢 𝐴 ⟹ 𝑡 𝐵 = 𝑢[𝐵]
Нормальная форма Бойса-Кодда:
𝐴 → 𝐵 , 𝐴 - ключ
𝐴 → 𝐵
Многозначная зависимость 24
𝐴 ↠ 𝐵
∀𝑡, 𝑢 ∈ 𝑅: 𝑡 𝐴 = 𝑢 𝐴 𝑡ℎ𝑒𝑛 ∃𝑣 ∈ 𝑅: 𝑣 𝐴
= 𝑡 𝐴 ∧ 𝑣 𝐵 = 𝑡 𝐵 ∧ 𝑣 𝑟𝑒𝑠𝑡 = 𝑢 𝑟𝑒𝑠𝑡
Четвертая нормальная форма
𝐴 ↠ 𝐵, 𝐴 − ключ
𝐴 ↠ 𝐵
Пробуем декомпозировать 25
Player (pID,pName)
Apply(pID,cName)
Vehicle(pID,vehicle)
Nation(vehicle,nation)
Language(pID,lang)
Пример заявки в клан
Apply(pID,pName,cName,vehicle,nation,lang)
Player (pID,pName)
Apply(pID,cName,lang)
Vehicle(pID,vehicle,nation)
26
SQL
Обзор 27
• SQL – Sequence query language
• Поддерживается все крупными реляционными базами данных
• Стандартизован
• Декларативный, основывается на реляционной алгебре
Additional information
Обзор 28
• DDL (Data Definition Language)
• Create table
• Alter table
• Drop table
• DML (Data Management Language)
• Select
• Update
• Insert
• Delete
• Другие: triggers, indexes, views, transactions, authorization, etc
Additional information
Обзор 29
Select A1,…, An from R1,…, Rm where condition
𝜋 𝐴1
,…,𝐴𝑛(𝜎 𝑐𝑜𝑛𝑑𝑖𝑡𝑖𝑜𝑛(𝑅1 × ⋯ × 𝑅 𝑚))
Структура запроса
JOIN 30
Additional information
Агрегирующие функции 31
• MIN
• MAX
• SUM
• AVG
• COUNT
GROUP BY – позволяет определить подмножество атрибутов на котором будет выполняется
агрегирующая функция
HAVING – определяет условие для удаления агрегированных значений
Additional information
32
Внутри СУБД
Индексы 33
• Структура данных, которая строится по атрибуту или атрибутам для убыстрения индекса
• Основные виды:
• BTREE (Balance Tree) – хорошо для <,>,=
• Hash – хорошо для =
• В общем случае существует много видов
• Минусы:
• Занимают дополнительное место
• При изменении данных перестраиваются - занимает время
• Может потребоваться длительное время на построение
Additional information
Работа с индексами 34
• Вход: база данных (статистика) и профиль нагрузки
• Выход: рекомендуемые индексы
• Команда EXPLAIN – выводит план исполнения с примерной стоймостью выполнения
некоторого шага.
Additional information
Транзакции 35
• Несогласованность на уровне атрибутов
• Update Clan Set ccount = ccount + 1 Where cName = ‘WG’
• Update Clan Set ccount = ccount + 2 Where cName = ‘WG’
• Несогласованность на уровне кортежей
• Update Apply Set role = ‘commander’ Where pID = 123
• Update Apply Set decision = ‘Y’ Where pID = 123
• Несогласованность на уровне таблиц
• Update Apply Set decision = ‘Y’ Where pID In (Select pID From Player Where rating > 50)
• Update Player Set rating = (1.1) * rating Where bcount > 2500
• Несогласованность нескольких выражений
• Insert Into Archive Select * From Apply Where decision = ‘N’;
• Delete From Apply Where decision = ‘N’;
• Select Count(*) From Apply;
• Select Count(*) From Archive;
Конкурентность
Транзакции 36
Сценарии:
Загружаем большой объем данных – что-то пошло не так, часть данных в БД, часть нет
Выполняем последовательно операции с БД, отказ произошел между операциями –
целостность нарушена
Устойчивость к отказам
Транзакции 37
Транзакция - группа последовательных операций с БД, которая представляет собой логическую
единицу работы с данными. Транзакция может быть выполнена либо целиком и успешно,
соблюдая целостность данных и независимо от параллельно идущих других транзакций, либо
не выполнена вообще, и тогда она не должна произвести никакого эффекта.
Atomic
Consistency
Isolation
Durability
Упорядочиваемость – гарантируется, что поток транзакций, будет преобразован в
последовательность и так будет выполнен.
Транзакции 38
Уровень изоляции транзакции применяется только к одной транзакции.
.
Уровни изоляции транзакций
Уровень
изоляции
Проблема Dirty
read
Nonreptable
reads
phantoms
Read uncommited y y y
Read commited n y y
Repeatable read n n y
Serializable n n n
Представления 39
• Скрывают некоторые данные от некоторых пользователей
• Делают некоторые запросы проще, более естественными
• Обеспечивают гранулярность доступа к БД
• View V = ViewQuery(R1 , R2 , …, Rn )
• Схема V это схема результирующего запроса
• Запрос Q задействует V
• По настоящему, Q преобразуется, чтобы использовать R1 ,…,Rn вместо V
• Материализованные представления – это представления, которые создают копию данных на
диске.
.
View
Ограничения и триггеры 40
Накладывать ограничения на допустимые данные, помимо навязанные структурой и типами
• Зачем используются:
• Проверяют корректность ввода
• Поверяют корректность изменения
• Для соблюдения целостности
• Говорят системе о данных – как хранить, обрабатывать
• Какие бывают:
• NULL
• Key
• Ссылочные
• Основанные на атрибутах
• Основанные на кортежах
• Общие утверждения
Integrity Constraints
Ограничения и триггеры 41
Триггер — хранимая особого типа, которую пользователь не вызывает непосредственно, а
исполнение которой обусловлено действием по модификации данных: добавлением INSERT,
удалением DELETE строки в заданной таблице, или изменением UPDATE данных в
определённом столбце заданной таблицы БД. Триггеры применяются для обеспечения
целостности данных и реализации сложной бизнес логики.
Триггеры
42
Современные СУБД
MySQL 43
MySQL имеет два слоя – внешний слой sql и внутренний набор движков, из которых наиболее
часто используется движок InnoDb, как наиболее полно поддерживающий ACID.
Поддерживаются такие основные движки MyISAM, InnoDB, MEMORY, Berkeley DB. Они
отличаются между собой способом записи данных на диск, а также методами считывания.
Postgres 44
PostgreSQL – поедставляет из себя объектно реляционную базу данных, которая работает
только на одном движке — storage engine. Все таблицы представлены в виде объектов, они
могут наследоваться, а все действия с таблицами выполняются с помощью объективно
ориентированных функций. Как и в MySQL все данные хранятся на диске, в специально
отсортированных файлах, но структура этих файлов и записей в них очень сильно отличается.
Для каждого клиента на сервере создается новый процесс (не поток !). Для работы с такими
клиентскими процессами сервер использует семафоры.
Postgres vs MySQL 45
Postgres MySQL
Производительность В общем случае
производительнее,
множество настроек
Зависит от конкретных
данных и движка
Типы данных Возможность создавать
свои типы
Только типы
определенные в БД
Разработка Открытый код,
большое community
Принадлежит Oracle,
есть fork MariaDB,
Percona
Стандарт SQL Более полно
поддерживает стандарт
Идут по пути
упрощения
Возможности
обработки
Поддерживает курсор
на клиенте
Наследование таблиц
Различные индексы
Загружает весь ответ в
память клиента
Спасибо
l_avakyan@wargaming.net
46

More Related Content

What's hot

java 8
java 8java 8
Основы С++ (операторы, типы данных, функции)
Основы С++ (операторы, типы данных, функции)Основы С++ (операторы, типы данных, функции)
Основы С++ (операторы, типы данных, функции)
Olga Maksimenkova
 
C++ Базовый. Занятие 12.
C++ Базовый. Занятие 12.C++ Базовый. Занятие 12.
C++ Базовый. Занятие 12.
Igor Shkulipa
 
Введение в машинное обучение
Введение в машинное обучение Введение в машинное обучение
Введение в машинное обучение
Anton Anokhin
 
Рекурсия. Поиск
Рекурсия. ПоискРекурсия. Поиск
Рекурсия. Поиск
Olexandra Dmytrenko
 
Введение в машинное обучение. Кластеризация (Bitworks Software, Кирилл Жданов)
Введение в машинное обучение. Кластеризация (Bitworks Software, Кирилл Жданов)Введение в машинное обучение. Кластеризация (Bitworks Software, Кирилл Жданов)
Введение в машинное обучение. Кластеризация (Bitworks Software, Кирилл Жданов)
Dmitry Kornev
 
Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»
Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»
Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»
SpbDotNet Community
 
20120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-0420120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-04
Computer Science Club
 
Машинное обучение (Открытый семинар по средам)
Машинное обучение (Открытый семинар по средам)Машинное обучение (Открытый семинар по средам)
Машинное обучение (Открытый семинар по средам)
Pavel Egorov
 
C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.
Igor Shkulipa
 
Настрой контент под пользователя!
Настрой контент под пользователя!Настрой контент под пользователя!
Настрой контент под пользователя!
PyNSK
 
Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.
Unguryan Vitaliy
 
парадигмы программирования и шаблоны проектирования
парадигмы программирования и шаблоны проектированияпарадигмы программирования и шаблоны проектирования
парадигмы программирования и шаблоны проектирования
moldovaictsummit2016
 

What's hot (13)

java 8
java 8java 8
java 8
 
Основы С++ (операторы, типы данных, функции)
Основы С++ (операторы, типы данных, функции)Основы С++ (операторы, типы данных, функции)
Основы С++ (операторы, типы данных, функции)
 
C++ Базовый. Занятие 12.
C++ Базовый. Занятие 12.C++ Базовый. Занятие 12.
C++ Базовый. Занятие 12.
 
Введение в машинное обучение
Введение в машинное обучение Введение в машинное обучение
Введение в машинное обучение
 
Рекурсия. Поиск
Рекурсия. ПоискРекурсия. Поиск
Рекурсия. Поиск
 
Введение в машинное обучение. Кластеризация (Bitworks Software, Кирилл Жданов)
Введение в машинное обучение. Кластеризация (Bitworks Software, Кирилл Жданов)Введение в машинное обучение. Кластеризация (Bitworks Software, Кирилл Жданов)
Введение в машинное обучение. Кластеризация (Bitworks Software, Кирилл Жданов)
 
Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»
Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»
Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»
 
20120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-0420120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-04
 
Машинное обучение (Открытый семинар по средам)
Машинное обучение (Открытый семинар по средам)Машинное обучение (Открытый семинар по средам)
Машинное обучение (Открытый семинар по средам)
 
C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.
 
Настрой контент под пользователя!
Настрой контент под пользователя!Настрой контент под пользователя!
Настрой контент под пользователя!
 
Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.
 
парадигмы программирования и шаблоны проектирования
парадигмы программирования и шаблоны проектированияпарадигмы программирования и шаблоны проектирования
парадигмы программирования и шаблоны проектирования
 

Similar to Реляционные базы данных

Aлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreetAлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreet
Ontico
 
базы данных
базы данныхбазы данных
базы данных
Алексей Орловский
 
Coding like a sex
Coding like a sexCoding like a sex
Coding like a sex
Max Arshinov
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Fedor Lavrentyev
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Mail.ru Group
 
HighLoad systems: tips & tricks
HighLoad systems: tips & tricksHighLoad systems: tips & tricks
HighLoad systems: tips & tricks
Sveta Bozhko
 
High Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHigh Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus Ready
HighLoad2009
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Ontico
 
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Badoo Development
 
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Ontico
 
физическая структура хранения артемов Ready
физическая структура хранения артемов Readyфизическая структура хранения артемов Ready
физическая структура хранения артемов Ready
rit2010
 
Excel in Javascript
Excel in JavascriptExcel in Javascript
Excel in Javascript
Viktor Turskyi
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
Ontico
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
Nikolay Samokhvalov
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Ontico
 
Есть ли жизнь с ORM или типовая архитектура CRUD приложения
Есть ли жизнь с ORM или типовая архитектура CRUD приложенияЕсть ли жизнь с ORM или типовая архитектура CRUD приложения
Есть ли жизнь с ORM или типовая архитектура CRUD приложения
Nicolay Velizhanin
 
СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"
Technopark
 
Введение в Oracle
Введение в OracleВведение в Oracle
Введение в Oracle
Alexander Rusetsky
 
Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1
Pavel Egorov
 
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Positive Development User Group
 

Similar to Реляционные базы данных (20)

Aлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreetAлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreet
 
базы данных
базы данныхбазы данных
базы данных
 
Coding like a sex
Coding like a sexCoding like a sex
Coding like a sex
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
 
HighLoad systems: tips & tricks
HighLoad systems: tips & tricksHighLoad systems: tips & tricks
HighLoad systems: tips & tricks
 
High Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHigh Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus Ready
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
 
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
 
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
 
физическая структура хранения артемов Ready
физическая структура хранения артемов Readyфизическая структура хранения артемов Ready
физическая структура хранения артемов Ready
 
Excel in Javascript
Excel in JavascriptExcel in Javascript
Excel in Javascript
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
Есть ли жизнь с ORM или типовая архитектура CRUD приложения
Есть ли жизнь с ORM или типовая архитектура CRUD приложенияЕсть ли жизнь с ORM или типовая архитектура CRUD приложения
Есть ли жизнь с ORM или типовая архитектура CRUD приложения
 
СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"
 
Введение в Oracle
Введение в OracleВведение в Oracle
Введение в Oracle
 
Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1
 
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
 

More from Levon Avakyan

Надежность World of Tanks Server
Надежность World of Tanks ServerНадежность World of Tanks Server
Надежность World of Tanks Server
Levon Avakyan
 
Grpahite&amp;grafana
Grpahite&amp;grafanaGrpahite&amp;grafana
Grpahite&amp;grafana
Levon Avakyan
 
World of Tanks Experience of Using Kafka
World of Tanks Experience of Using KafkaWorld of Tanks Experience of Using Kafka
World of Tanks Experience of Using Kafka
Levon Avakyan
 
SRE vs DevOps
SRE vs DevOpsSRE vs DevOps
SRE vs DevOps
Levon Avakyan
 
Wargaming Clan Platform
Wargaming Clan PlatformWargaming Clan Platform
Wargaming Clan Platform
Levon Avakyan
 
Архитектура мета игры Wargaming. Глобальная карта 2.0.
Архитектура мета игры Wargaming. Глобальная карта 2.0.Архитектура мета игры Wargaming. Глобальная карта 2.0.
Архитектура мета игры Wargaming. Глобальная карта 2.0.
Levon Avakyan
 
Осознанный выбор. Python 3 для реализации сервисного шлюза клиента World of T...
Осознанный выбор. Python 3 для реализации сервисного шлюза клиента World of T...Осознанный выбор. Python 3 для реализации сервисного шлюза клиента World of T...
Осознанный выбор. Python 3 для реализации сервисного шлюза клиента World of T...
Levon Avakyan
 
Кланы в Wargaming. От странички на танковом портале до мультиплатфермнного с...
Кланы в Wargaming. От странички на танковом портале до  мультиплатфермнного с...Кланы в Wargaming. От странички на танковом портале до  мультиплатфермнного с...
Кланы в Wargaming. От странички на танковом портале до мультиплатфермнного с...
Levon Avakyan
 
Оперирование высоко нагруженными проектами. Или "Клановые войны" каждый день
Оперирование высоко нагруженными проектами. Или "Клановые войны" каждый деньОперирование высоко нагруженными проектами. Или "Клановые войны" каждый день
Оперирование высоко нагруженными проектами. Или "Клановые войны" каждый день
Levon Avakyan
 

More from Levon Avakyan (9)

Надежность World of Tanks Server
Надежность World of Tanks ServerНадежность World of Tanks Server
Надежность World of Tanks Server
 
Grpahite&amp;grafana
Grpahite&amp;grafanaGrpahite&amp;grafana
Grpahite&amp;grafana
 
World of Tanks Experience of Using Kafka
World of Tanks Experience of Using KafkaWorld of Tanks Experience of Using Kafka
World of Tanks Experience of Using Kafka
 
SRE vs DevOps
SRE vs DevOpsSRE vs DevOps
SRE vs DevOps
 
Wargaming Clan Platform
Wargaming Clan PlatformWargaming Clan Platform
Wargaming Clan Platform
 
Архитектура мета игры Wargaming. Глобальная карта 2.0.
Архитектура мета игры Wargaming. Глобальная карта 2.0.Архитектура мета игры Wargaming. Глобальная карта 2.0.
Архитектура мета игры Wargaming. Глобальная карта 2.0.
 
Осознанный выбор. Python 3 для реализации сервисного шлюза клиента World of T...
Осознанный выбор. Python 3 для реализации сервисного шлюза клиента World of T...Осознанный выбор. Python 3 для реализации сервисного шлюза клиента World of T...
Осознанный выбор. Python 3 для реализации сервисного шлюза клиента World of T...
 
Кланы в Wargaming. От странички на танковом портале до мультиплатфермнного с...
Кланы в Wargaming. От странички на танковом портале до  мультиплатфермнного с...Кланы в Wargaming. От странички на танковом портале до  мультиплатфермнного с...
Кланы в Wargaming. От странички на танковом портале до мультиплатфермнного с...
 
Оперирование высоко нагруженными проектами. Или "Клановые войны" каждый день
Оперирование высоко нагруженными проектами. Или "Клановые войны" каждый деньОперирование высоко нагруженными проектами. Или "Клановые войны" каждый день
Оперирование высоко нагруженными проектами. Или "Клановые войны" каждый день
 

Реляционные базы данных

  • 1. Реляционные базы данных Левон Авакян/ WoT Server/ l_avakyan@wargaming.net Или как работать с данными 1
  • 3. Оглавление 3 • Реляционные базы данных • Представление данных • Реляционная алгебра • Проектирование реляционных баз данных • Язык запросов SQL • Внутри СУБД • Современные СУБД
  • 5. Реляционные базы данных 5 • Широко распространены • Очень простая концепция • Существует высокоуровневые языки, которые легко позволяют оперировать данными
  • 6. Модель 6 • База данных множество именованных отношений (таблиц) • Атрибуты ( колонки), которые описывают отношения • Кортежи ( строки) – конкретные значения атрибутов • Каждый атрибут имеет тип (атомарный или структурный). Так же существует тип NULL • Схема формальное описание базы данных • Ключ – атрибут или несколько атрибутов (составной ключ) делающим кортеж уникальным Что такое реляционная база данных
  • 8. Запросы 8 • Clan(cName,server,count) • Player(pID,pName,rating,bCount) • Apply(pID,cName,role,decision) Пример cName server count pID pName rating bCount pID cName role desc PlayerClan Apply
  • 9. Запросы 9 Вывести всех игроков у которых рейтинг больше 50 и который подались в клан WG • Реляционная алгебра – формальный язык (𝜋𝐼𝐷 𝜎 𝑟𝑎𝑡𝑖𝑛𝑔>50⋏𝑐𝑁𝑎𝑚𝑒=′ 𝑊𝐺′(𝑃𝑙𝑎𝑦𝑒𝑟 ⋈ Apply)) • SQL – фактический язык, в основе которого лежит реляционная алгебра (Select Player.pID From Player, Apply Where Player.pID=Apply.pID and rating>50 and cName=‘WG’) Пример cName server count pID pName rating bCount pID cName role desc PlayerClan Apply
  • 11. XML 11 Сравнение с реляционными БД Реляционное представление XML Структура Таблицы Иерархическое дерево Схема Зафиксированная Гибкая Запросы Достаточно простые Есть проблемы Порядок данных Нет Подразумевается Имплементация Поддерживается в СУБД Есть варианты
  • 12. JSON 12 Сравнение с реляционными БД Реляционное представление JSON Структура Таблицы Вложенное множество массивов Схема Зафиксированная Гибкая Запросы Достаточно простые Есть проблемы Порядок данных Нет Массивы Имплементация Поддерживается в СУБД Есть встроенные в СУБД
  • 14. Операторы 14 Основные: • R – relation • 𝜎𝑐𝑜𝑛𝑑(𝐸) – выбор кортежей (select) • 𝜋 𝐴1,…,𝐴𝑛 𝐸 - выбор атрибутов (project) • (E1) × (E2) – кросс продукт • E1 ∪ E2 - объединение • E1 − E2 - разность • PR(A1,…,An)(E) - переименование Производные: • E1 ⋈ E2 natural join • E1 ⋈ 𝜃E2 условный (тета) join • E1 ∩ E2 пересечение
  • 15. Примеры 15 Вывести имена и рейтинг игроков у которых больше 1000 боев и который подались на роль командира взвода и были отклонены 𝜋 𝑝𝑁𝑎𝑚𝑒,𝑟𝑎𝑡𝑖𝑛𝑔 𝜎 𝐴𝑝𝑝𝑙𝑦.𝑝𝐼𝐷=𝑃𝑙𝑎𝑦𝑒𝑟.𝑝𝐼𝐷⋏𝑏𝐶𝑜𝑢𝑛𝑡>1000⋏𝑟𝑜𝑙𝑒=′ 𝑐𝑜𝑚𝑚𝑎𝑛𝑑𝑒𝑟′⋏𝑑𝑒𝑠𝑐=′ 𝑟′ (𝑃𝑙𝑎𝑦𝑒𝑟 × Apply) Вывести имена и рейтинг игроков у которых больше 1000 боев и который подались на роль командира взвода в кланы с более чем 50 игроками и были отклонены 𝜋 𝑝𝑁𝑎𝑚𝑒,𝑟𝑎𝑡𝑖𝑛𝑔 𝜎 𝑏𝐶𝑜𝑢𝑛𝑡>1000⋏𝑟𝑜𝑙𝑒=′ 𝑐𝑜𝑚𝑚𝑎𝑛𝑑𝑒𝑟′⋏𝑑𝑒𝑠𝑐=′ 𝑟′⋏𝑐𝑜𝑢𝑛𝑡>50 (𝑃𝑙𝑎𝑦𝑒𝑟 ⋈(Apply ⋈ 𝐶𝑙𝑎𝑛 )) cName server count pID pName rating bCount pID cName role desc PlayerClan Apply
  • 18. Проблема 18 • ID и имя • Клан в который подается заявка • Любимая техника включая нацию • Язык Apply(pID,pName,cName,vehicle,nation,lang) Пример заявки в клан pID pName cName vehicle nation lang 1 Alex WG Maus Ger RU 1 Alex WG Maus Ger BY 1 Alex Korn Maus Ger RU … … … … … …
  • 19. Аномалии 19 • Избыточность • Аномалии-модификации проявляются в том, что изменение одних данных может повлечь просмотр всей таблицы и соответствующее изменение некоторых записей таблицы. Аномалии-удаления — при удалении какого либо кортежа из таблицы может пропасть информация, которая не связана на прямую с удаляемой записью. Аномалии-добавления возникают, когда информацию в таблицу нельзя поместить, пока она не полная, либо вставка записи требует дополнительного просмотра таблицы. Пример заявки в клан
  • 20. Нормальные формы 20 Нормальная форма — требование, предъявляемое к структуре таблиц в теории реляционных баз данных для устранения из базы избыточных функциональных зависимостей между атрибутами Метод нормальных форм (НФ) состоит в сборе информации о объектах решения задачи в рамках одного отношения и последующей декомпозиции этого отношения на несколько взаимосвязанных отношений на основе процедур нормализации отношений. Цель нормализации: исключить избыточное дублирование данных, которое является причиной аномалий, возникших при добавлении, редактировании и удалении кортежей(строк таблицы). Шесть Нормальных форм и Нормальная форма Бойса-Кодда (НФБК)
  • 21. Дизайн основаны на декомпозиции 21 • «Мега» отношения + свойства данных • Проводим декомпозицию основываясь на свойствах данных • Окончательное множество отношений удовлетворяет нормальным формам • Отсутствуют аномалии • Функциональные зависимости - Нормальная форма Бойса-Кодда (НФБК) • Многозначная зависимость - 4НФ
  • 22. Декомпозиция 22 𝑅 𝐴 𝑅1 𝐵 𝑅2 𝐶 Немного вспомним реляционную алгебру 𝐵 ∪ 𝐶 = 𝐴 𝑅1 ⋈ 𝑅2 = 𝑅 𝑅1 = 𝜋 𝐵 𝑅 𝑅2 = 𝜋 𝐶(𝑅)
  • 23. Функциональная зависимость 23 • Функциональная зависимость (𝐴 → 𝐵) • Вводятся основываясь на знаниях о мире • Позволяет архивировать данные • Оптимизация запросов ∀𝑡, 𝑢 ∈ 𝑅: 𝑡 𝐴 = 𝑢 𝐴 ⟹ 𝑡 𝐵 = 𝑢[𝐵] Нормальная форма Бойса-Кодда: 𝐴 → 𝐵 , 𝐴 - ключ 𝐴 → 𝐵
  • 24. Многозначная зависимость 24 𝐴 ↠ 𝐵 ∀𝑡, 𝑢 ∈ 𝑅: 𝑡 𝐴 = 𝑢 𝐴 𝑡ℎ𝑒𝑛 ∃𝑣 ∈ 𝑅: 𝑣 𝐴 = 𝑡 𝐴 ∧ 𝑣 𝐵 = 𝑡 𝐵 ∧ 𝑣 𝑟𝑒𝑠𝑡 = 𝑢 𝑟𝑒𝑠𝑡 Четвертая нормальная форма 𝐴 ↠ 𝐵, 𝐴 − ключ 𝐴 ↠ 𝐵
  • 25. Пробуем декомпозировать 25 Player (pID,pName) Apply(pID,cName) Vehicle(pID,vehicle) Nation(vehicle,nation) Language(pID,lang) Пример заявки в клан Apply(pID,pName,cName,vehicle,nation,lang) Player (pID,pName) Apply(pID,cName,lang) Vehicle(pID,vehicle,nation)
  • 27. Обзор 27 • SQL – Sequence query language • Поддерживается все крупными реляционными базами данных • Стандартизован • Декларативный, основывается на реляционной алгебре Additional information
  • 28. Обзор 28 • DDL (Data Definition Language) • Create table • Alter table • Drop table • DML (Data Management Language) • Select • Update • Insert • Delete • Другие: triggers, indexes, views, transactions, authorization, etc Additional information
  • 29. Обзор 29 Select A1,…, An from R1,…, Rm where condition 𝜋 𝐴1 ,…,𝐴𝑛(𝜎 𝑐𝑜𝑛𝑑𝑖𝑡𝑖𝑜𝑛(𝑅1 × ⋯ × 𝑅 𝑚)) Структура запроса
  • 31. Агрегирующие функции 31 • MIN • MAX • SUM • AVG • COUNT GROUP BY – позволяет определить подмножество атрибутов на котором будет выполняется агрегирующая функция HAVING – определяет условие для удаления агрегированных значений Additional information
  • 33. Индексы 33 • Структура данных, которая строится по атрибуту или атрибутам для убыстрения индекса • Основные виды: • BTREE (Balance Tree) – хорошо для <,>,= • Hash – хорошо для = • В общем случае существует много видов • Минусы: • Занимают дополнительное место • При изменении данных перестраиваются - занимает время • Может потребоваться длительное время на построение Additional information
  • 34. Работа с индексами 34 • Вход: база данных (статистика) и профиль нагрузки • Выход: рекомендуемые индексы • Команда EXPLAIN – выводит план исполнения с примерной стоймостью выполнения некоторого шага. Additional information
  • 35. Транзакции 35 • Несогласованность на уровне атрибутов • Update Clan Set ccount = ccount + 1 Where cName = ‘WG’ • Update Clan Set ccount = ccount + 2 Where cName = ‘WG’ • Несогласованность на уровне кортежей • Update Apply Set role = ‘commander’ Where pID = 123 • Update Apply Set decision = ‘Y’ Where pID = 123 • Несогласованность на уровне таблиц • Update Apply Set decision = ‘Y’ Where pID In (Select pID From Player Where rating > 50) • Update Player Set rating = (1.1) * rating Where bcount > 2500 • Несогласованность нескольких выражений • Insert Into Archive Select * From Apply Where decision = ‘N’; • Delete From Apply Where decision = ‘N’; • Select Count(*) From Apply; • Select Count(*) From Archive; Конкурентность
  • 36. Транзакции 36 Сценарии: Загружаем большой объем данных – что-то пошло не так, часть данных в БД, часть нет Выполняем последовательно операции с БД, отказ произошел между операциями – целостность нарушена Устойчивость к отказам
  • 37. Транзакции 37 Транзакция - группа последовательных операций с БД, которая представляет собой логическую единицу работы с данными. Транзакция может быть выполнена либо целиком и успешно, соблюдая целостность данных и независимо от параллельно идущих других транзакций, либо не выполнена вообще, и тогда она не должна произвести никакого эффекта. Atomic Consistency Isolation Durability Упорядочиваемость – гарантируется, что поток транзакций, будет преобразован в последовательность и так будет выполнен.
  • 38. Транзакции 38 Уровень изоляции транзакции применяется только к одной транзакции. . Уровни изоляции транзакций Уровень изоляции Проблема Dirty read Nonreptable reads phantoms Read uncommited y y y Read commited n y y Repeatable read n n y Serializable n n n
  • 39. Представления 39 • Скрывают некоторые данные от некоторых пользователей • Делают некоторые запросы проще, более естественными • Обеспечивают гранулярность доступа к БД • View V = ViewQuery(R1 , R2 , …, Rn ) • Схема V это схема результирующего запроса • Запрос Q задействует V • По настоящему, Q преобразуется, чтобы использовать R1 ,…,Rn вместо V • Материализованные представления – это представления, которые создают копию данных на диске. . View
  • 40. Ограничения и триггеры 40 Накладывать ограничения на допустимые данные, помимо навязанные структурой и типами • Зачем используются: • Проверяют корректность ввода • Поверяют корректность изменения • Для соблюдения целостности • Говорят системе о данных – как хранить, обрабатывать • Какие бывают: • NULL • Key • Ссылочные • Основанные на атрибутах • Основанные на кортежах • Общие утверждения Integrity Constraints
  • 41. Ограничения и триггеры 41 Триггер — хранимая особого типа, которую пользователь не вызывает непосредственно, а исполнение которой обусловлено действием по модификации данных: добавлением INSERT, удалением DELETE строки в заданной таблице, или изменением UPDATE данных в определённом столбце заданной таблицы БД. Триггеры применяются для обеспечения целостности данных и реализации сложной бизнес логики. Триггеры
  • 43. MySQL 43 MySQL имеет два слоя – внешний слой sql и внутренний набор движков, из которых наиболее часто используется движок InnoDb, как наиболее полно поддерживающий ACID. Поддерживаются такие основные движки MyISAM, InnoDB, MEMORY, Berkeley DB. Они отличаются между собой способом записи данных на диск, а также методами считывания.
  • 44. Postgres 44 PostgreSQL – поедставляет из себя объектно реляционную базу данных, которая работает только на одном движке — storage engine. Все таблицы представлены в виде объектов, они могут наследоваться, а все действия с таблицами выполняются с помощью объективно ориентированных функций. Как и в MySQL все данные хранятся на диске, в специально отсортированных файлах, но структура этих файлов и записей в них очень сильно отличается. Для каждого клиента на сервере создается новый процесс (не поток !). Для работы с такими клиентскими процессами сервер использует семафоры.
  • 45. Postgres vs MySQL 45 Postgres MySQL Производительность В общем случае производительнее, множество настроек Зависит от конкретных данных и движка Типы данных Возможность создавать свои типы Только типы определенные в БД Разработка Открытый код, большое community Принадлежит Oracle, есть fork MariaDB, Percona Стандарт SQL Более полно поддерживает стандарт Идут по пути упрощения Возможности обработки Поддерживает курсор на клиенте Наследование таблиц Различные индексы Загружает весь ответ в память клиента

Editor's Notes

  1. Машина Беббиджа. Адда Лавлейс вычисление числе Бернулли.
  2. Машина Беббиджа. Адда Лавлейс вычисление числе Бернулли.
  3. Машина Беббиджа. Адда Лавлейс вычисление числе Бернулли.
  4. Машина Беббиджа. Адда Лавлейс вычисление числе Бернулли.