61
Введение. Key-Value. Использование баз данных Цесько Вадим Александрович https://incubos.org @incubos 4 апреля 2018 г. Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 1 / 61

Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Введение. Key-Value.«Использование баз данных»

Цесько Вадим Александровичhttps://incubos.org

@incubos

4 апреля 2018 г.

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 1 / 61

Page 2: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

О лекторе

О лекторе

http://kspt.icc.spbstu.ru/people/tsesko/http://digiteklabs.ruhttps://yandex.ruhttps://compscicenter.ru/teachers/12/https://v.ok.ru

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 2 / 61

Page 3: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Опрос

Опрос

Какие реляционные СУБД приходилось использовать?Что вызывает сложности при использовании реляционныхСУБД?Каковы ограничения реляционных СУБД?С какими NoSQL СУБД знакомы?Что хотели бы узнать про NoSQL?

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 3 / 61

Page 4: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Организация Формат

Формат

По средам с 18:30 до 21:453-4 лекции1-2 семинараИндивидуальный проект

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 4 / 61

Page 5: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Организация Материалы

Материалы

https://polis.mail.ru/curriculum/program/discipline/35/QCon, Devoxx, Strange Loop, etc.Ссылки на книги, статьи и блогиhttps://github.com/papers-we-love/papers-we-lovehttp://highscalability.com/start-here/

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 5 / 61

Page 6: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Содержание Цели

Цели

Принципы построения систем хранения (и обработки) данныхПроблемы и варианты их решенияПромышленные примеры реализации принциповНавыки оценки решений

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 6 / 61

Page 7: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Содержание О чём мы будем говорить

О чём мы будем говорить

Классификации баз данныхWeb Scale: Scalability, Availability, CAPSQL vs NoSQLТранзакцииПроизводительностьПримеры баз данныхПроектирование систем хранения и обработки

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 7 / 61

Page 8: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Содержание О чём мы НЕ будем говорить

О чём мы НЕ будем говорить

Реляционная модель данныхТеория нормальных формSQL

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 8 / 61

Page 9: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Определения и примеры База данных

База данныхA databaseis an organized collection of dataa.

ahttp://en.wikipedia.org/wiki/Database

Телефонная книгаКнижная библиотекаКоллекция фотографийТоварный чекСоциальная сетьФайловая системаГеографическая карта

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 9 / 61

Page 10: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Определения и примеры Операции над данными

Операции над данными

CRUDCreate, read, update, deletea.

ahttp://en.wikipedia.org/wiki/Create,_read,_update_and_delete

НапримерOperation SQL HTTP

Create INSERT POSTRead (Retrieve) SELECT GETUpdate (Modify) UPDATE PUT / PATCHDelete (Destroy) DELETE DELETE

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 10 / 61

Page 11: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Определения и примеры Бумажная телефонная книга

Бумажная телефонная книгаCreate

Открыть страницу по первой букве фамилииВписать в конец страницы ФИО и телефон

ReadОткрыть страницу по первой букве фамилииПросматривать записи по порядку до совпадения

UpdateСм. ReadЗачеркнуть ФИО и телефонВписать в конец страницы ФИО и телефон

DeleteСм. ReadЗачеркнуть ФИО и телефон

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 11 / 61

Page 12: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Определения и примеры Про «скорость» телефонной книги

Про «скорость» телефонной книги

Create — «быстрая» вставкаRead, Update, Delete — всё сводится к поиску записи

ИнвариантВ телефонной книге есть 0 или 1 незачёркнутая запись для любойФИО

Если хотим оценить точнее, то нужно кое-что вспомнить...

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 12 / 61

Page 13: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Определения и примеры O(n) и o(n)

O(n) и o(n)

Формальное определениеa

ahttp://en.wikipedia.org/wiki/Big_O_notation

f (n) ∈ O(g(n))⇔ ∃k > 0 ∃n0 ∀n > n0 f (n) ≤ g(n) · kf (n) ∈ o(g(n))⇔ ∀k > 0 ∃n0 ∀n > n0 f (n) ≤ g(n) · k

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 13 / 61

Page 14: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Определения и примеры o(n): Сравнение

o(n): Сравнение

Компьютер мощностью 1 Gops:o() 1 Gops 1 Topso(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

Page 15: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Определения и примеры o(n): Примеры

o(n): Примеры

o(n) — последовательный переборo(n2) — сравнение всех со всемиo(log2(n)) — бинарный поискo(n · log2(n)) — сортировка Quick Sorto(k · n) — сортировка Radix Sort

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 15 / 61

Page 16: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Определения и примеры Вернёмся к телефонной книге

Вернёмся к телефонной книге

Пусть в книге 100 записей.Если совсем не сортировать, то поиск за

100/2 = 50 операций в среднемЕсли всё полностью отсортировано, то поиск за

log2(100) ≈ 6.64 операцииА в бумажной телефонной книге

log2(28) + 100/28/2 ≈ 6.59 операции

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 16 / 61

Page 17: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Определения и примеры Ограничения физического мира

Ограничения физического мира1 L1 cache reference ......................... 0.5 ns2 Branch mispredict ............................ 5 ns3 L2 cache reference ........................... 7 ns4 Mutex lock/unlock ........................... 25 ns5 Main memory reference ...................... 100 ns6 Compress 1K bytes with Zippy ............. 3,000 ns = 3 us7 Send 2K bytes over 1 Gbps network ....... 20,000 ns = 20 us8 SSD random read ........................ 150,000 ns = 150 us9 Read 1 MB sequentially from memory ..... 250,000 ns = 250 us

10 Round trip within same datacenter ...... 500,000 ns = 0.5 ms11 Read 1 MB sequentially from SSD* ..... 1,000,000 ns = 1 ms12 Disk seek ........................... 10,000,000 ns = 10 ms13 Read 1 MB sequentially from disk .... 20,000,000 ns = 20 ms14 Send packet CA->Netherlands->CA .... 150,000,000 ns = 150 ms

https://people.eecs.berkeley.edu/~rcs/research/interactive_latency.htmlЦесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 17 / 61

Page 18: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Классификация БД Disclaimer

Disclaimer

Общепризнанных устоявшихся классификаций нет1

Классификации неполны по определениюМногие хранилища данных являются гибридными илинастраиваемымиЛюбые противоречия случайны и на совести автора

1http://en.wikipedia.org/wiki/Database#Database_type_examplesЦесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 18 / 61

Page 19: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Классификация БД Data Model

Data Model

HierarchicalRelationalGraphObjectDocumentKey-valueColumnarDeductiveSpatial...

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 19 / 61

Page 20: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Классификация БД Deployment

Deployment

Embedded (in-process)SeparateDistributed...

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 20 / 61

Page 21: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Классификация БД Storage

Storage

In-memoryOn-diskData warehousing...

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 21 / 61

Page 22: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Классификация БД Usage patterns

Usage patterns

MessagingCountersLogging + Batch processingOLTPEntity enrichmentVersioning...

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 22 / 61

Page 23: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Классификация БД И это ещё не всё

И это ещё не всё

Query LanguageConsistencyAvailability & ReplicationPartition toleranceTransactionsBackupsSecurity...

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 23 / 61

Page 24: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Web Scale

Web Scale

In my limited experience I’ve dealt with long-lived networkpartitions in a single data center (DC), PDU [power distributionunit] failures, switch failures, accidental power cycles of wholeracks, whole-DC backbone failures, whole-DC power failures,and a hypoglycemic driver smashing his Ford pickup truck into aDC’s HVAC [heating, ventilation, and air conditioning] system.And I’m not even an ops guy.Coda Hale

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 24 / 61

Page 25: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Web Scale Examples

ExamplesОдноклассники

48 M DAU1.2 Tb/s

Instagram300 M DAU4.2 B likes per day95 M videos/photos per day

Facebook1.23 B DAU350 M photos per day4 PB data per day

The "Next-Gen"is Now2

2http://2016.secr.ru/lang/en/program/invited-speakers/crystal-valentineЦесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 25 / 61

Page 26: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Web Scale Scalability

Scalability

ReplicationShare nothing arhitecturesMachines/disks/NICs

Vertical partitioningBy function, transaction, user type, ...Loose couplingBatch vs interactiveIndependent scaling

Horizontal partitioningBy year, geoUsing hash, segment, utilization, ...

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 26 / 61

Page 27: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Web Scale Fault-tolerance

Fault-tolerance

Everything constantly breaksHDD3

MemoryNICChipsetCPUs

RedundancyRAIDError correction: ECC, Reed-Solomon, ...(Geo-)replication

3https://research.google.com/pubs/pub32774.htmlЦесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 27 / 61

Page 28: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Web Scale Microservices

Microservices

Became hot in 20144

Embrace failures5

Eventual consistencyPolyglot persistence, CQRS, CRDTREST/RPC/(async) message passing (instead of SQL)Independent human/resources scalingIndependent deploymentContainers

4https://martinfowler.com/microservices/5http://www.reactivemanifesto.org

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 28 / 61

Page 29: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Web Scale Why NoSQL

Why NoSQL

ScalabilityVery large datasetsWrite throughput

Specialized queriesRestrictive relational schemaPlanet-scale services

Geo distributionFault-tolerance

6

6T. Limoncelli et al. The Practice of Cloud System Administration: DevOps and SRE Practices forWeb Services, Volume 2.

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 29 / 61

Page 30: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Web Scale Drawbacks of NoSQL

Drawbacks of NoSQL

"Do one thing, and do it well."Not mature enough7

No common standards/classificationRequires deep understanding of internalsToo much hype/marketing bullshit

7http://jepsen.ioЦесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 30 / 61

Page 31: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Web Scale Random Thoughts

Random Thoughts

Amount vs Complexity8

Performance vs FlexibilityЭволюция структур данных в Яндекс.Метрике9

Дешевле, надёжнее, проще: хранение петабайтов видео и фото вОдноклассниках10

8https://www.thestrangeloop.com/2015/sessions.html9https://habrahabr.ru/company/yandex/blog/273305/

10http://2017.jokerconf.com/2017/talks/4fasygftomyekgaqaaiauo/Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 31 / 61

Page 32: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

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

Page 33: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Hash Как ещё быстрее?

Как ещё быстрее?

Hash tableАссоциативный массив, отображающий ключи в значенияa:

1 С помощью хэш-функции от ключа находим индекс в массивеbucket’ов

2 Перебираем ключи в найденном bucket’е до совпадения3 Извлекаем значениеahttp://en.wikipedia.org/wiki/Hash_table

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 33 / 61

Page 34: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Hash Пример

Пример

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 34 / 61

Page 35: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Hash Hash table: сложность операций

Hash table: сложность операций

get(): O(1)insert(): O(1)delete(): O(1)append(): O(1)

ДопущенияПри равномерной функции хэшированияБез учёта ребалансировки

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 35 / 61

Page 36: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Hash Подводные камни

Подводные камни

Выбор функции хэшированияРазрешение коллизий:

Separate chaining — лишняя память, CPU cache missesOpen addressing — элементов не больше 70% размера массива, CPUcache pollution

Resize & rehashConcurrency

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 36 / 61

Page 37: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Hash Материалы

Материалы

java.util.HashMapjava.util.concurrent.ConcurrentHashMaphttp://en.wikipedia.org/wiki/Hash_tableChris Okasaki. Purely Functional Data Structures11

11http://www.cs.cmu.edu/~rwh/theses/okasaki.pdfЦесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 37 / 61

Page 38: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Cache Классические архитектуры Web-приложений

Классические архитектуры Web-приложений

Как взаимодействуют с хранилищамиКакие проблемы пытаются решитьКаким образом

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 38 / 61

Page 39: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Cache Трёхзвенный клиент-сервер

Трёхзвенный клиент-сервер

Зачем нужен Server:Преобразование форматовЛогика: проверить, посчитать, ...Гибкость

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 39 / 61

Page 40: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Cache Нагрузка растёт

Нагрузка растёт

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 40 / 61

Page 41: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Cache Нагрузка ещё больше

Нагрузка ещё больше

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 41 / 61

Page 42: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

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 response8 }9 }

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 42 / 61

Page 43: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Cache Анализ cache per server

Анализ cache per server

ДостоинстваСнизили нагрузку на CPU и БД (если нормальный cache hit ratio)

НедостаткиВ каждом cache одинаковые значения«Лишние» вычисления (нагрузка на CPU)Ограниченный размер каждого cacheПолучили спектр проблем с апгрейдом системыНужны политики «протухания» и вытесненияНужно «прогревать» кэш или перезапускать сервера постепенно

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 43 / 61

Page 44: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Cache Distributed cache

Distributed cache

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 44 / 61

Page 45: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

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

Page 46: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Cache Анализ distributed cache

Анализ distributed cache

ДостоинстваСчитаем всё (примерно) один разБольше суммарный объёмБольше влезет значений

НедостаткиОстался спектр проблем с апгрейдом системыНужны политики «протухания» (TTL) и вытеснения (LRU)Нужно «прогревать» кэш

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 46 / 61

Page 47: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

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 ServicesIn-memoryКлюч — строка (до 250 байт)Многопоточный + libeventLRU + TTL (up to 30 days)Простой текстовый и бинарный протокол: set, add, replace,append, prepend, get, delete, ...

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 47 / 61

Page 48: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Cache Проблема: Изменение кластера memcached

Проблема: Изменение кластера memcached

ПричиныСписок серверов в клиентеКоличество серверов в hash-функции

РешенияСервис-proxy перед memcachedConsistent hashing

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 48 / 61

Page 49: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Cache Сервис-proxy

Сервис-proxy

Слушает клиентский портХэширует ключ и проксирует запросДержит соединения ко всем экземплярам cache

Недостатки+1 сетевой hopВесь трафик через одну точкуSPOF

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 49 / 61

Page 50: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Cache Consistent hashing

Consistent hashing

ОпределениеWhen a hash table is resized and consistent hashing is used, only K/nkeys need to be remapped on average, where K is the number of keys,and n is the number of slotsa.

ahttp://en.wikipedia.org/wiki/Consistent_hashing

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 50 / 61

Page 51: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

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.last5 slots.indexWhere(hash < _)6 }

Если переполняется слот 200-299, то подвигаем:1 val slots = Vector(100, 200, 275, 325, 400)

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 51 / 61

Page 52: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Cache Consistent hashing: по-взрослому

Consistent hashing: по-взрослому

http://docs.basho.com/riak/1.1.4/references/appendices/concepts/#Clustering

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 52 / 61

Page 53: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Cache Consistent hashing: репликация

Consistent hashing: репликация

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 53 / 61

Page 54: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Cache Проблема: Перезапуск кластера

Проблема: Перезапуск кластера

ПричиныIn-memory ⇒ пустой кэш ⇒ БД «ложится»

Решения«Разогрев»Persistent storage

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 54 / 61

Page 55: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

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, TwitterKey-Value, but Value: String, List, Set, SortedSet, HashIn-memory and/or Snapshots and/or Commit LogsSingle-threaded by design + Master-slaveОпционально LRU и/или TTLОчень богатый API13

12http://db-engines.com/en/ranking/key-value+store13http://redis.io/commands

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 55 / 61

Page 56: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Проект

Проект

Key-Value хранилищеCRUD APIIn-memoryPersistentБыстрое

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 56 / 61

Page 57: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Проект Базовые технологии

Базовые технологии

Java 8/9JDKhttps://github.com/odnoklassniki/one-nioФайл(ы)/Embedded DBMS/one.nio.mem.*

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 57 / 61

Page 58: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

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

Организация

1 https://github.com/polis-mail-ru2 Форкаем проект 2018-db-kv3 Реализуем хранилище, в цикле:

ОтлаживаемРасширяем и прогоняем модульные тестыПодтягиваем тесты из upstream

4 Посылаем pull request в бранч со своим именем5 Исправляем замечания6 Получаем баллы

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 58 / 61

Page 59: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Проект Обязательные этапы

Обязательные этапы

1 In-memoryФункциональные тесты

2 PersistenceОтказоустойчивость

3 OptimizationИндивидуальная работаФиксы производительности

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 59 / 61

Page 60: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Проект Баллы

Баллы

3 этапа x 10 балловБонусные фичи

CompactionExpireEmbedded DBMS

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 60 / 61

Page 61: Введение. Key-Value. -  · Цесько В.А. (Технополис) Введение. Key-Value. 4 апреля

Вопросы?

Вопросы?

https://polis.mail.ru/blog/view/111/https://incubos.org/contacts/Не забудьте про ДЗ

Цесько В. А. (Технополис) Введение. Key-Value. 4 апреля 2018 г. 61 / 61