63
СУБД Лекция 10 Станислав Ступников

СУБД осень 2012 лекция 11

Embed Size (px)

Citation preview

Page 1: СУБД осень 2012 лекция 11

СУБДЛекция 10

Станислав Ступников

Page 2: СУБД осень 2012 лекция 11

2

Page 3: СУБД осень 2012 лекция 11

3

Page 4: СУБД осень 2012 лекция 11

4

Page 5: СУБД осень 2012 лекция 11

А что там с РСУБД?

20 лет успешного существования на рынке!

• Персистентное хранение данных

• Конкурентный доступ

• Shared database integration

• Стандартная (практически) модель

Почему NoSQL?

5

Page 6: СУБД осень 2012 лекция 11

Impedance Mismatch

Почему NoSQL?

6

Page 7: СУБД осень 2012 лекция 11

Приложение

БД

Почему NoSQL?

7

80ые: Мейнфреймы

Page 8: СУБД осень 2012 лекция 11

90ые: Shared database

БД

ПриложениеПриложение Приложение

Почему NoSQL?

8

Page 9: СУБД осень 2012 лекция 11

2000ые: Web applications

БД

ПриложениеПриложениеПриложение

БД БД

Почему NoSQL?

9

Page 10: СУБД осень 2012 лекция 11

Данных стало больше

Почему NoSQL?

10

Page 11: СУБД осень 2012 лекция 11

Данные стали сложнее

Почему NoSQL?

11

Page 12: СУБД осень 2012 лекция 11

Attack of the Clusters

Почему NoSQL?

12

Page 13: СУБД осень 2012 лекция 11

Производительность РСУБД

Почему NoSQL?

13

Page 14: СУБД осень 2012 лекция 11

NoSQL Rising

14

Page 15: СУБД осень 2012 лекция 11

Общие характеристика NoSQL БД:• Не используют реляционную модель

• Хорошо подходят для развертывания на кластере

• Open-source

• Schemaless

NoSQL

15

Page 16: СУБД осень 2012 лекция 11

Aggregate orientation

NoSQL

16

Page 17: СУБД осень 2012 лекция 11

Aggregate orientation

NoSQL

17

Page 18: СУБД осень 2012 лекция 11

Aggregate orientation

NoSQL

18

Page 19: СУБД осень 2012 лекция 11

Aggregate orientation

NoSQL

19

Page 20: СУБД осень 2012 лекция 11

20

Page 21: СУБД осень 2012 лекция 11

NoSQL

21

Page 22: СУБД осень 2012 лекция 11

Key-Value Store

• навеяны Dynamo DB от Amazon

• модель данных: множество пар ключ-значение

• для БД содержание значение непрозрачно (просто какой-то BLOB)

Примеры:• Voldemort

• Redis

• Riak

Виды NoSQL БД

22

Page 23: СУБД осень 2012 лекция 11

Document-oriented store

• навеяны Lotus Notes от IBM

• модель данных: множество множеств ключ-значение

• для БД содержание значение прозрачно

Примеры:• CouchDB

• MongoDB

Виды NoSQL БД

23

Page 24: СУБД осень 2012 лекция 11

Column-oriented store

• навеяны BigTable от Google

• похожи на column-oriented реляционные БД, но с особенностями

• модель данных: ключ строки –> семейство колонок –> колонка –> значение

Примеры:• HBase

• Cassandra

• Hypertable

Виды NoSQL БД

24

Page 25: СУБД осень 2012 лекция 11

Column-oriented store

Виды NoSQL БД

25

Page 26: СУБД осень 2012 лекция 11

Graph database

• навеяны теорией графов G=(V, E) от математиков 18го века

• хорошо моделируют сложные данные

• модель данных: узлы, ребра и их атрибуты

Примеры:• Neo4j

• AllegroGraph

Виды NoSQL БД

26

Page 27: СУБД осень 2012 лекция 11

Теоретические основы NoSQL

27

CAP Theorem

Page 28: СУБД осень 2012 лекция 11

CAP Theorem

Теоретические основы NoSQL

28

Page 29: СУБД осень 2012 лекция 11

MapReduce

• MapReduce: Simplified Data Processing on Large Clusters. Jeffrey Dean and Sanjay Ghemawat

• Вычисления простые, но данных очень много• Не надо связывать самому с распределенными вычислениями• Просто определить две функции:

• map (k1, v1) → k2,v2• reduce (k2, list(v2)) → v3

• За распределение данных, обработку отказов, планирование и запуск параллельных задач отвечает сам фреймворк

Теоретические основы NoSQL

29

Page 30: СУБД осень 2012 лекция 11

MapReduce

Теоретические основы NoSQL

30

Page 31: СУБД осень 2012 лекция 11

MapReduce

Теоретические основы NoSQL

31

Page 32: СУБД осень 2012 лекция 11

Anti-Entropy Protocols, Gossips

• Поддержание консистентности (eventual consistency) и синхронизация состояния кластера• проблему можно решить за счет глобального

координатора

• Каждый узел по расписанию выбирает другой случайный узел и обменивается информацией• тут возможно 3 стратегии

Теоретические основы NoSQL

32

Page 33: СУБД осень 2012 лекция 11

Anti-Entropy Protocols, Gossips

Теоретические основы NoSQL

33

Page 34: СУБД осень 2012 лекция 11

Сonsistency

• Read-Write consistency ― минимизировать время сходимости реплик

• Read-after-write consistency

• Read-after-read consistency

• Write-Write consistency ― обработка конкурентной записи

• Atomic Writes ― пишем «самое новое» значение (Cassandra)

• Atomic Read-modify-write• Conflict prevention ― distributed locking или

консенсус-протоколы, как PAXOS (РСУБД, HBase, MongoDB)

• Conflict detection ― в случае конфликта откатываемся или храним историю, пока не разрешим (Riak, Voldemort, CouchDB)

Теоретические основы NoSQL

34

Page 35: СУБД осень 2012 лекция 11

Сonsistency

Теоретические основы NoSQL

35

Page 36: СУБД осень 2012 лекция 11

• vector clock ― список пар (узел, счетчик)

• Один вектор на каждую версию каждого объекта

• Конфликт улаживает клиент

Теоретические основы NoSQL

36

Eventual Сonsistency

Page 37: СУБД осень 2012 лекция 11

Rebalancing

• Устойчивая к отлючениям электричества миграция (напр., расширение кластера)

• MongoDB и Redis Cluster

Теоретические основы NoSQL

37

Page 38: СУБД осень 2012 лекция 11

• NodeID = hash(key) % TotalNodes - плохая идея, если вы планируете добавлять и убирать узлы

• Consistent hashing ― хорошая идея

Теоретические основы NoSQL

38

Partitioning and replication

Page 39: СУБД осень 2012 лекция 11

• Автоматическая адаптация ― tradeoff между временем опредления отказа и вероятностью ложной тревоги

• Гибкость ― не только «жив», «мертв» (разные состояния, как в MapReduce)

• Масштабируемость• Phi Accrual Failure Detector -

Cassandra

Теоретические основы NoSQL

39

Failure Detection

Page 40: СУБД осень 2012 лекция 11

• Выбор лидера среди реплик

• Bully algorithm

• MongoDB 

Теоретические основы NoSQL

40

Coordinator Election

Page 41: СУБД осень 2012 лекция 11

• 3 config сервера – узкое место при шардинге

• MapReduce – однопоточный, read\write locks, на JS O_o

• Молодой продукт, в нем встречаются баги (бывает Segmentation fault, core dumped, socket exception 9001 (?!) ) – используйте 2.2 и выше

• По-умолчанию максимальный размер объекта — 4 мегабайта.

• На 32-битных машинах, максимальный размер одной базы данных — 2 гигабайта

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

41

Page 42: СУБД осень 2012 лекция 11

• Все должно помещаться в RAM (есть VirtualMemory, но все ключи все равно в RAM!). Количетсво требуемой памяти пропорционально размеру dataset’у

• Персистентность либо снепшотная, либо append-only с помощью fsync. Требуется очень много I/O ресурсов.

• Операция сохранения требует доп. памяти (до 2х максимум) для успешного завершения, иногда асинхронные сохранения могут заблокировать сервер на время

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

42

Page 43: СУБД осень 2012 лекция 11

• Архитектура подразумевает tradeoff памяти на скорость. Для определенных нагрузок в разы может отличаться количество байт переданное на хранение и количество памяти, используемое Redis

• Поиск только по ключам

• Один инстанс не масштабируем (одно ядро, один поток). Нужно запускать несколько и на стороне приложения заниматься шардингом и балансировкой

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

43

Page 44: СУБД осень 2012 лекция 11

• Все на одной машине

• Бесплатно: GPLv3 AGPL

• Коммерческое использование: 6-24k $ в год

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

44

Page 45: СУБД осень 2012 лекция 11

• Особенности консистентности

• Нет индексов

• Нет аd-hoc querying (создаете БД под запросы)

• Может быть высокая read/write latency на больших нагрузках за счет Java Garbage Collection

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

45

Page 46: СУБД осень 2012 лекция 11

Масштабируемость

• HBase, Hypertable ― много данных, не нужны произвольные запросы и транзакции

• Cassandra, Riak ― при высокой нагрузке на запись и если подходит слабая консистентность

• MongoDB, Redis ― «быстрые» данные (клики, биржа)

Сравнение NoSQL решений

46

Page 47: СУБД осень 2012 лекция 11

Транзакционность

• Может лучше РСУБД?

• HBase, Hypertable ― атомарность на уровне строк, консистентность за счет Paxos

• Cassandra, Riak ― слабоконсистентны

• MongoDB, Redis ― атомарность на уровне документа\записи

Сравнение NoSQL решений

47

Page 48: СУБД осень 2012 лекция 11

YCSB. 50/50 Read and Update

Сравнение NoSQL решений

48

Page 49: СУБД осень 2012 лекция 11

YCSB. 95/5 Read and Update

Сравнение NoSQL решений

49

Page 50: СУБД осень 2012 лекция 11

Сравнение NoSQL решений

50

YCSB. Short scans

Page 51: СУБД осень 2012 лекция 11

Сравнение NoSQL решений

51

YCSB. Read performance as cluster size increases

Page 52: СУБД осень 2012 лекция 11

Tarantool ― расширяемая, транзакционная высокопроизводительная СУБД для хранения наиболее запрашиваемых и часто меняющихся данных.

52

Page 53: СУБД осень 2012 лекция 11

• Индексы: простые, составные, уникальные, неуникальные

• Операции: INSERT/UPDATE/SELEC/REPLACE/DELETE

• Поддерживает простой SQL53

Page 54: СУБД осень 2012 лекция 11

Обзор архитектуры и особенности

• Все данные в RAM

• + на диске за счет write-ahead log (WAL)

• WAL растет → делаем снепшоты c copy-on-write

• lock-free - кооперативная многозадачность (coroutines, fibers). Типичная нагрузка на ЦПУ < 10%

• Асинхронная репликация

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

• Фоновые процедуры

54

Page 55: СУБД осень 2012 лекция 11

Use case

55

Page 56: СУБД осень 2012 лекция 11

Use case

56

Page 57: СУБД осень 2012 лекция 11

Use case

57

Page 58: СУБД осень 2012 лекция 11

58

Page 59: СУБД осень 2012 лекция 11

One database to rule them all

59

Page 60: СУБД осень 2012 лекция 11

Silver Bullet

60

Page 61: СУБД осень 2012 лекция 11

No Silver Bullet

61

Page 62: СУБД осень 2012 лекция 11

62

Для каждого типа данных следует использовать хранилище наиболее для него подходящее

Page 63: СУБД осень 2012 лекция 11

Спасибо за вниманиеСтанислав Ступников

[email protected]