SlideShare a Scribd company logo
1 of 61
Download to read offline
Введение. Key-Value.
«Использование баз данных»
Цесько Вадим Александрович
https://incubos.org
@incubos
4 апреля 2018 г.
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 1 / 61
О лекторе
О лекторе
http://kspt.icc.spbstu.ru/people/tsesko/
http://digiteklabs.ru
https://yandex.ru
https://compscicenter.ru/teachers/12/
https://v.ok.ru
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 2 / 61
Опрос
Опрос
Какие реляционные СУБД приходилось использовать?
Что вызывает сложности при использовании реляционных
СУБД?
Каковы ограничения реляционных СУБД?
С какими NoSQL СУБД знакомы?
Что хотели бы узнать про NoSQL?
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 3 / 61
Организация Формат
Формат
По средам с 18:30 до 21:45
3-4 лекции
1-2 семинара
Индивидуальный проект
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 4 / 61
Организация Материалы
Материалы
https:
//polis.mail.ru/curriculum/program/discipline/35/
QCon, Devoxx, Strange Loop, etc.
Ссылки на книги, статьи и блоги
https://github.com/papers-we-love/papers-we-love
http://highscalability.com/start-here/
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 5 / 61
Содержание Цели
Цели
Принципы построения систем хранения (и обработки) данных
Проблемы и варианты их решения
Промышленные примеры реализации принципов
Навыки оценки решений
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 6 / 61
Содержание О чём мы будем говорить
О чём мы будем говорить
Классификации баз данных
Web Scale: Scalability, Availability, CAP
SQL vs NoSQL
Транзакции
Производительность
Примеры баз данных
Проектирование систем хранения и обработки
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 7 / 61
Содержание О чём мы НЕ будем говорить
О чём мы НЕ будем говорить
Реляционная модель данных
Теория нормальных форм
SQL
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 8 / 61
Определения и примеры База данных
База данных
A database
is an organized collection of dataa
.
a
http://en.wikipedia.org/wiki/Database
Телефонная книга
Книжная библиотека
Коллекция фотографий
Товарный чек
Социальная сеть
Файловая система
Географическая карта
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 9 / 61
Определения и примеры Операции над данными
Операции над данными
CRUD
Create, read, update, deletea
.
a
http://en.wikipedia.org/wiki/Create,_read,_update_and_delete
Например
Operation SQL HTTP
Create INSERT POST
Read (Retrieve) SELECT GET
Update (Modify) UPDATE PUT / PATCH
Delete (Destroy) DELETE DELETE
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 10 / 61
Определения и примеры Бумажная телефонная книга
Бумажная телефонная книга
Create
Открыть страницу по первой букве фамилии
Вписать в конец страницы ФИО и телефон
Read
Открыть страницу по первой букве фамилии
Просматривать записи по порядку до совпадения
Update
См. Read
Зачеркнуть ФИО и телефон
Вписать в конец страницы ФИО и телефон
Delete
См. Read
Зачеркнуть ФИО и телефон
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 11 / 61
Определения и примеры Про «скорость» телефонной книги
Про «скорость» телефонной книги
Create — «быстрая» вставка
Read, Update, Delete — всё сводится к поиску записи
Инвариант
В телефонной книге есть 0 или 1 незачёркнутая запись для любой
ФИО
Если хотим оценить точнее, то нужно кое-что вспомнить...
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 12 / 61
Определения и примеры O(n) и o(n)
O(n) и o(n)
Формальное определениеa
a
http://en.wikipedia.org/wiki/Big_O_notation
f (n) ∈ O(g(n)) ⇔ ∃k > 0 ∃n0 ∀n > n0 f (n) ≤ g(n) · k
f (n) ∈ o(g(n)) ⇔ ∀k > 0 ∃n0 ∀n > n0 f (n) ≤ g(n) · k
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 13 / 61
Определения и примеры o(n): Сравнение
o(n): Сравнение
Компьютер мощностью 1 Gops:
o() 1 Gops 1 Tops
o(n) 1 секунда 16 минут
o(log2(n)) 30 микросекунд 40 микросекунд
o(n2
) 32 года 32 миллиона лет
o(n · log2(n)) 30 секунд 11 часов
o(k · n) k с. 1000k с.
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 14 / 61
Определения и примеры o(n): Примеры
o(n): Примеры
o(n) — последовательный перебор
o(n2
) — сравнение всех со всеми
o(log2(n)) — бинарный поиск
o(n · log2(n)) — сортировка Quick Sort
o(k · n) — сортировка Radix Sort
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 15 / 61
Определения и примеры Вернёмся к телефонной книге
Вернёмся к телефонной книге
Пусть в книге 100 записей.
Если совсем не сортировать, то поиск за
100/2 = 50 операций в среднем
Если всё полностью отсортировано, то поиск за
log2(100) ≈ 6.64 операции
А в бумажной телефонной книге
log2(28) + 100/28/2 ≈ 6.59 операции
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 16 / 61
Определения и примеры Ограничения физического мира
Ограничения физического мира
1 L1 cache reference ......................... 0.5 ns
2 Branch mispredict ............................ 5 ns
3 L2 cache reference ........................... 7 ns
4 Mutex lock/unlock ........................... 25 ns
5 Main memory reference ...................... 100 ns
6 Compress 1K bytes with Zippy ............. 3,000 ns = 3 us
7 Send 2K bytes over 1 Gbps network ....... 20,000 ns = 20 us
8 SSD random read ........................ 150,000 ns = 150 us
9 Read 1 MB sequentially from memory ..... 250,000 ns = 250 us
10 Round trip within same datacenter ...... 500,000 ns = 0.5 ms
11 Read 1 MB sequentially from SSD* ..... 1,000,000 ns = 1 ms
12 Disk seek ........................... 10,000,000 ns = 10 ms
13 Read 1 MB sequentially from disk .... 20,000,000 ns = 20 ms
14 Send packet CA->Netherlands->CA .... 150,000,000 ns = 150 ms
https://people.eecs.berkeley.edu/~rcs/research/
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 17 / 61
Классификация БД Disclaimer
Disclaimer
Общепризнанных устоявшихся классификаций нет1
Классификации неполны по определению
Многие хранилища данных являются гибридными или
настраиваемыми
Любые противоречия случайны и на совести автора
1
http://en.wikipedia.org/wiki/Database#Database_type_examples
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 18 / 61
Классификация БД Data Model
Data Model
Hierarchical
Relational
Graph
Object
Document
Key-value
Columnar
Deductive
Spatial
...
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 19 / 61
Классификация БД Deployment
Deployment
Embedded (in-process)
Separate
Distributed
...
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 20 / 61
Классификация БД Storage
Storage
In-memory
On-disk
Data warehousing
...
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 21 / 61
Классификация БД Usage patterns
Usage patterns
Messaging
Counters
Logging + Batch processing
OLTP
Entity enrichment
Versioning
...
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 22 / 61
Классификация БД И это ещё не всё
И это ещё не всё
Query Language
Consistency
Availability & Replication
Partition tolerance
Transactions
Backups
Security
...
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 23 / 61
Web Scale
Web Scale
In my limited experience I’ve dealt with long-lived network
partitions in a single data center (DC), PDU [power distribution
unit] failures, switch failures, accidental power cycles of whole
racks, whole-DC backbone failures, whole-DC power failures,
and a hypoglycemic driver smashing his Ford pickup truck into a
DC’s HVAC [heating, ventilation, and air conditioning] system.
And I’m not even an ops guy.
Coda Hale
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 24 / 61
Web Scale Examples
Examples
Одноклассники
48 M DAU
1.2 Tb/s
Instagram
300 M DAU
4.2 B likes per day
95 M videos/photos per day
Facebook
1.23 B DAU
350 M photos per day
4 PB data per day
The "Next-Gen"is Now2
2
http://2016.secr.ru/lang/en/program/invited-speakers/crystal-valentine
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 25 / 61
Web Scale Scalability
Scalability
Replication
Share nothing arhitectures
Machines/disks/NICs
Vertical partitioning
By function, transaction, user type, ...
Loose coupling
Batch vs interactive
Independent scaling
Horizontal partitioning
By year, geo
Using hash, segment, utilization, ...
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 26 / 61
Web Scale Fault-tolerance
Fault-tolerance
Everything constantly breaks
HDD3
Memory
NIC
Chipset
CPUs
Redundancy
RAID
Error correction: ECC, Reed-Solomon, ...
(Geo-)replication
3
https://research.google.com/pubs/pub32774.html
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 27 / 61
Web Scale Microservices
Microservices
Became hot in 20144
Embrace failures5
Eventual consistency
Polyglot persistence, CQRS, CRDT
REST/RPC/(async) message passing (instead of SQL)
Independent human/resources scaling
Independent deployment
Containers
4
https://martinfowler.com/microservices/
5
http://www.reactivemanifesto.org
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 28 / 61
Web Scale Why NoSQL
Why NoSQL
Scalability
Very large datasets
Write throughput
Specialized queries
Restrictive relational schema
Planet-scale services
Geo distribution
Fault-tolerance
6
6
T. Limoncelli et al. The Practice of Cloud System Administration: DevOps and SRE Practices for
Web Services, Volume 2.
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 29 / 61
Web Scale Drawbacks of NoSQL
Drawbacks of NoSQL
"Do one thing, and do it well."
Not mature enough7
No common standards/classification
Requires deep understanding of internals
Too much hype/marketing bullshit
7
http://jepsen.io
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 30 / 61
Web Scale Random Thoughts
Random Thoughts
Amount vs Complexity8
Performance vs Flexibility
Эволюция структур данных в Яндекс.Метрике9
Дешевле, надёжнее, проще: хранение петабайтов видео и фото в
Одноклассниках10
8
https://www.thestrangeloop.com/2015/sessions.html
9
https://habrahabr.ru/company/yandex/blog/273305/
10
http://2017.jokerconf.com/2017/talks/4fasygftomyekgaqaaiauo/
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 31 / 61
Hash Коллекции: сложность операций
Коллекции: сложность операций
ArrayList:
get(): O(1)
insert(): O(n)
delete(): O(n)
append(): O(1) / O(n)
LinkedList:
get(): O(n)
insert(): O(n)
delete(): O(n)
append(): O(1)
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 32 / 61
Hash Как ещё быстрее?
Как ещё быстрее?
Hash table
Ассоциативный массив, отображающий ключи в значенияa
:
1 С помощью хэш-функции от ключа находим индекс в массиве
bucket’ов
2 Перебираем ключи в найденном bucket’е до совпадения
3 Извлекаем значение
a
http://en.wikipedia.org/wiki/Hash_table
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 33 / 61
Hash Пример
Пример
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 34 / 61
Hash Hash table: сложность операций
Hash table: сложность операций
get(): O(1)
insert(): O(1)
delete(): O(1)
append(): O(1)
Допущения
При равномерной функции хэширования
Без учёта ребалансировки
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 35 / 61
Hash Подводные камни
Подводные камни
Выбор функции хэширования
Разрешение коллизий:
Separate chaining — лишняя память, CPU cache misses
Open addressing — элементов не больше 70% размера массива, CPU
cache pollution
Resize & rehash
Concurrency
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 36 / 61
Hash Материалы
Материалы
java.util.HashMap
java.util.concurrent.ConcurrentHashMap
http://en.wikipedia.org/wiki/Hash_table
Chris Okasaki. Purely Functional Data Structures11
11
http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 37 / 61
Cache Классические архитектуры Web-приложений
Классические архитектуры Web-приложений
Как взаимодействуют с хранилищами
Какие проблемы пытаются решить
Каким образом
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 38 / 61
Cache Трёхзвенный клиент-сервер
Трёхзвенный клиент-сервер
Зачем нужен Server:
Преобразование форматов
Логика: проверить, посчитать, ...
Гибкость
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 39 / 61
Cache Нагрузка растёт
Нагрузка растёт
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 40 / 61
Cache Нагрузка ещё больше
Нагрузка ещё больше
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 41 / 61
Cache Что такое cache
Что такое cache
Cache
Реализация in-memory concurrent hash table с некоторыми
особенностями.
1 def process(request: Request): Response = {
2 implicit val timeout = Timeout(50 milliseconds)
3
4 cache.get(request) getOrElse {
5 val response = buildResponse(request)
6 cache.put(request, response)
7 response
8 }
9 }
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 42 / 61
Cache Анализ cache per server
Анализ cache per server
Достоинства
Снизили нагрузку на CPU и БД (если нормальный cache hit ratio)
Недостатки
В каждом cache одинаковые значения
«Лишние» вычисления (нагрузка на CPU)
Ограниченный размер каждого cache
Получили спектр проблем с апгрейдом системы
Нужны политики «протухания» и вытеснения
Нужно «прогревать» кэш или перезапускать сервера постепенно
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 43 / 61
Cache Distributed cache
Distributed cache
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 44 / 61
Cache Первый подход к снаряду
Первый подход к снаряду
1 class Cache {
2 val servers =
3 Vector("cache01.mail.ru", "cache02.mail.ru")
4
5 protected def lookup(key: AnyVal): String =
6 servers(key.hashCode() % servers.length)
7
8 def get(key: AnyVal) =
9 remoteGet(lookup(key))
10
11 def put(key: AnyVal, value: Array[Byte]) =
12 remotePut(lookup(key), value)
13 }
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 45 / 61
Cache Анализ distributed cache
Анализ distributed cache
Достоинства
Считаем всё (примерно) один раз
Больше суммарный объём
Больше влезет значений
Недостатки
Остался спектр проблем с апгрейдом системы
Нужны политики «протухания» (TTL) и вытеснения (LRU)
Нужно «прогревать» кэш
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 46 / 61
Cache Memcached
Memcached
http://www.memcached.org/
Разработан для LiveJournal в 2002
Используется в YouTube, Flickr, Reddit, Facebook, Orange, Twitter,
Tumblr, Wikipedia, Yandex
Входит в Google App Engine, Windows Azure, Amazon Web Services
In-memory
Ключ — строка (до 250 байт)
Многопоточный + libevent
LRU + TTL (up to 30 days)
Простой текстовый и бинарный протокол: set, add, replace,
append, prepend, get, delete, ...
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 47 / 61
Cache Проблема: Изменение кластера memcached
Проблема: Изменение кластера memcached
Причины
Список серверов в клиенте
Количество серверов в hash-функции
Решения
Сервис-proxy перед memcached
Consistent hashing
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 48 / 61
Cache Сервис-proxy
Сервис-proxy
Слушает клиентский порт
Хэширует ключ и проксирует запрос
Держит соединения ко всем экземплярам cache
Недостатки
+1 сетевой hop
Весь трафик через одну точку
SPOF
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 49 / 61
Cache Consistent hashing
Consistent hashing
Определение
When a hash table is resized and consistent hashing is used, only K/n
keys need to be remapped on average, where K is the number of keys,
and n is the number of slotsa
.
a
http://en.wikipedia.org/wiki/Consistent_hashing
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 50 / 61
Cache Consistent hashing: своими руками
Consistent hashing: своими руками
Будем отображать ключи в слоты, а затем слоты на машины:
1 val slots = Vector(100, 200, 300, 400)
2
3 def slot(key: AnyVal): Int = {
4 val hash = key % slots.last
5 slots.indexWhere(hash < _)
6 }
Если переполняется слот 200-299, то подвигаем:
1 val slots = Vector(100, 200, 275, 325, 400)
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 51 / 61
Cache Consistent hashing: по-взрослому
Consistent hashing: по-взрослому
http://docs.basho.com/riak/1.1.4/references/appendices/Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 52 / 61
Cache Consistent hashing: репликация
Consistent hashing: репликация
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 53 / 61
Cache Проблема: Перезапуск кластера
Проблема: Перезапуск кластера
Причины
In-memory ⇒ пустой кэш ⇒ БД «ложится»
Решения
«Разогрев»
Persistent storage
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 54 / 61
Cache Redis: Persistent Key-Value Storage
Redis: Persistent Key-Value Storage
http://www.redis.io/
Наиболее популярный Key-Value Storage12
Используется в GitHub, Disqus, Pinterest, Stackoverlow, Flickr,
Blizzard, Instagram, Twitter
Key-Value, but Value: String, List, Set, SortedSet, Hash
In-memory and/or Snapshots and/or Commit Logs
Single-threaded by design + Master-slave
Опционально LRU и/или TTL
Очень богатый API13
12
http://db-engines.com/en/ranking/key-value+store
13
http://redis.io/commands
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 55 / 61
Проект
Проект
Key-Value хранилище
CRUD API
In-memory
Persistent
Быстрое
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 56 / 61
Проект Базовые технологии
Базовые технологии
Java 8/9
JDK
https://github.com/odnoklassniki/one-nio
Файл(ы)/Embedded DBMS/one.nio.mem.*
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 57 / 61
Проект Организация
Организация
1 https://github.com/polis-mail-ru
2 Форкаем проект 2018-db-kv
3 Реализуем хранилище, в цикле:
Отлаживаем
Расширяем и прогоняем модульные тесты
Подтягиваем тесты из upstream
4 Посылаем pull request в бранч со своим именем
5 Исправляем замечания
6 Получаем баллы
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 58 / 61
Проект Обязательные этапы
Обязательные этапы
1 In-memory
Функциональные тесты
2 Persistence
Отказоустойчивость
3 Optimization
Индивидуальная работа
Фиксы производительности
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 59 / 61
Проект Баллы
Баллы
3 этапа x 10 баллов
Бонусные фичи
Compaction
Expire
Embedded DBMS
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 60 / 61
Вопросы?
Вопросы?
https://polis.mail.ru/blog/view/111/
https://incubos.org/contacts/
Не забудьте про ДЗ
Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 61 / 61

More Related Content

What's hot

Реактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/musicРеактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/musicVadim Tsesko
 
Базы данных. Lucene
Базы данных. LuceneБазы данных. Lucene
Базы данных. LuceneVadim Tsesko
 
Базы данных. Cassandra
Базы данных. CassandraБазы данных. Cassandra
Базы данных. CassandraVadim Tsesko
 
Technopolis.NoSQL 02
Technopolis.NoSQL 02Technopolis.NoSQL 02
Technopolis.NoSQL 02Vadim Tsesko
 
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...Ontico
 
Micro orm для жизни. Кожевников Дмитрий D2D Just.NET
Micro orm для жизни. Кожевников Дмитрий D2D Just.NETMicro orm для жизни. Кожевников Дмитрий D2D Just.NET
Micro orm для жизни. Кожевников Дмитрий D2D Just.NETDev2Dev
 
Ubuntu и другие OpenSource-продукты в компании «Яндекс»
Ubuntu и другие  OpenSource-продукты в компании «Яндекс»Ubuntu и другие  OpenSource-продукты в компании «Яндекс»
Ubuntu и другие OpenSource-продукты в компании «Яндекс»syndicut
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)Ontico
 
Андрей Ситник
Андрей СитникАндрей Ситник
Андрей СитникCodeFest
 
CAP теорема. Протокол Raft.
CAP теорема. Протокол Raft.CAP теорема. Протокол Raft.
CAP теорема. Протокол Raft.Vadim Tsesko
 
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Ontico
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
История успеха Яндекс.Почты
История успеха Яндекс.ПочтыИстория успеха Яндекс.Почты
История успеха Яндекс.Почтыdev1ant
 
Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДNikolay Samokhvalov
 
Создаем команду автотестирования в нетипичных условиях, Василий Никишин, Par...
 Создаем команду автотестирования в нетипичных условиях, Василий Никишин, Par... Создаем команду автотестирования в нетипичных условиях, Василий Никишин, Par...
Создаем команду автотестирования в нетипичных условиях, Василий Никишин, Par...it-people
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Ontico
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанкуNikolay Sivko
 
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...Ontico
 

What's hot (20)

Реактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/musicРеактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/music
 
Базы данных. Lucene
Базы данных. LuceneБазы данных. Lucene
Базы данных. Lucene
 
Базы данных. Cassandra
Базы данных. CassandraБазы данных. Cassandra
Базы данных. Cassandra
 
Technopolis.NoSQL 02
Technopolis.NoSQL 02Technopolis.NoSQL 02
Technopolis.NoSQL 02
 
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
 
Micro orm для жизни. Кожевников Дмитрий D2D Just.NET
Micro orm для жизни. Кожевников Дмитрий D2D Just.NETMicro orm для жизни. Кожевников Дмитрий D2D Just.NET
Micro orm для жизни. Кожевников Дмитрий D2D Just.NET
 
Ubuntu и другие OpenSource-продукты в компании «Яндекс»
Ubuntu и другие  OpenSource-продукты в компании «Яндекс»Ubuntu и другие  OpenSource-продукты в компании «Яндекс»
Ubuntu и другие OpenSource-продукты в компании «Яндекс»
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
 
Андрей Ситник
Андрей СитникАндрей Ситник
Андрей Ситник
 
CAP теорема. Протокол Raft.
CAP теорема. Протокол Raft.CAP теорема. Протокол Raft.
CAP теорема. Протокол Raft.
 
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
История успеха Яндекс.Почты
История успеха Яндекс.ПочтыИстория успеха Яндекс.Почты
История успеха Яндекс.Почты
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБД
 
Создаем команду автотестирования в нетипичных условиях, Василий Никишин, Par...
 Создаем команду автотестирования в нетипичных условиях, Василий Никишин, Par... Создаем команду автотестирования в нетипичных условиях, Василий Никишин, Par...
Создаем команду автотестирования в нетипичных условиях, Василий Никишин, Par...
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанку
 
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
 

Similar to Technopolis.NoSQL 01

Realistic VR experience requires visualization of realistic players, which in...
Realistic VR experience requires visualization of realistic players, which in...Realistic VR experience requires visualization of realistic players, which in...
Realistic VR experience requires visualization of realistic players, which in...Provectus
 
Современные коллаборативные технологии в учебном процессе: теория и практика ...
Современные коллаборативные технологии в учебном процессе: теория и практика ...Современные коллаборативные технологии в учебном процессе: теория и практика ...
Современные коллаборативные технологии в учебном процессе: теория и практика ...Alexey Neznanov
 
закон иерархических компенсаций седова и C++ core guidelines
закон иерархических компенсаций седова и C++ core guidelinesзакон иерархических компенсаций седова и C++ core guidelines
закон иерархических компенсаций седова и C++ core guidelinescorehard_by
 
закон иерархических компенсаций седова и C++ core guidelines
закон иерархических компенсаций седова и C++ core guidelinesзакон иерархических компенсаций седова и C++ core guidelines
закон иерархических компенсаций седова и C++ core guidelinesCOMAQA.BY
 
Digital Society Laboratory (Аршавский)
Digital Society Laboratory (Аршавский)Digital Society Laboratory (Аршавский)
Digital Society Laboratory (Аршавский)Andzhey Arshavskiy
 
How to become a Data Scientist
How to become a Data Scientist How to become a Data Scientist
How to become a Data Scientist Irina Radchenko
 
Соревнования по анализу данных: история, тактика, простые методы
Соревнования по анализу данных: история, тактика, простые методыСоревнования по анализу данных: история, тактика, простые методы
Соревнования по анализу данных: история, тактика, простые методыАлександр Дьяконов
 
Современные коллаборативные технологии: технологический базис сообществ откры...
Современные коллаборативные технологии: технологический базис сообществ откры...Современные коллаборативные технологии: технологический базис сообществ откры...
Современные коллаборативные технологии: технологический базис сообществ откры...Alexey Neznanov
 
Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8Dima Dzuba
 
Вавилонское тестировтворение - Алекскей Лупан
Вавилонское тестировтворение - Алекскей ЛупанВавилонское тестировтворение - Алекскей Лупан
Вавилонское тестировтворение - Алекскей ЛупанQA Dnepropetrovsk Community (Ukraine)
 
Работа с контентными проектами (Optimization-16)
Работа с контентными проектами (Optimization-16)Работа с контентными проектами (Optimization-16)
Работа с контентными проектами (Optimization-16)Стас Поломарь
 
Семантическое ядро рунета
Семантическое ядро рунетаСемантическое ядро рунета
Семантическое ядро рунетаCEE-SEC(R)
 
Lab Management magic, elves, and mushrooms
Lab Management magic, elves, and mushroomsLab Management magic, elves, and mushrooms
Lab Management magic, elves, and mushroomsAlena Begler
 
12 - Java. Разработка сетевых приложений на Java
12 - Java. Разработка сетевых приложений на Java12 - Java. Разработка сетевых приложений на Java
12 - Java. Разработка сетевых приложений на JavaRoman Brovko
 
Современные коллаборативные технологии в учебном процессе: возможности и проб...
Современные коллаборативные технологии в учебном процессе: возможности и проб...Современные коллаборативные технологии в учебном процессе: возможности и проб...
Современные коллаборативные технологии в учебном процессе: возможности и проб...Alexey Neznanov
 
Современные коллаборативные технологии в учебном процессе: практика внедрения
Современные коллаборативные технологии в учебном процессе: практика внедренияСовременные коллаборативные технологии в учебном процессе: практика внедрения
Современные коллаборативные технологии в учебном процессе: практика внедренияAlexey Neznanov
 
вики вики в сетевых проектах
вики вики в сетевых проектахвики вики в сетевых проектах
вики вики в сетевых проектахgalochka75
 

Similar to Technopolis.NoSQL 01 (20)

Realistic VR experience requires visualization of realistic players, which in...
Realistic VR experience requires visualization of realistic players, which in...Realistic VR experience requires visualization of realistic players, which in...
Realistic VR experience requires visualization of realistic players, which in...
 
Современные коллаборативные технологии в учебном процессе: теория и практика ...
Современные коллаборативные технологии в учебном процессе: теория и практика ...Современные коллаборативные технологии в учебном процессе: теория и практика ...
Современные коллаборативные технологии в учебном процессе: теория и практика ...
 
Avito Stachka 2012
Avito Stachka 2012Avito Stachka 2012
Avito Stachka 2012
 
закон иерархических компенсаций седова и C++ core guidelines
закон иерархических компенсаций седова и C++ core guidelinesзакон иерархических компенсаций седова и C++ core guidelines
закон иерархических компенсаций седова и C++ core guidelines
 
закон иерархических компенсаций седова и C++ core guidelines
закон иерархических компенсаций седова и C++ core guidelinesзакон иерархических компенсаций седова и C++ core guidelines
закон иерархических компенсаций седова и C++ core guidelines
 
Digital Society Laboratory (Аршавский)
Digital Society Laboratory (Аршавский)Digital Society Laboratory (Аршавский)
Digital Society Laboratory (Аршавский)
 
How to become a Data Scientist
How to become a Data Scientist How to become a Data Scientist
How to become a Data Scientist
 
Соревнования по анализу данных: история, тактика, простые методы
Соревнования по анализу данных: история, тактика, простые методыСоревнования по анализу данных: история, тактика, простые методы
Соревнования по анализу данных: история, тактика, простые методы
 
Современные коллаборативные технологии: технологический базис сообществ откры...
Современные коллаборативные технологии: технологический базис сообществ откры...Современные коллаборативные технологии: технологический базис сообществ откры...
Современные коллаборативные технологии: технологический базис сообществ откры...
 
Appendix 1
Appendix 1Appendix 1
Appendix 1
 
Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8
 
Анализируем данные с Clickhouse
Анализируем данные с  ClickhouseАнализируем данные с  Clickhouse
Анализируем данные с Clickhouse
 
Вавилонское тестировтворение - Алекскей Лупан
Вавилонское тестировтворение - Алекскей ЛупанВавилонское тестировтворение - Алекскей Лупан
Вавилонское тестировтворение - Алекскей Лупан
 
Работа с контентными проектами (Optimization-16)
Работа с контентными проектами (Optimization-16)Работа с контентными проектами (Optimization-16)
Работа с контентными проектами (Optimization-16)
 
Семантическое ядро рунета
Семантическое ядро рунетаСемантическое ядро рунета
Семантическое ядро рунета
 
Lab Management magic, elves, and mushrooms
Lab Management magic, elves, and mushroomsLab Management magic, elves, and mushrooms
Lab Management magic, elves, and mushrooms
 
12 - Java. Разработка сетевых приложений на Java
12 - Java. Разработка сетевых приложений на Java12 - Java. Разработка сетевых приложений на Java
12 - Java. Разработка сетевых приложений на Java
 
Современные коллаборативные технологии в учебном процессе: возможности и проб...
Современные коллаборативные технологии в учебном процессе: возможности и проб...Современные коллаборативные технологии в учебном процессе: возможности и проб...
Современные коллаборативные технологии в учебном процессе: возможности и проб...
 
Современные коллаборативные технологии в учебном процессе: практика внедрения
Современные коллаборативные технологии в учебном процессе: практика внедренияСовременные коллаборативные технологии в учебном процессе: практика внедрения
Современные коллаборативные технологии в учебном процессе: практика внедрения
 
вики вики в сетевых проектах
вики вики в сетевых проектахвики вики в сетевых проектах
вики вики в сетевых проектах
 

Technopolis.NoSQL 01

  • 1. Введение. Key-Value. «Использование баз данных» Цесько Вадим Александрович https://incubos.org @incubos 4 апреля 2018 г. Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 1 / 61
  • 3. Опрос Опрос Какие реляционные СУБД приходилось использовать? Что вызывает сложности при использовании реляционных СУБД? Каковы ограничения реляционных СУБД? С какими NoSQL СУБД знакомы? Что хотели бы узнать про NoSQL? Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 3 / 61
  • 4. Организация Формат Формат По средам с 18:30 до 21:45 3-4 лекции 1-2 семинара Индивидуальный проект Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 4 / 61
  • 5. Организация Материалы Материалы https: //polis.mail.ru/curriculum/program/discipline/35/ QCon, Devoxx, Strange Loop, etc. Ссылки на книги, статьи и блоги https://github.com/papers-we-love/papers-we-love http://highscalability.com/start-here/ Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 5 / 61
  • 6. Содержание Цели Цели Принципы построения систем хранения (и обработки) данных Проблемы и варианты их решения Промышленные примеры реализации принципов Навыки оценки решений Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 6 / 61
  • 7. Содержание О чём мы будем говорить О чём мы будем говорить Классификации баз данных Web Scale: Scalability, Availability, CAP SQL vs NoSQL Транзакции Производительность Примеры баз данных Проектирование систем хранения и обработки Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 7 / 61
  • 8. Содержание О чём мы НЕ будем говорить О чём мы НЕ будем говорить Реляционная модель данных Теория нормальных форм SQL Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 8 / 61
  • 9. Определения и примеры База данных База данных A database is an organized collection of dataa . a http://en.wikipedia.org/wiki/Database Телефонная книга Книжная библиотека Коллекция фотографий Товарный чек Социальная сеть Файловая система Географическая карта Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 9 / 61
  • 10. Определения и примеры Операции над данными Операции над данными CRUD Create, read, update, deletea . a http://en.wikipedia.org/wiki/Create,_read,_update_and_delete Например Operation SQL HTTP Create INSERT POST Read (Retrieve) SELECT GET Update (Modify) UPDATE PUT / PATCH Delete (Destroy) DELETE DELETE Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 10 / 61
  • 11. Определения и примеры Бумажная телефонная книга Бумажная телефонная книга Create Открыть страницу по первой букве фамилии Вписать в конец страницы ФИО и телефон Read Открыть страницу по первой букве фамилии Просматривать записи по порядку до совпадения Update См. Read Зачеркнуть ФИО и телефон Вписать в конец страницы ФИО и телефон Delete См. Read Зачеркнуть ФИО и телефон Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 11 / 61
  • 12. Определения и примеры Про «скорость» телефонной книги Про «скорость» телефонной книги Create — «быстрая» вставка Read, Update, Delete — всё сводится к поиску записи Инвариант В телефонной книге есть 0 или 1 незачёркнутая запись для любой ФИО Если хотим оценить точнее, то нужно кое-что вспомнить... Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 12 / 61
  • 13. Определения и примеры O(n) и o(n) O(n) и o(n) Формальное определениеa a http://en.wikipedia.org/wiki/Big_O_notation f (n) ∈ O(g(n)) ⇔ ∃k > 0 ∃n0 ∀n > n0 f (n) ≤ g(n) · k f (n) ∈ o(g(n)) ⇔ ∀k > 0 ∃n0 ∀n > n0 f (n) ≤ g(n) · k Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 13 / 61
  • 14. Определения и примеры o(n): Сравнение o(n): Сравнение Компьютер мощностью 1 Gops: o() 1 Gops 1 Tops o(n) 1 секунда 16 минут o(log2(n)) 30 микросекунд 40 микросекунд o(n2 ) 32 года 32 миллиона лет o(n · log2(n)) 30 секунд 11 часов o(k · n) k с. 1000k с. Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 14 / 61
  • 15. Определения и примеры o(n): Примеры o(n): Примеры o(n) — последовательный перебор o(n2 ) — сравнение всех со всеми o(log2(n)) — бинарный поиск o(n · log2(n)) — сортировка Quick Sort o(k · n) — сортировка Radix Sort Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 15 / 61
  • 16. Определения и примеры Вернёмся к телефонной книге Вернёмся к телефонной книге Пусть в книге 100 записей. Если совсем не сортировать, то поиск за 100/2 = 50 операций в среднем Если всё полностью отсортировано, то поиск за log2(100) ≈ 6.64 операции А в бумажной телефонной книге log2(28) + 100/28/2 ≈ 6.59 операции Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 16 / 61
  • 17. Определения и примеры Ограничения физического мира Ограничения физического мира 1 L1 cache reference ......................... 0.5 ns 2 Branch mispredict ............................ 5 ns 3 L2 cache reference ........................... 7 ns 4 Mutex lock/unlock ........................... 25 ns 5 Main memory reference ...................... 100 ns 6 Compress 1K bytes with Zippy ............. 3,000 ns = 3 us 7 Send 2K bytes over 1 Gbps network ....... 20,000 ns = 20 us 8 SSD random read ........................ 150,000 ns = 150 us 9 Read 1 MB sequentially from memory ..... 250,000 ns = 250 us 10 Round trip within same datacenter ...... 500,000 ns = 0.5 ms 11 Read 1 MB sequentially from SSD* ..... 1,000,000 ns = 1 ms 12 Disk seek ........................... 10,000,000 ns = 10 ms 13 Read 1 MB sequentially from disk .... 20,000,000 ns = 20 ms 14 Send packet CA->Netherlands->CA .... 150,000,000 ns = 150 ms https://people.eecs.berkeley.edu/~rcs/research/ Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 17 / 61
  • 18. Классификация БД Disclaimer Disclaimer Общепризнанных устоявшихся классификаций нет1 Классификации неполны по определению Многие хранилища данных являются гибридными или настраиваемыми Любые противоречия случайны и на совести автора 1 http://en.wikipedia.org/wiki/Database#Database_type_examples Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 18 / 61
  • 19. Классификация БД Data Model Data Model Hierarchical Relational Graph Object Document Key-value Columnar Deductive Spatial ... Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 19 / 61
  • 20. Классификация БД Deployment Deployment Embedded (in-process) Separate Distributed ... Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 20 / 61
  • 21. Классификация БД Storage Storage In-memory On-disk Data warehousing ... Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 21 / 61
  • 22. Классификация БД Usage patterns Usage patterns Messaging Counters Logging + Batch processing OLTP Entity enrichment Versioning ... Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 22 / 61
  • 23. Классификация БД И это ещё не всё И это ещё не всё Query Language Consistency Availability & Replication Partition tolerance Transactions Backups Security ... Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 23 / 61
  • 24. Web Scale Web Scale In my limited experience I’ve dealt with long-lived network partitions in a single data center (DC), PDU [power distribution unit] failures, switch failures, accidental power cycles of whole racks, whole-DC backbone failures, whole-DC power failures, and a hypoglycemic driver smashing his Ford pickup truck into a DC’s HVAC [heating, ventilation, and air conditioning] system. And I’m not even an ops guy. Coda Hale Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 24 / 61
  • 25. Web Scale Examples Examples Одноклассники 48 M DAU 1.2 Tb/s Instagram 300 M DAU 4.2 B likes per day 95 M videos/photos per day Facebook 1.23 B DAU 350 M photos per day 4 PB data per day The "Next-Gen"is Now2 2 http://2016.secr.ru/lang/en/program/invited-speakers/crystal-valentine Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 25 / 61
  • 26. Web Scale Scalability Scalability Replication Share nothing arhitectures Machines/disks/NICs Vertical partitioning By function, transaction, user type, ... Loose coupling Batch vs interactive Independent scaling Horizontal partitioning By year, geo Using hash, segment, utilization, ... Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 26 / 61
  • 27. Web Scale Fault-tolerance Fault-tolerance Everything constantly breaks HDD3 Memory NIC Chipset CPUs Redundancy RAID Error correction: ECC, Reed-Solomon, ... (Geo-)replication 3 https://research.google.com/pubs/pub32774.html Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 27 / 61
  • 28. Web Scale Microservices Microservices Became hot in 20144 Embrace failures5 Eventual consistency Polyglot persistence, CQRS, CRDT REST/RPC/(async) message passing (instead of SQL) Independent human/resources scaling Independent deployment Containers 4 https://martinfowler.com/microservices/ 5 http://www.reactivemanifesto.org Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 28 / 61
  • 29. Web Scale Why NoSQL Why NoSQL Scalability Very large datasets Write throughput Specialized queries Restrictive relational schema Planet-scale services Geo distribution Fault-tolerance 6 6 T. Limoncelli et al. The Practice of Cloud System Administration: DevOps and SRE Practices for Web Services, Volume 2. Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 29 / 61
  • 30. Web Scale Drawbacks of NoSQL Drawbacks of NoSQL "Do one thing, and do it well." Not mature enough7 No common standards/classification Requires deep understanding of internals Too much hype/marketing bullshit 7 http://jepsen.io Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 30 / 61
  • 31. Web Scale Random Thoughts Random Thoughts Amount vs Complexity8 Performance vs Flexibility Эволюция структур данных в Яндекс.Метрике9 Дешевле, надёжнее, проще: хранение петабайтов видео и фото в Одноклассниках10 8 https://www.thestrangeloop.com/2015/sessions.html 9 https://habrahabr.ru/company/yandex/blog/273305/ 10 http://2017.jokerconf.com/2017/talks/4fasygftomyekgaqaaiauo/ Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 31 / 61
  • 32. Hash Коллекции: сложность операций Коллекции: сложность операций ArrayList: get(): O(1) insert(): O(n) delete(): O(n) append(): O(1) / O(n) LinkedList: get(): O(n) insert(): O(n) delete(): O(n) append(): O(1) Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 32 / 61
  • 33. Hash Как ещё быстрее? Как ещё быстрее? Hash table Ассоциативный массив, отображающий ключи в значенияa : 1 С помощью хэш-функции от ключа находим индекс в массиве bucket’ов 2 Перебираем ключи в найденном bucket’е до совпадения 3 Извлекаем значение a http://en.wikipedia.org/wiki/Hash_table Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 33 / 61
  • 34. Hash Пример Пример Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 34 / 61
  • 35. Hash Hash table: сложность операций Hash table: сложность операций get(): O(1) insert(): O(1) delete(): O(1) append(): O(1) Допущения При равномерной функции хэширования Без учёта ребалансировки Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 35 / 61
  • 36. Hash Подводные камни Подводные камни Выбор функции хэширования Разрешение коллизий: Separate chaining — лишняя память, CPU cache misses Open addressing — элементов не больше 70% размера массива, CPU cache pollution Resize & rehash Concurrency Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 36 / 61
  • 37. Hash Материалы Материалы java.util.HashMap java.util.concurrent.ConcurrentHashMap http://en.wikipedia.org/wiki/Hash_table Chris Okasaki. Purely Functional Data Structures11 11 http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 37 / 61
  • 38. Cache Классические архитектуры Web-приложений Классические архитектуры Web-приложений Как взаимодействуют с хранилищами Какие проблемы пытаются решить Каким образом Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 38 / 61
  • 39. Cache Трёхзвенный клиент-сервер Трёхзвенный клиент-сервер Зачем нужен Server: Преобразование форматов Логика: проверить, посчитать, ... Гибкость Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 39 / 61
  • 40. Cache Нагрузка растёт Нагрузка растёт Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 40 / 61
  • 41. Cache Нагрузка ещё больше Нагрузка ещё больше Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 41 / 61
  • 42. Cache Что такое cache Что такое cache Cache Реализация in-memory concurrent hash table с некоторыми особенностями. 1 def process(request: Request): Response = { 2 implicit val timeout = Timeout(50 milliseconds) 3 4 cache.get(request) getOrElse { 5 val response = buildResponse(request) 6 cache.put(request, response) 7 response 8 } 9 } Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 42 / 61
  • 43. Cache Анализ cache per server Анализ cache per server Достоинства Снизили нагрузку на CPU и БД (если нормальный cache hit ratio) Недостатки В каждом cache одинаковые значения «Лишние» вычисления (нагрузка на CPU) Ограниченный размер каждого cache Получили спектр проблем с апгрейдом системы Нужны политики «протухания» и вытеснения Нужно «прогревать» кэш или перезапускать сервера постепенно Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 43 / 61
  • 44. Cache Distributed cache Distributed cache Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 44 / 61
  • 45. Cache Первый подход к снаряду Первый подход к снаряду 1 class Cache { 2 val servers = 3 Vector("cache01.mail.ru", "cache02.mail.ru") 4 5 protected def lookup(key: AnyVal): String = 6 servers(key.hashCode() % servers.length) 7 8 def get(key: AnyVal) = 9 remoteGet(lookup(key)) 10 11 def put(key: AnyVal, value: Array[Byte]) = 12 remotePut(lookup(key), value) 13 } Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 45 / 61
  • 46. Cache Анализ distributed cache Анализ distributed cache Достоинства Считаем всё (примерно) один раз Больше суммарный объём Больше влезет значений Недостатки Остался спектр проблем с апгрейдом системы Нужны политики «протухания» (TTL) и вытеснения (LRU) Нужно «прогревать» кэш Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 46 / 61
  • 47. Cache Memcached Memcached http://www.memcached.org/ Разработан для LiveJournal в 2002 Используется в YouTube, Flickr, Reddit, Facebook, Orange, Twitter, Tumblr, Wikipedia, Yandex Входит в Google App Engine, Windows Azure, Amazon Web Services In-memory Ключ — строка (до 250 байт) Многопоточный + libevent LRU + TTL (up to 30 days) Простой текстовый и бинарный протокол: set, add, replace, append, prepend, get, delete, ... Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 47 / 61
  • 48. Cache Проблема: Изменение кластера memcached Проблема: Изменение кластера memcached Причины Список серверов в клиенте Количество серверов в hash-функции Решения Сервис-proxy перед memcached Consistent hashing Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 48 / 61
  • 49. Cache Сервис-proxy Сервис-proxy Слушает клиентский порт Хэширует ключ и проксирует запрос Держит соединения ко всем экземплярам cache Недостатки +1 сетевой hop Весь трафик через одну точку SPOF Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 49 / 61
  • 50. Cache Consistent hashing Consistent hashing Определение When a hash table is resized and consistent hashing is used, only K/n keys need to be remapped on average, where K is the number of keys, and n is the number of slotsa . a http://en.wikipedia.org/wiki/Consistent_hashing Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 50 / 61
  • 51. Cache Consistent hashing: своими руками Consistent hashing: своими руками Будем отображать ключи в слоты, а затем слоты на машины: 1 val slots = Vector(100, 200, 300, 400) 2 3 def slot(key: AnyVal): Int = { 4 val hash = key % slots.last 5 slots.indexWhere(hash < _) 6 } Если переполняется слот 200-299, то подвигаем: 1 val slots = Vector(100, 200, 275, 325, 400) Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 51 / 61
  • 52. Cache Consistent hashing: по-взрослому Consistent hashing: по-взрослому http://docs.basho.com/riak/1.1.4/references/appendices/Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 52 / 61
  • 53. Cache Consistent hashing: репликация Consistent hashing: репликация Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 53 / 61
  • 54. Cache Проблема: Перезапуск кластера Проблема: Перезапуск кластера Причины In-memory ⇒ пустой кэш ⇒ БД «ложится» Решения «Разогрев» Persistent storage Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 54 / 61
  • 55. Cache Redis: Persistent Key-Value Storage Redis: Persistent Key-Value Storage http://www.redis.io/ Наиболее популярный Key-Value Storage12 Используется в GitHub, Disqus, Pinterest, Stackoverlow, Flickr, Blizzard, Instagram, Twitter Key-Value, but Value: String, List, Set, SortedSet, Hash In-memory and/or Snapshots and/or Commit Logs Single-threaded by design + Master-slave Опционально LRU и/или TTL Очень богатый API13 12 http://db-engines.com/en/ranking/key-value+store 13 http://redis.io/commands Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 55 / 61
  • 56. Проект Проект Key-Value хранилище CRUD API In-memory Persistent Быстрое Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 56 / 61
  • 57. Проект Базовые технологии Базовые технологии Java 8/9 JDK https://github.com/odnoklassniki/one-nio Файл(ы)/Embedded DBMS/one.nio.mem.* Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 57 / 61
  • 58. Проект Организация Организация 1 https://github.com/polis-mail-ru 2 Форкаем проект 2018-db-kv 3 Реализуем хранилище, в цикле: Отлаживаем Расширяем и прогоняем модульные тесты Подтягиваем тесты из upstream 4 Посылаем pull request в бранч со своим именем 5 Исправляем замечания 6 Получаем баллы Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 58 / 61
  • 59. Проект Обязательные этапы Обязательные этапы 1 In-memory Функциональные тесты 2 Persistence Отказоустойчивость 3 Optimization Индивидуальная работа Фиксы производительности Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 59 / 61
  • 60. Проект Баллы Баллы 3 этапа x 10 баллов Бонусные фичи Compaction Expire Embedded DBMS Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 60 / 61
  • 61. Вопросы? Вопросы? https://polis.mail.ru/blog/view/111/ https://incubos.org/contacts/ Не забудьте про ДЗ Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 61 / 61