SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
Алгоритмы и структуры
данных для СУБД
в оперативной памяти
Konstantin
Osipov
Software
engineer
http://try.tarantool.org
Содержание
It's time for a complete
rewrite!..
или почему сегодня можно и
нужно создавать новые
СУБД
Database people are
logicians..
или почему инженерия ПО
не менее важна чем
красивые теории
First time is the best time!..
смотрим на аллокаторы
памяти
Deep dive...
специализированные
структуры данных для
оперативной памяти.
Архитектура СУБД
Постановка задачи - ACID
● ATOMICITY – транзакции работают по принципу “всё или
ничего” - ошибка в середине приводит к откату всех
действий транзакции
● CONSISTENCY – транзакции при модификации данных
сохраняют их консистентность
● ISOLATION - выполнение параллельных транзакций имеет
тот же эффект что и их последовательное применение
● DURABILTY – эффекты завершённых транзакций не
теряются даже в случае программного сбоя или выхода из
строя оборудования
● Isolation — выполнение параллельных транзакций имеет
тот же эффект что и их последовательное применение
● Consistency без isolation не достижим
● Пусть есть x, y, z – данные к которым осуществляется
совместный доступ
● Расписание (schedule) — возможная история
выполнения транзакций, конкретный порядок операций
чтения и записи относительно друг друга
E = r1[x] w1[x] w2[y] r2[z]
Isolation
● Если t1 транзакция использует X не допустить
модификацию X в других транзакциях до завершения t1
➔ Конкурентные транзакции работают с разными
поднаборами данных
➔ Порядок модификаций одних и тех же данных
фиксирован
● Блокировка (лок) — механизм обеспечения
эксклюзивного доступа
Isolation: классическое решение
● Таким образом, без 2PL история выполнения может
оказаться несериализуемой
● Достаточно ли 2PL? Да:
Two-Phase Locking Theorem: If all transactions in an
execution are two-phase locked, then the execution is
serializable.
2PL
● Много пользователей = много потоков, требуется
latching, т.е. разграничение доступа к ресурсам
● Внешнее хранение = два представления данных, в
памяти и на диске
Другие проблемы
Другие проблемы (2)
page header
modification log
page trailer
page directory
compressed
data
BLOB pointers
empty space
page header
page trailer
row offset array
row rowrow
Row
row
row
row rowrow
trx id
field 1
roll pointer
field pointers
field 2 field n
Константин Осипов
Решение
● храним 100% данных в RAM
● транзакции выполняются строго последовательно в
одном потоке
● получаем настоящий serial execution без блокировок!
● Шардировать всё равно придётся, поэтому бьём на
шарды сразу, с первой машины.
● t1 записала X и завершилась
● выполняется успешно t2, которая читает X
● запись t1 в журнал привела к ошибке
→ нужно уметь делать откат при ошибке записи в
журнал
Работа с журналом
Константин Осипов
Аспекты инженерии
Latency vs. throughput
Concurrency – сойство систем,
глобальное состояние которых
изменяется чередующимся
выполнением независимых или
частично-независимых функций
или компонент
Parallelism – система
конкурентна, но один или
несколько блоков могут
выполняться параллельно
Insight: concurrency != parallelism
With shared state:
- locking ← not composable
- wait-free algorithms – parallelism
- hardware transactional memory
Without shared state:
- functional programming
- actor model
Подходы к concurrency
● нет глобального состояния
● порядок выполнения не задаётся явно, зависит от
данных
● функциональные зависимости просты для
распараллеливания
→ composable
- нет языков достаточно эффективных для системного
программирования
Functional programming
+ портабельны, просты в использовании
+ низкие издержки
- не интегрируются в poll() event loop
- могут стать hot spot
Locking
● Дедлоки
● Конвоирование, хотспоты
● Лайвлоки
● Голодание
● Не универсальны – гранулярность статична, возможна
инверсия приоритетов
Locks are not composable!
+ ещё более низкие издержки
- сложно реализовать и тестировать
- не интегрируются в event loop
- могут стать hot spot
Wait-free algorithms
● Actors
– посылают, получают,
обрабатывают сообщения
– создают новых actors
● нет глобального состояния
- unbounded non-determinism
+ composable!
Actor model
Intel Xeon E5 микроархитектура
Intel Xeon E5 чип
● кооперативная
многозадачность внутри
потока
● обмен сообщениями
между потоками и узлами
→ Erlang “на коленке”
Выводы: actor model в Tarantool
Память, память, память
void *malloc(size_t size); 
void free(void *);
● работает в любом потоке
● для любого размера (совсем любого)
● “средние по больнице” требования к фрагментации
Классический менеджер памяти
● не нужна синхронизация
● нужна поддержка квот
● нужна поддержка консистентных снимков памяти
→ специализированные аллокаторы памяти
Аллокация в одном потоке
Аллокаторы Tarantool
● http://github.com/tarantool/small
● quota, slab_arena – аллоцирует данные выровненными 4МБ блоков,
поддерживает квоты, multi-threaded
● slab_cache – buddy system для выровненных блоков от 4КБ до 4МБ
● mempool - позволяет аллоцировать и освободждать участки одинакового
размера
● region_alloc – позволяет аллоцировать память, но не позволяет её
освобождать :)
● small – колллекция pool allocators для разных типоразмеров
● matras – аллокатор для выровненных блоков, работающий в 32 битном
адресном пространстве
Матрас
Extent size: 16 kB Block size: 16 B
Block id: 32 bit 0 0 0 0 0 0 0 0 1 0 1
0 0 0 0 0 0 0 0 1 0 1
id0 : high 11 bit
id1 : middle 11 bit
id2 : low 10 bit
0 0 0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1
Матрас id2 : low 10 bit
L0 extent: array of 2048
pointers to L1 extents
Use id0 as index to find
pointer to L1 extent
L1 extents:
arrays of
2048
pointers to
L2 extents
L2 extents:
arrays of
1024 blocks
Use id1 as index to find
pointer to L2 extent
Use id2 as index to the block
Log-structured memory
Структуры данных
● b+*-tree: compact, cache-
oblivious, transactional
● worst case about 12 bytes per
tuple (4 bytes overhead),
average is 10
● worst case about 1.1 log(N)
comparisons per search
(AVL-tree about 1.45 log(N),
RB-tree about 2 log(N)
Хэши и деревья
● hash: linear hashing for
secondary storage
● bucket size is 5 slots
● transactional
The daily latency spike
● СУБД в оперативной памяти – отдельный вид технологии
● На создание такой технологии требуются десятки
человеко-лет R&D
● В результате имеем честный выигрыш по
производительности в 10 раз и больше
● Результат доступен по адресу
http://download.tarantool.org
Главное
@kostja_osipov
Konstantin
Osipov
Software
engineer
Tarantool
Вопросы?
fb.com/TarantoolDatabase
www.tarantool.orgkostja@tarantool.org

Contenu connexe

Tendances

Профилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахПрофилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахAleksander Alekseev
 
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...Ontico
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Ontico
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Ontico
 
Андрей Акиньшин
Андрей АкиньшинАндрей Акиньшин
Андрей АкиньшинCodeFest
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Ontico
 
Benchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDBenchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDAlex Chistyakov
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...Ontico
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Ontico
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайOntico
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
 
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)Ontico
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Ontico
 
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Ontico
 
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Ontico
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)Ontico
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Ontico
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)Ontico
 
Prometheus мониторинг микросервисных приложений / Виталий Левченко
Prometheus мониторинг микросервисных приложений / Виталий ЛевченкоPrometheus мониторинг микросервисных приложений / Виталий Левченко
Prometheus мониторинг микросервисных приложений / Виталий ЛевченкоOntico
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Ontico
 

Tendances (20)

Профилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахПрофилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системах
 
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
 
Андрей Акиньшин
Андрей АкиньшинАндрей Акиньшин
Андрей Акиньшин
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
 
Benchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDBenchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSD
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
 
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
 
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
 
Prometheus мониторинг микросервисных приложений / Виталий Левченко
Prometheus мониторинг микросервисных приложений / Виталий ЛевченкоPrometheus мониторинг микросервисных приложений / Виталий Левченко
Prometheus мониторинг микросервисных приложений / Виталий Левченко
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
 

En vedette

Дмитрий Стогов
Дмитрий СтоговДмитрий Стогов
Дмитрий СтоговCodeFest
 
Maurice de Beijer
Maurice de BeijerMaurice de Beijer
Maurice de BeijerCodeFest
 
Аналитика над петабайтами в реальном времени
Аналитика над петабайтами в реальном времениАналитика над петабайтами в реальном времени
Аналитика над петабайтами в реальном времениCodeFest
 
Степан Колесников
Степан КолесниковСтепан Колесников
Степан КолесниковCodeFest
 
Кирилл Харьков
Кирилл ХарьковКирилл Харьков
Кирилл ХарьковCodeFest
 
Саша Гладких и Андрей Старков
Саша Гладких и Андрей СтарковСаша Гладких и Андрей Старков
Саша Гладких и Андрей СтарковCodeFest
 
Типичные проблемы с массовыми рассылками и как их избежать
Типичные проблемы с массовыми рассылками и как их избежатьТипичные проблемы с массовыми рассылками и как их избежать
Типичные проблемы с массовыми рассылками и как их избежатьtfmailru
 
Павел Мочалкин
Павел МочалкинПавел Мочалкин
Павел МочалкинCodeFest
 
Кирилл Алешин - Big Data и Lambda архитектура на практике
Кирилл Алешин - Big Data и Lambda архитектура на практикеКирилл Алешин - Big Data и Lambda архитектура на практике
Кирилл Алешин - Big Data и Lambda архитектура на практикеIT Share
 
Никита Липский и Владимир Парфиненко
Никита Липский и Владимир ПарфиненкоНикита Липский и Владимир Парфиненко
Никита Липский и Владимир ПарфиненкоCodeFest
 
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
Как мы строили аналитическую платформу на несколько миллиардов событии в месяцКак мы строили аналитическую платформу на несколько миллиардов событии в месяц
Как мы строили аналитическую платформу на несколько миллиардов событии в месяцMikhail Tabunov
 
nota lukisan persembahan senibina
nota lukisan persembahan senibinanota lukisan persembahan senibina
nota lukisan persembahan senibinaAishah Liman
 
Lukisan senibina
Lukisan senibinaLukisan senibina
Lukisan senibinastekkkt
 

En vedette (19)

Дмитрий Стогов
Дмитрий СтоговДмитрий Стогов
Дмитрий Стогов
 
Maurice de Beijer
Maurice de BeijerMaurice de Beijer
Maurice de Beijer
 
Аналитика над петабайтами в реальном времени
Аналитика над петабайтами в реальном времениАналитика над петабайтами в реальном времени
Аналитика над петабайтами в реальном времени
 
Tarantool_qs
 Tarantool_qs Tarantool_qs
Tarantool_qs
 
Степан Колесников
Степан КолесниковСтепан Колесников
Степан Колесников
 
Кирилл Харьков
Кирилл ХарьковКирилл Харьков
Кирилл Харьков
 
Саша Гладких и Андрей Старков
Саша Гладких и Андрей СтарковСаша Гладких и Андрей Старков
Саша Гладких и Андрей Старков
 
Chudov
ChudovChudov
Chudov
 
Osipov
OsipovOsipov
Osipov
 
Kubasov
KubasovKubasov
Kubasov
 
Типичные проблемы с массовыми рассылками и как их избежать
Типичные проблемы с массовыми рассылками и как их избежатьТипичные проблемы с массовыми рассылками и как их избежать
Типичные проблемы с массовыми рассылками и как их избежать
 
Павел Мочалкин
Павел МочалкинПавел Мочалкин
Павел Мочалкин
 
Кирилл Алешин - Big Data и Lambda архитектура на практике
Кирилл Алешин - Big Data и Lambda архитектура на практикеКирилл Алешин - Big Data и Lambda архитектура на практике
Кирилл Алешин - Big Data и Lambda архитектура на практике
 
Никита Липский и Владимир Парфиненко
Никита Липский и Владимир ПарфиненкоНикита Липский и Владимир Парфиненко
Никита Липский и Владимир Парфиненко
 
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
Как мы строили аналитическую платформу на несколько миллиардов событии в месяцКак мы строили аналитическую платформу на несколько миллиардов событии в месяц
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
 
nota lukisan persembahan senibina
nota lukisan persembahan senibinanota lukisan persembahan senibina
nota lukisan persembahan senibina
 
01 intro(prehistoric)
01 intro(prehistoric)01 intro(prehistoric)
01 intro(prehistoric)
 
Lukisan senibina
Lukisan senibinaLukisan senibina
Lukisan senibina
 
The Architecture Profession
The Architecture ProfessionThe Architecture Profession
The Architecture Profession
 

Similaire à Константин Осипов

Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Ontico
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Alexander Syrotenko
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Ontico
 
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памятиЕвгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памятиFProg
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest
 
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл КоринскийСравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл КоринскийFuenteovejuna
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Ontico
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
Software craftsmanship 17: Microservices interaction
Software craftsmanship 17: Microservices interactionSoftware craftsmanship 17: Microservices interaction
Software craftsmanship 17: Microservices interactionPavel Veinik
 
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данныхОлег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данныхSiel01
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Ontico
 
My talk on Salt and Ansible from DevConf 2014
My talk on Salt and Ansible from DevConf 2014My talk on Salt and Ansible from DevConf 2014
My talk on Salt and Ansible from DevConf 2014Alex Chistyakov
 
кластеры и суперкомпьютеры
кластеры и суперкомпьютерыкластеры и суперкомпьютеры
кластеры и суперкомпьютерыnastena07051995
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
 

Similaire à Константин Осипов (20)

Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
 
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памятиЕвгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
 
Purely practical data structures
Purely practical data structuresPurely practical data structures
Purely practical data structures
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
 
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл КоринскийСравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
 
Multithreading in go
Multithreading in goMultithreading in go
Multithreading in go
 
С++ Optimization Techniques
С++ Optimization TechniquesС++ Optimization Techniques
С++ Optimization Techniques
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Software craftsmanship 17: Microservices interaction
Software craftsmanship 17: Microservices interactionSoftware craftsmanship 17: Microservices interaction
Software craftsmanship 17: Microservices interaction
 
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данныхОлег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
 
Distributed systems
Distributed systemsDistributed systems
Distributed systems
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
 
My talk on Salt and Ansible from DevConf 2014
My talk on Salt and Ansible from DevConf 2014My talk on Salt and Ansible from DevConf 2014
My talk on Salt and Ansible from DevConf 2014
 
кластеры и суперкомпьютеры
кластеры и суперкомпьютерыкластеры и суперкомпьютеры
кластеры и суперкомпьютеры
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 

Plus de CodeFest

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита ПрокоповCodeFest
 
Денис Баталов
Денис БаталовДенис Баталов
Денис БаталовCodeFest
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена ГальцинаCodeFest
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр КалашниковCodeFest
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина ИвановаCodeFest
 
Marko Berković
Marko BerkovićMarko Berković
Marko BerkovićCodeFest
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис КортуновCodeFest
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр ЗиминCodeFest
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей КрапивенскийCodeFest
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей ИгнатовCodeFest
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай КрапивныйCodeFest
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим СмирновCodeFest
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele RialdiCodeFest
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим ПугачевCodeFest
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene GroeschkeCodeFest
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван БондаренкоCodeFest
 
Mete Atamel
Mete AtamelMete Atamel
Mete AtamelCodeFest
 

Plus de CodeFest (20)

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита Прокопов
 
Денис Баталов
Денис БаталовДенис Баталов
Денис Баталов
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена Гальцина
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр Калашников
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина Иванова
 
Marko Berković
Marko BerkovićMarko Berković
Marko Berković
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис Кортунов
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр Зимин
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей Игнатов
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай Крапивный
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим Смирнов
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene Groeschke
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван Бондаренко
 
Mete Atamel
Mete AtamelMete Atamel
Mete Atamel
 

Константин Осипов

  • 1. Алгоритмы и структуры данных для СУБД в оперативной памяти Konstantin Osipov Software engineer http://try.tarantool.org
  • 2. Содержание It's time for a complete rewrite!.. или почему сегодня можно и нужно создавать новые СУБД Database people are logicians.. или почему инженерия ПО не менее важна чем красивые теории First time is the best time!.. смотрим на аллокаторы памяти Deep dive... специализированные структуры данных для оперативной памяти.
  • 4. Постановка задачи - ACID ● ATOMICITY – транзакции работают по принципу “всё или ничего” - ошибка в середине приводит к откату всех действий транзакции ● CONSISTENCY – транзакции при модификации данных сохраняют их консистентность ● ISOLATION - выполнение параллельных транзакций имеет тот же эффект что и их последовательное применение ● DURABILTY – эффекты завершённых транзакций не теряются даже в случае программного сбоя или выхода из строя оборудования
  • 5. ● Isolation — выполнение параллельных транзакций имеет тот же эффект что и их последовательное применение ● Consistency без isolation не достижим ● Пусть есть x, y, z – данные к которым осуществляется совместный доступ ● Расписание (schedule) — возможная история выполнения транзакций, конкретный порядок операций чтения и записи относительно друг друга E = r1[x] w1[x] w2[y] r2[z] Isolation
  • 6. ● Если t1 транзакция использует X не допустить модификацию X в других транзакциях до завершения t1 ➔ Конкурентные транзакции работают с разными поднаборами данных ➔ Порядок модификаций одних и тех же данных фиксирован ● Блокировка (лок) — механизм обеспечения эксклюзивного доступа Isolation: классическое решение
  • 7. ● Таким образом, без 2PL история выполнения может оказаться несериализуемой ● Достаточно ли 2PL? Да: Two-Phase Locking Theorem: If all transactions in an execution are two-phase locked, then the execution is serializable. 2PL
  • 8. ● Много пользователей = много потоков, требуется latching, т.е. разграничение доступа к ресурсам ● Внешнее хранение = два представления данных, в памяти и на диске Другие проблемы
  • 9. Другие проблемы (2) page header modification log page trailer page directory compressed data BLOB pointers empty space page header page trailer row offset array row rowrow Row row row row rowrow trx id field 1 roll pointer field pointers field 2 field n
  • 11. Решение ● храним 100% данных в RAM ● транзакции выполняются строго последовательно в одном потоке ● получаем настоящий serial execution без блокировок! ● Шардировать всё равно придётся, поэтому бьём на шарды сразу, с первой машины.
  • 12. ● t1 записала X и завершилась ● выполняется успешно t2, которая читает X ● запись t1 в журнал привела к ошибке → нужно уметь делать откат при ошибке записи в журнал Работа с журналом
  • 16. Concurrency – сойство систем, глобальное состояние которых изменяется чередующимся выполнением независимых или частично-независимых функций или компонент Parallelism – система конкурентна, но один или несколько блоков могут выполняться параллельно Insight: concurrency != parallelism
  • 17. With shared state: - locking ← not composable - wait-free algorithms – parallelism - hardware transactional memory Without shared state: - functional programming - actor model Подходы к concurrency
  • 18. ● нет глобального состояния ● порядок выполнения не задаётся явно, зависит от данных ● функциональные зависимости просты для распараллеливания → composable - нет языков достаточно эффективных для системного программирования Functional programming
  • 19. + портабельны, просты в использовании + низкие издержки - не интегрируются в poll() event loop - могут стать hot spot Locking
  • 20. ● Дедлоки ● Конвоирование, хотспоты ● Лайвлоки ● Голодание ● Не универсальны – гранулярность статична, возможна инверсия приоритетов Locks are not composable!
  • 21. + ещё более низкие издержки - сложно реализовать и тестировать - не интегрируются в event loop - могут стать hot spot Wait-free algorithms
  • 22. ● Actors – посылают, получают, обрабатывают сообщения – создают новых actors ● нет глобального состояния - unbounded non-determinism + composable! Actor model
  • 23. Intel Xeon E5 микроархитектура
  • 24. Intel Xeon E5 чип
  • 25. ● кооперативная многозадачность внутри потока ● обмен сообщениями между потоками и узлами → Erlang “на коленке” Выводы: actor model в Tarantool
  • 27. void *malloc(size_t size);  void free(void *); ● работает в любом потоке ● для любого размера (совсем любого) ● “средние по больнице” требования к фрагментации Классический менеджер памяти
  • 28. ● не нужна синхронизация ● нужна поддержка квот ● нужна поддержка консистентных снимков памяти → специализированные аллокаторы памяти Аллокация в одном потоке
  • 29. Аллокаторы Tarantool ● http://github.com/tarantool/small ● quota, slab_arena – аллоцирует данные выровненными 4МБ блоков, поддерживает квоты, multi-threaded ● slab_cache – buddy system для выровненных блоков от 4КБ до 4МБ ● mempool - позволяет аллоцировать и освободждать участки одинакового размера ● region_alloc – позволяет аллоцировать память, но не позволяет её освобождать :) ● small – колллекция pool allocators для разных типоразмеров ● matras – аллокатор для выровненных блоков, работающий в 32 битном адресном пространстве
  • 30. Матрас Extent size: 16 kB Block size: 16 B Block id: 32 bit 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 1 id0 : high 11 bit id1 : middle 11 bit id2 : low 10 bit 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1
  • 31. Матрас id2 : low 10 bit L0 extent: array of 2048 pointers to L1 extents Use id0 as index to find pointer to L1 extent L1 extents: arrays of 2048 pointers to L2 extents L2 extents: arrays of 1024 blocks Use id1 as index to find pointer to L2 extent Use id2 as index to the block
  • 34. ● b+*-tree: compact, cache- oblivious, transactional ● worst case about 12 bytes per tuple (4 bytes overhead), average is 10 ● worst case about 1.1 log(N) comparisons per search (AVL-tree about 1.45 log(N), RB-tree about 2 log(N) Хэши и деревья ● hash: linear hashing for secondary storage ● bucket size is 5 slots ● transactional
  • 36. ● СУБД в оперативной памяти – отдельный вид технологии ● На создание такой технологии требуются десятки человеко-лет R&D ● В результате имеем честный выигрыш по производительности в 10 раз и больше ● Результат доступен по адресу http://download.tarantool.org Главное