96

Фёдор Строк - Базы данных - SQL, ORM, NoSQL

  • Upload
    yandex

  • View
    857

  • Download
    8

Embed Size (px)

Citation preview

Page 1: Фёдор Строк - Базы данных - SQL, ORM, NoSQL
Page 2: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Федор Строк

Базы данных: SQL, ORM, NoSQL

Page 3: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

3

План

1.Основные определения

2.Коротко о проектировании

3.SQL: основные конструкции

4.ORM

5.NoSQL

Page 4: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Определения

База данных

Система управления базами данных

Банк данных

Page 5: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Основные определения

Page 6: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Основные определения

База данных - это набор структурированной информации,

предназначенный для совместного использования несколькими

пользователями одновременно. Отдельные элементы данных в базе

данных связаны между собой логическими связями, взаимозависимы

Page 7: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Основные определения

База данных - это набор структурированной информации,

предназначенный для совместного использования несколькими

пользователями одновременно. Отдельные элементы данных в базе

данных связаны между собой логическими связями, взаимозависимы

Система управления базами данных (СУБД) — совокупность

программных и лингвистических средств общего или специального

назначения, обеспечивающих управление созданием и

использованием баз данных

Page 8: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Основные определения

База данных - это набор структурированной информации,

предназначенный для совместного использования несколькими

пользователями одновременно. Отдельные элементы данных в базе

данных связаны между собой логическими связями, взаимозависимы

Система управления базами данных (СУБД) — совокупность

программных и лингвистических средств общего или специального

назначения, обеспечивающих управление созданием и

использованием баз данных

Банк Данных - совокупность одной или нескольких баз данных и средств

управления (манипулирования) данными

Page 9: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Простыми словам

База данных - это набор информации, которую вы храните.

Система управления базами данных (СУБД) — это программа, которая

предоставляет доступ внешним приложениям к базе данных,

обеспечивает ее работу.

Page 10: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

История БД

Page 11: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Теория баз данных

1.Молодая дисциплина ~30 лет

2.К 2020 году 40 зеттабайт (1021) (424

авианосца дисков Blue-ray)

Page 12: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Области вычислительной техники

1.Выполнение численных расчетов

2.Автоматические или автоматизированные

информационные системы – Хранение информации

– Бизнес-логика

– Интерфейс

– Появилась позже (медленные устройства хранения)

Page 13: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Нулевой этап

1.Шумерские глиняные

таблицы

Page 14: Фёдор Строк - Базы данных - SQL, ORM, NoSQL
Page 15: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Файловые системы

1.persistence – возможность сохранить

состояние программы между запусками

2.hosts – текстовый файл, хранящий БД

доменных имен. Имеет приоритет над DNS,

контролируется администратором

компьютера

3.127.0.0.1 localhost

81.176.66.163 lib.ru

81.176.66.163 www.lib.ru

69.16.226.196 www.qsl.net

Page 16: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Файловые системы

1.Избыточность данных

2.Несогласованность данных

3.Зависимость структур данных и

прикладных программ

4.Зависимость программ от данных – точно знать структуру записи файла с точностью до бита

5.Отсутствие централизованного управления

доступом

6.Многопользовательский режим

Page 17: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

БД на больших ЭВМ

1.1968 - первая промышленная СУБД

система Information Management System

фирмы IBM – иерархическая (бд, сегмент,

поле)

2.Основные принципы: – Централизованная БД в режиме распределенного доступа

(управление доступом)

– ОС отвечает за распределение ресурсов

– Языки низкого уровня для манипулирования

– Много администрирования

– Обоснование и формализация реляционной модели (избыточность

данных)

– Понятие транзакции

– Первые языки высокого уровня для реляционной модели

(зависимость от данных в программах)

Page 18: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Эпоха ПК

1.Монопольный доступ

2.Развитый и удобный интерфейс

3.Поддержка и SQL, и низкоуровневого

манипулирования

4.Нет ссылочной и структурной целостности

5.Скромные требования к железу

Page 19: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Распределенные БД

1.Поддержка структурной целостности

2.Языковая целостность SQL

3.Ссылочная целостность

4.Поддержка многоплатформенной

архитектуры

5.Многопользовательская работа

6.Стандарты в SQL

7.Появление объектно-ориентированных БД

Page 20: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Проектирование БД

Page 21: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Основные этапы проектирования

Page 22: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Основные этапы проектирования

1.Системный анализ и словесное описание

предметной области

Page 23: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Основные этапы проектирования

1.Системный анализ и словесное описание

предметной области

2.Инфологическое моделирование

Page 24: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Основные этапы проектирования

1.Системный анализ и словесное описание

предметной области

2.Инфологическое моделирование

3.Даталогическое моделирование

Page 25: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Основные этапы проектирования

1.Системный анализ и словесное описание

предметной области

2.Инфологическое моделирование

3.Даталогическое моделирование

4.Физическое проектирование

Page 26: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Системный анализ

Page 27: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Системный анализ

1.Выделить объекты и связи между ними

Page 28: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Системный анализ

1.Выделить объекты и связи между ними

2.Два подхода: – Предметный подход

• Наиболее характерные и существенные объекты

• Возможна избыточная сложность

– Функциональный подход

• От задачи

• Легко выделить минимальный набор обязательных объектов

Page 29: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Системный анализ

1.Выделить объекты и связи между ними

2.Два подхода: – Предметный подход

• Наиболее характерные и существенные объекты

• Возможна избыточная сложность

– Функциональный подход

• От задачи

• Легко выделить минимальный набор обязательных объектов

3.На практике – компромиссные варианты

Page 30: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Системный анализ

1.Выделить объекты и связи между ними

2.Два подхода: – Предметный подход

• Наиболее характерные и существенные объекты

• Возможна избыточная сложность

– Функциональный подход

• От задачи

• Легко выделить минимальный набор обязательных объектов

3.На практике – компромиссные варианты

4.На выходе подробное описание:

входные/выходные документы, задачи,

алгоритмы

Page 31: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Инфологическая модель

1.Модель сущность-связь

2.Нотация Чена

3.Нотация Crow’s foot

Page 32: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Нотация Чена

Page 33: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Crow’s foot

Page 34: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Пример

1.БД для школы

Page 35: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Пример

Page 36: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Даталогическое моделирование

1.Разработка схемы БД

2.Правила целостности

3.Схема БД на основе реляционности

Page 37: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Реляционность

1.Данные в бд – набор отношений

2.Отношения отвечают условиям

целостности

3.Поддержка операторов манипулирования

(реляционная алгебра)

Page 38: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Нормальные Формы

1.1NF

2.2NF

3.3NF

4.BCNF

5.4NF

6.5NF

7.DKNF

8.6NF

Page 39: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

1NF

Переменная отношения находится в первой нормальной форме тогда и

только тогда, когда в любом допустимом значении отношения каждый его

кортеж содержит только одно значение для каждого из атрибутов.

login E-mail

fdrstrok [email protected] [email protected]

vasya [email protected]

login E-mail

fdrstrok [email protected]

fdrstrok [email protected]

vasya [email protected]

Page 40: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

2NF

Переменная отношения находится во второй нормальной форме тогда и

только тогда, когда она находится в первой нормальной форме и каждый

неключевой атрибут неприводимо зависит от её потенциального ключа

Сотрудник Должность Зарплата Наличие компьютера

Гришин Кладовщик 20000 Нет

Васильев Программист 40000 Есть

Иванов Кладовщик 25000 Нет

Сотрудник Должность Зарплата

Гришин Кладовщик 20000

Васильев Программист 40000

Иванов Кладовщик 25000

Должность Наличие компьютера

Кладовщик Нет

Программист Есть

Page 41: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

3NF

Переменная отношения R находится в 3NF тогда и только тогда, когда

выполняются следующие условия:

- R находится во второй нормальной форме.

- ни один неключевой атрибут R не находится в транзитивной

функциональной зависимости от потенциального ключа R.

Tournament Year Winner Winner Date of Birth

Indiana Invitational 1998 Al Fredrickson 21 July 1975

Cleveland Open 1999 Bob Albertson 28 September 1968

Des Moines Masters 1999 Al Fredrickson 21 July 1975

Indiana Invitational 1999 Chip Masterson 14 March 1977

Tournament Year Winner

Indiana Invitational 1998 Al Fredrickson

Cleveland Open 1999 Bob Albertson

Des Moines Masters 1999 Al Fredrickson

Indiana Invitational 1999 Chip Masterson

Winner Date of Birth

Chip Masterson 14 March 1977

Al Fredrickson 21 July 1975

Bob Albertson 28 September 1968

Page 42: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

42

Денормализация

Page 43: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

43

Денормализация

1.Операция соединения – долгая

Page 44: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

44

Денормализация

1.Операция соединения – долгая

2.Когда запроса невозможно дальше

ускорять – «закэшировать» результат

соединения на уровне базы

Page 45: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

45

Денормализация

1.Операция соединения – долгая

2.Когда запроса невозможно дальше

ускорять – «закэшировать» результат

соединения на уровне базы

3.Повышает риск нарушения целостности

Page 46: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

46

Денормализация

1.Операция соединения – долгая

2.Когда запроса невозможно дальше

ускорять – «закэшировать» результат

соединения на уровне базы

3.Повышает риск нарушения целостности

4.Рекомендуется для БД, ориентированных

только на чтение

Page 47: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

47

Денормализация

1.Операция соединения – долгая

2.Когда запроса невозможно дальше

ускорять – «закэшировать» результат

соединения на уровне базы

3.Повышает риск нарушения целостности

4.Рекомендуется для БД, ориентированных

только на чтение

5.Можно замедлить другие запросы

Page 48: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

SQL

История

Основные операторы

Трехзначная логика

Page 49: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

49

История SQL

1.1970, IBM, SEQUEL (Structured English

QUEry Language)

2.1986 первый вариант стандарта SQL-86

3.1989 доработки SQL-89

4.1992 значительные изменения

5.1999 регулярные выражения, рекурсивные

запросы, триггеры

6.2003 XML

7.2006 SQL+XQuery

8.2008 устранение неоднозначностей

Page 50: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

50

MySQL vs MSSQL

• Order by – Mysql: есть недокументированная особенность с Null при минусе

перед именем столбца

• Boolean – MySQL: tinyint(1)

– MSSQL: Bit

• Char – MySQL: обрезает пробелы в конце

– MSSQL: обрезает их перед вызовами некоторых функций

• Подробнее, и не только про

MSSQL&MySQL:

http://troels.arvin.dk/db/rdbms/

Page 51: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

51

DDL

Язык описания структуры БД

1.CREATE

2.ALTER

3.DROP

4.GRANT ALL ON *.* TO

'someuser'@'somehost';

Page 52: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

52

DROP,CREATE

DROP TABLE IF EXISTS `class`; CREATE TABLE `class` ( `id` int(11) DEFAULT NULL, `grade` int(11) NOT NULL, `letter` char(1) NOT NULL, `teacher_id` int(11) NOT NULL, UNIQUE KEY `id` (`id`), CONSTRAINT `class_ibfk_1` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`id`)) ON DELETE

CASCADE;

Page 53: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

53

ALTER

ALTER TABLE class ADD COLUMN `head_id` int(11) NOT NULL; ALTER TABLE class MODIFY letter char(2) NOT NULL DEFAULT ‘A’;

Page 54: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

54

DML

Язык управления данными

1.Select

2. Insert

3.Update

4.Delete

Page 55: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

55

INSERT

INSERT INTO class VALUES (1,9,'A',1);

INSERT INTO class(id,grade,letter,teacher_id) VALUES(2,9,'B',2),(3,9,'C',3);

INSERT IGNORE INTO class(id,grade,letter,teacher_id) VALUES(2,9,'B',3),(4,10,'A',3);

INSERT INTO class(id,grade,letter,teacher_id) VALUES(2,9,'B',3) on duplicate key update teacher_id=values(teacher_id);

Page 56: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

56

UPDATE

UPDATE class SET head_id = 0; UPDATE class SET letter='A' WHERE id = 3;

Page 57: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

57

SELECT

SELECT * FROM class; SELECT * FROM section JOIN teacher ON section.teacher_id = teacher.id; SELECT name,count(*) FROM section LEFT JOIN section_pupil ON section_pupil.section=section.id GROUP BY name;

Page 58: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

58

Join

JOIN — оператор языка SQL, который

является реализацией операции соединения

реляционной алгебры

Итоговая схема – сцепление схем

Итоговые кортежи – сцепление строк таблиц

Page 59: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

59

Join

Виды:

- Inner

- Left

- Right

- Full outer

- Cross

Фамилия Группа

Иванов 1

Петров 2

Сидоров 1

Васильев 3

Группа Название

1 171

2 241

4 172

Page 60: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

60

CROSS

Фамилия Группа Группа Название

Иванов 1 1 171

Петров 2 1 171

Сидоров 1 1 171

Васильев 3 1 171

Иванов 1 2 241

Петров 2 2 241

Сидоров 1 2 241

Васильев 3 2 241

Иванов 1 4 172

Петров 2 4 172

Сидоров 1 4 172

Васильев 3 4 172

Page 61: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

61

INNER

Фамилия Группа Группа Название

Иванов 1 1 171

Петров 2 2 241

Сидоров 1 1 171

Page 62: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

62

LEFT

Фамилия Группа Группа Название

Иванов 1 1 171

Петров 2 2 241

Сидоров 1 1 171

Васильев 3 NULL NULL

Page 63: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

63

RIGHT

Фамилия Группа Группа Название

Иванов 1 1 171

Петров 2 2 241

Сидоров 1 1 171

NULL NULL 4 172

Page 64: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

64

FULL OUTER

Фамилия Группа Группа Название

Иванов 1 1 171

Петров 2 2 241

Сидоров 1 1 171

NULL NULL 4 172

Васильев 3 NULL NULL

Page 65: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

65

CCL

Язык управления курсорами

1.Declare

2.Open

3.Fetch

4.Close

Page 66: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

66

DCL

1.Язык работы с правами доступа

2.Grant

3.Revoke

4.GRANT SELECT, INSERT ON mydb.* TO

'someuser'@'somehost';

Page 67: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

67

Хранимые процедуры

1.Операторы уже в БД

2.Оптимизация и компиляция на стороне

сервера

3.Поддерживают модульное

программирование

4.Можно вызывать «снаружи»

5.Быстрее

Page 68: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

68

Триггеры

1.Хранимая процедура особого типа – После insert, delete, update

2.Обеспечение целостности и сложная

бизнес логика

3.Запускается автоматически сервером

4.До или после события

5.Не надо пересылать через сеть

дополнительные команды

Page 69: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

69

Транзакции

1.Пример – перевод средств со счета на счет

2.Требование ACID

3.Атомарность

4.Согласованность – Списываемая сумма = зачисляемой сумме

5.Изолированность

6.Надежность

Page 70: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

70

Транзакции: TCL

1.COMMIT

2.ROLLBACK

3.SAVEPOINT

4.START TRANSACTION

Page 71: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

ORM

Page 72: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Что и зачем?

1.Технология, связывающая БД и ООП

2.По сути: построить по объектам структуру

хранения в БД, чтобы можно было

восстанавливать свойства

3.Хочется не зависеть от «наречия» SQl

Page 73: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

SQLAlchemy

1.Python, SQL, ORM

Page 74: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Необходимые импорты для создания таблиц:

Подготовка

from sqlalchemy import create_engine, ForeignKey

from sqlalchemy import Column, Date, Integer, String

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import relationship, backref

engine = create_engine('sqlite:///mymusic.db', echo=True)

Base = declarative_base()

Page 75: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Музыкант

class Artist(Base):

__tablename__ = "artists"

id = Column(Integer, primary_key=True)

name = Column(String)

def __init__(self, name):

self.name = name

Page 76: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Альбом

class Album(Base):

__tablename__ = "albums"

id = Column(Integer, primary_key=True)

title = Column(String)

release_date = Column(Date)

publisher = Column(String)

media_type = Column(String)

artist_id = Column(Integer, ForeignKey("artists.id"))

artist = relationship("Artist",backref=backref("albums", order_by=id))

def __init__(self, title, release_date, publisher, media_type):

self.title = title

self.release_date = release_date

self.publisher = publisher

self.media_type = media_type

Base.metadata.create_all(engine)

Page 77: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Добавление данных

engine = create_engine('sqlite:///mymusic.db', echo=True)

# create a Session

Session = sessionmaker(bind=engine)

session = Session()

# Create an artist

new_artist = Artist("Newsboys")

new_artist.albums = [

Album("Read All About It", datetime.date(1988,12,01), "Refuge", "CD")

]

session.add(new_artist)

session.commit()

Page 78: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Модификация данных

from table_def import Album, Artist

engine = create_engine('sqlite:///mymusic.db', echo=True)

# create a Session

Session = sessionmaker(bind=engine)

session = Session()

# querying for a record in the Artist table

res = session.query(Artist).filter(Artist.name=="Kutless").first()

print res.name

# changing the name

res.name = "Beach Boys"

session.commit()

Page 79: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Удаление данных

engine = create_engine('sqlite:///mymusic.db', echo=True)

# create a Session

Session = sessionmaker(bind=engine)

session = Session()

res = session.query(Artist).filter(Artist.name=="MXPX").first()

session.delete(res)

session.commit()

Page 80: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Выборка данных

# how to do a SELECT * (i.e. all)

res = session.query(Artist).all()

for artist in res:

print artist.name

# how to SELECT the first result

res = session.query(Artist).filter(Artist.name=="Newsboys").first()

# how to sort the results (ORDER_BY)

res = session.query(Album).order_by(Album.title).all()

for album in res:

print album.title

Page 81: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Django ORM

1.Python, SQL, ORM

2.Чуть более ограничен

3.Нетривиально использовать только ORM

Page 82: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Django ORM (без Django )

#!/usr/bin/python

# -*- coding: utf-8 -*-

from django.conf import settings

settings.configure( DATABASES = {

'default': { 'ENGINE': 'django.db.backends.sqlite3',

'NAME': 'db.sqlite', }

} )

from django.db import models

class Person(models.Model):

nick = models.CharField(max_length=100, unique=True)

email = models.EmailField(max_length=100, unique=True)

def __unicode__(self):

return self.nick

class Meta: app_label = ''

Page 83: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Django ORM (без Django )

def create_table(cls):

from django.db import connection

from django.core.management.color import no_style

sql, references = connection.creation.sql_create_model(cls, no_style())

cursor = connection.cursor()

for q in sql:

try:

cursor.execute(q)

except:

pass

def main():

create_table(Person)

if __name__ == "__main__": main()

Page 84: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

NOSQL

Page 85: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

85

Примеры по типам

1.WideColumn – Hadoop

– Cassandra

2.Document – MongoDB

– CouchDB

3.Key Value/Tuple – Redis

– Elliptics

– memcached

4.Graph Databases – Neo4j

5.Etc.

Page 86: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

86

MongoDB

1.Схема данных заранее может быть

неизвестна

2.Эффективно использует доступную память

3.Простой orm для python

4.Используем

Page 87: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

87

> j = { name: "mongo" }

{ "name" : "mongo" }

> k = { x: 3}

{ "x" : 3 }

> l = {x: 3, y: false}

{ "x" : 3, "y" : false }

> db.testData.insert(j)

> db.testData.insert(k)

> db.testData.insert(l)

> db.testData.find()

{ "_id" : ObjectId("532ef8c23250ec8ece76df6f"), "name" : "mongo" }

{ "_id" : ObjectId("532ef8c73250ec8ece76df70"), "x" : 3 }

{ "_id" : ObjectId("532ef8cb3250ec8ece76df71"), "x" : 3, "y" : false }

> db.testData.find({x: 18})

> db.testData.findOne({x: 3})

{ "_id" : ObjectId("532ef8c73250ec8ece76df70"), "x" : 3 }

> db.testData.find().limit(2)

{ "_id" : ObjectId("532ef8c23250ec8ece76df6f"), "name" : "mongo" }

{ "_id" : ObjectId("532ef8c73250ec8ece76df70"), "x" : 3 }

MongoDB

Page 88: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

88

MapReduce

1.Модель распределенных вычислений

2.Данные шардируются и реплицируются

3.Позволяет обрабатывать Большие данные

4.Данные неоднородные

Page 89: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

89

На Map-шаге происходит предварительная обработка входных данных.

На Reduce-шаге происходит свёртка предварительно обработанных данных.

Главный узел получает ответы от рабочих узлов и на их основе формирует

результат — решение задачи, которая изначально формулировалась.

void map(String name, String document):

for each word w in document:

EmitIntermediate(w, "1");

void reduce(String word, Iterator partialCounts):

int result = 0;

for each v in partialCounts:

result += parseInt(v);

Emit(AsString(result));

Map & Reduce

Page 90: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

90

MapReduce: общие друзья

1.A -> B C D

2.B -> A C D E

3.C -> A B D E

4.D -> A B C E

5.E -> B C D

Page 91: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

91

MapReduce: map

1.A -> B C D – (A B) -> B C D

– (A C) -> B C D

– (A D) -> B C D

2. ...

3.E -> B C D – (B E) -> B C D

– (C E) -> B C D

– (D E) -> B C D

Page 92: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

92

MapReduce: map output

1. (A B) -> (A C D E) (B C D)

2. (A C) -> (A B D E) (B C D)

3. (A D) -> (A B C E) (B C D)

4. (B C) -> (A B D E) (A C D E)

5. (B D) -> (A B C E) (A C D E)

6. (B E) -> (A C D E) (B C D)

7. (C D) -> (A B C E) (A B D E)

8. (C E) -> (A B D E) (B C D)

9. (D E) -> (A B C E) (B C D)

Page 93: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

93

MapReduce: reduce

1.Найти общих в двух списках

2.Reduce((A D) -> (A B C E) (B C D)) => (B C)

Page 94: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

94

MapReduce: reduce output

1. (A B) -> (C D)

2. (A C) -> (B D)

3. (A D) -> (B C)

4. (B C) -> (A D E)

5. (B D) -> (A C E)

6. (B E) -> (C D)

7. (C D) -> (A B E)

8. (C E) -> (B D)

9. (D E) -> (B C)

Page 95: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

95

Внеклассное чтение

1.Проектирование: – К. Дж. Дейт: Введение в системы баз данных

– Д. Кренке. Теория и практика построения баз данных.

2.SQL упражнения: http://sql-ex.ru/ +

http://www.sql-tutorial.ru/

3.Mongo: https://education.mongodb.com/

Page 96: Фёдор Строк - Базы данных - SQL, ORM, NoSQL

Федор Строк

8-915-103-79-28

[email protected]

Вопросы?