SlideShare una empresa de Scribd logo
1 de 52
Descargar para leer sin conexión
Алгоритмы и структуры
данных для СУБД в
оперативной памяти
Константин Осипов
kostja@tarantool.org
http://try.tarantool.org
Содержание
It's time for a complete
rewrite!..
или почему в 2015 г.
можно и нужно создавать
новые СУБД
Database people are
logicians..
или почему инженерия
ПО не менее важна чем
красивые теории
First time is the best time!..
смотрим на аллокаторы
памяти
Deep dive...
специализированные
структуры данных для
оперативной памяти.
Архитектура СУБД
Постановка задачи - ACID
● ATOMICITY – транзакции работают по принципу “всё или
ничего” - ошибка в середине приводит к откату всех
действий транзакции
● CONSISTENCY – транзакции при модификации данных
сохраняют их консистентность
● ISOLATION - выполнение параллельных транзакций имеет
тот же эффект что и их последовательное применение
● DURABILTY – эффекты завершённых транзакций не
теряются даже в случае программного сбоя или выхода из
строя оборудования
● Isolation — выполнение параллельных транзакций имеет
тот же эффект что и их последовательное применение
Isolation
● Isolation — выполнение параллельных транзакций имеет
тот же эффект что и их последовательное применение
● Consistency без isolation не достижим
Isolation
● Isolation — выполнение параллельных транзакций имеет
тот же эффект что и их последовательное применение
● Consistency без isolation не достижим
● Пусть есть x, y, z – данные к которым осуществляется
совместный доступ
Isolation
● Isolation — выполнение параллельных транзакций имеет
тот же эффект что и их последовательное применение
● Consistency без isolation не достижим
● Пусть есть x, y, z – данные к которым осуществляется
совместный доступ
● Расписание (schedule) — возможная история
выполнения транзакций, конкретный порядок операций
чтения и записи относительно друг друга
E = r1[x] w1[x] w2[y] r2[z]
Isolation
● Если t1 транзакция использует X не допустить
модификацию X в других транзакциях до завершения t1
➔ Конкурентные транзакции работают с разными
поднаборами данных
➔ Порядок модификаций одних и тех же данных
фиксирован
● Блокировка (лок) — механизм обеспечения
эксклюзивного доступа
Isolation: классическое решение
● Мы говорим, что история выполнения транзакций
последовательна, если их действия в истории не
пересекаются:
E = r1[x] w1[y] commit1 w2[y] r2[z] commit2
● Принцип two phase locking — локи захваченные
транзакцией не должны освобождаться до commit
● Насколько это строгое требование? Предположим
обратное:
E = r1[x] r2[y] w2[x] w1[y]
- не существует сериального выполнения t1 и t2 (их всего
два — t1 t2 или t2 t1) с тем же эффектом
Формализация: serial history
● Таким образом, без 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
Stonebraker concept
Решение
● храним 100% данных в RAM
● транзакции выполняются строго последовательно в
одном потоке
● получаем настоящий serial execution
● полное отсутствие блокировок
● Шардировать всё равно придётся, поэтому бьём на
шарды сразу, с первой машины.
● t1 записала X и завершилась
● выполняется успешно t2, которая читает X
● запись t1 в журнал привела к ошибке
→ нужно уметь делать откат при ошибке записи в
журнал
Работа с журналом
Аспекты инженерии
Latency vs. throughput
Concurrency – сойство систем, глобальное состояние
которых изменяется чередующимся выполнением
независимых или частично-независимых функций или
компонент
Parallelism – система конкурентна, но один или
несколько блоков могут выполняться параллельно
Concurrency vs. parallelism
With shared state:
- locking ← not composable
- wait-free algorithms – parallelism
- hardware transactional memory
Without shared state:
- functional programming
- actor model
Подходы к concurrency
+ портабельны, просты в использовании
+ низкие издержки
- не интегрируются в poll() event loop
- могут стать hot spot
Locking
+ ещё более низкие издержки
- сложно реализовать и тестировать
- не интегрируются в event loop
- могут стать hot spot
Wait-free algorithms
● Дедлоки
● Конвоирование, хотспоты
● Лайвлоки
● Голодание
● Не универсальны – гранулярность статична, возможна
инверсия приоритетов
Locks are not composable!
Wait-free algorithms (2)
● нет глобального состояния
● main = f(x)
● порядок выполнения не задаётся явно, зависит от
данных
● функциональные зависимости просты для
распараллеливания
→ composable
- нет языков достаточно эффективных для системного
программирования
Functional programming
● 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 битном адресном пространстве
slab_arena – quotas and VSS
● глобальна, thread-safe
● MAP_SHARED или MAP_PRIVATE
● поддержка квот, несколько арен в одной квоте
● size-aligned, preallocated
prealloc
slab 4M
slab_cache – buddy system
● thread local
● size-aligned
mempool – object pool
● thread local
● objects of the same size
object size = 26
slab size = 2048, 76 objects per slab
small – slab allocator with MVCC
● collection of mempools for size classes
void *small_alloc(small *, size_t size)
void small_free(small *, void *, size_t size)
object size = 24
object size = 32
object size = 40
object size = 48
ibuf, obuf, region
● Аллокаторые это контейнеры, а контейнеры это
аллокаторы, различие только в наличии итерации по
объектам
● Аллокаторы это буфера, а буфера это аллокаторы,
различие лишь в возможности создания точки отката и
восстанвлении на точку в прошлом
Структуры данных в RAM
Матрас
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
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
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
Будущее: log-structured memory
The daily latency spike
Хэш-таблица Light
Bucket: 16 bytes: 8 – value, 4 – hash, 4 – next bucket ID in chain
Table: Buckets with ID: [0..M)
Hash → Bucket ID: B(Hash) =
Cover: C = M rounded up to the closest power of two; c = C / 2
Hash % C < M → Hash % C
Hash % C ≥ M → Hash % C
True bucket with ID holds a value with hash: B(hash) == ID
Chain bucket with ID holds a value with hash: B(hash) != ID, but the
another true bucket with ID = B(hash) starts a chain that contains this chain bucket
0x40 0x42 0x16 5 0xAB 0x44
value
hash next
0 1 2 3 4
0x32 1
5
M = 6
C = 8, c = 4
0x40 % 8 = 0 0x16 % 8 = 6
0x16 % 4 = 2
0xAB % 8 = 3 0x44 % 8 = 4 0x32 % 8 = 2
0x40 0x32 2 0xAB 0x44
0 1 2 3 4 5
M = 7
C = 8, c = 4
0x40 % 8 = 0 0xAB % 8 = 3 0x44 % 8 = 4
0x42 % 8 = 2
6
0x16 5
0x16 % 8 = 6
0x42
0x32 % 8 = 20x42 % 8 = 2
Классические деревья: overhead
● b-tree: compact and cache-oblivious
● b+-tree: cheap iteration
● b*-tree: more compact and more symmetric
● pointer compaction via matras
● MVCC via matras
bps_tree
Inner nodes
Leaf nodes
● K-ary (k-way) tree
● well balanced
● same size for leafs and
inner nodes (512 B)
● non-root nodes are filled
[2M/3..M]
● root may be filled [1..M]
bps_tree
Leaf node
Header Tuple[0] Tuple[1] Tuple[2] ...
Up to 62 pointers to tuples, sorted by key definition
Inner node
Header MaxTuple[0] MaxTuple[1] ... Id[0] Id[1] Id[2] ...
Matras IDs of subtrees
MaxTuple[i - 1] < {All tuples in subtree i} ≤ MaxTuple[i + 1]
Up to 42 subtrees with their maximal tuples (except last subtree)
Subtrees are sorted by their maximal tuples
Maximal tuple of maximal subtree is stored in upper node
Maximal tuple of maximal subtree in root is stored in special place of tree
Maximal tuple pointer in leaf node is copied exactly once somewhere in
upper nodes of the tree, except of last tuple, that stored in special place
bps_tree
Search / find insertion / deletion point
Binary search (lower bound) in node
42 4 6318 80
i = 2
Root, inner node
20 5245 60
i = 1
Searching
Inner node
23 3530 40 Leaf node42 43 45
!
About log(N) comparisons (N – number of tuples in tree)
About log(N)/log(M) block scans (M – average number of tuples in node)
bps_tree
1) Find insertion point (path)
2) If leaf has space – insert into leaf; done (most common case)
3) If 2 closest siblings has space – rearrange and insert; done
4) Split the (full) node and 2 closest (full) siblings into 4 nodes and insert
5) Insert id of new node into parent – inner node; done
In every case update MaxTuple in parents if it's changed
7040 5010 7040 5010 42
5040 4535 55 65 706020 3010
5042 4540 7060 65553520 3010
5040 4535 55 7565 7060 802515 2010 30
4235 4030 6050 55452515 2010
Root has no siblings; if full it splits into 2 nodes and new root is created
8070 7565
bps_tree: вставка
1) Find deletion point (path)
2) Delete tuple from node
3) If not less than 2*M/3 tuples left – done
70 4050 10 7040 5010 42
4) If 2 closest siblings have more than 2*M/3 tuples left – rearrange;
done 42 4540 7565 7060 802515 2010 30
6040 4530 8070 75652520 3010
4) Merge the node and 2 closest siblings into 2 nodes
5) Delete id of deleted node from parent – inner node; done
In every case update MaxTuple in parents if it's changed
42 4540 65 706020 3010
7060 65454015 2010
Root is handled specially
bps_tree: удаление
● worst case about 12 bytes per tuple (4 bytes overhead)
● average case about 10 bytes per tuple (2 bytes overhead)
● worst case about 1.1 log(N) comparisons per search
(AVL-tree about 1.45 log(N), RB-tree about 2 log(N)
● great cache hit ratio
● MVCC over matras
bps_tree: итоги

Más contenido relacionado

La actualidad más candente

Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)Ontico
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Ontico
 
Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Ontico
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Ontico
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)Ontico
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)Ontico
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Ontico
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Ontico
 
Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Ontico
 
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Ontico
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Ontico
 
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Ontico
 
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...Ontico
 
Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Vadim Madison
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Ontico
 
Дмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в BadooДмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в BadooMail.ru Group
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Ontico
 
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...Ontico
 

La actualidad más candente (20)

Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
 
Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
 
Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)
 
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
 
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
 
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
 
Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
 
Дмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в BadooДмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в Badoo
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
 
Mysql vs postgresql
Mysql vs postgresqlMysql vs postgresql
Mysql vs postgresql
 

Destacado

Оптимизации уровня CPU, Андрей Акиньшин (JetBrains)
Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)
Оптимизации уровня CPU, Андрей Акиньшин (JetBrains)Ontico
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...Ontico
 
шишки, набитые за 15 лет использования акторов в c++ v.001.3
шишки, набитые за 15 лет использования акторов в c++ v.001.3шишки, набитые за 15 лет использования акторов в c++ v.001.3
шишки, набитые за 15 лет использования акторов в c++ v.001.3corehard_by
 
модели акторов в с++ миф или реальность
модели акторов в с++ миф или реальностьмодели акторов в с++ миф или реальность
модели акторов в с++ миф или реальностьcorehard_by
 
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...Ontico
 
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...Ontico
 
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Ontico
 
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Ontico
 
Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)Ontico
 
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...Ontico
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...Ontico
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Ontico
 
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Ontico
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Ontico
 
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...Ontico
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)Ontico
 
Deep learning with Tensorflow in R
Deep learning with Tensorflow in RDeep learning with Tensorflow in R
Deep learning with Tensorflow in Rmikaelhuss
 
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...Ontico
 
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Ontico
 
Страх и ненависть в распределенных системах / Роман Гребенников (Findify)
Страх и ненависть в распределенных системах / Роман Гребенников (Findify)Страх и ненависть в распределенных системах / Роман Гребенников (Findify)
Страх и ненависть в распределенных системах / Роман Гребенников (Findify)Ontico
 

Destacado (20)

Оптимизации уровня CPU, Андрей Акиньшин (JetBrains)
Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)
Оптимизации уровня CPU, Андрей Акиньшин (JetBrains)
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
 
шишки, набитые за 15 лет использования акторов в c++ v.001.3
шишки, набитые за 15 лет использования акторов в c++ v.001.3шишки, набитые за 15 лет использования акторов в c++ v.001.3
шишки, набитые за 15 лет использования акторов в c++ v.001.3
 
модели акторов в с++ миф или реальность
модели акторов в с++ миф или реальностьмодели акторов в с++ миф или реальность
модели акторов в с++ миф или реальность
 
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
 
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
 
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
 
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
 
Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)
 
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
 
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
 
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
 
Deep learning with Tensorflow in R
Deep learning with Tensorflow in RDeep learning with Tensorflow in R
Deep learning with Tensorflow in R
 
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
 
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
 
Страх и ненависть в распределенных системах / Роман Гребенников (Findify)
Страх и ненависть в распределенных системах / Роман Гребенников (Findify)Страх и ненависть в распределенных системах / Роман Гребенников (Findify)
Страх и ненависть в распределенных системах / Роман Гребенников (Findify)
 

Similar a Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Tarantool.org)

Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памятиЕвгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памятиFProg
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Ontico
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Ontico
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XCPostgreSQL-Consulting
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Ontico
 
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresProit-people
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Ontico
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012Alex Tutubalin
 
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
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Mikhail Kurnosov
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213
 
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Yandex
 
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данныхОлег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данныхSiel01
 
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryИнтервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryTatyanazaxarova
 
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Badoo Development
 
Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008Ontico
 

Similar a Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Tarantool.org) (20)

Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памятиЕвгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
 
Purely practical data structures
Purely practical data structuresPurely practical data structures
Purely practical data structures
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
 
Cassandra db
Cassandra dbCassandra db
Cassandra db
 
Multimaster2
Multimaster2Multimaster2
Multimaster2
 
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
 
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данныхОлег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
 
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryИнтервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
 
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
 
Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008
 

Más de Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 

Más de Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Tarantool.org)

  • 1. Алгоритмы и структуры данных для СУБД в оперативной памяти Константин Осипов kostja@tarantool.org http://try.tarantool.org
  • 2. Содержание It's time for a complete rewrite!.. или почему в 2015 г. можно и нужно создавать новые СУБД Database people are logicians.. или почему инженерия ПО не менее важна чем красивые теории First time is the best time!.. смотрим на аллокаторы памяти Deep dive... специализированные структуры данных для оперативной памяти.
  • 4. Постановка задачи - ACID ● ATOMICITY – транзакции работают по принципу “всё или ничего” - ошибка в середине приводит к откату всех действий транзакции ● CONSISTENCY – транзакции при модификации данных сохраняют их консистентность ● ISOLATION - выполнение параллельных транзакций имеет тот же эффект что и их последовательное применение ● DURABILTY – эффекты завершённых транзакций не теряются даже в случае программного сбоя или выхода из строя оборудования
  • 5. ● Isolation — выполнение параллельных транзакций имеет тот же эффект что и их последовательное применение Isolation
  • 6. ● Isolation — выполнение параллельных транзакций имеет тот же эффект что и их последовательное применение ● Consistency без isolation не достижим Isolation
  • 7. ● Isolation — выполнение параллельных транзакций имеет тот же эффект что и их последовательное применение ● Consistency без isolation не достижим ● Пусть есть x, y, z – данные к которым осуществляется совместный доступ Isolation
  • 8. ● Isolation — выполнение параллельных транзакций имеет тот же эффект что и их последовательное применение ● Consistency без isolation не достижим ● Пусть есть x, y, z – данные к которым осуществляется совместный доступ ● Расписание (schedule) — возможная история выполнения транзакций, конкретный порядок операций чтения и записи относительно друг друга E = r1[x] w1[x] w2[y] r2[z] Isolation
  • 9. ● Если t1 транзакция использует X не допустить модификацию X в других транзакциях до завершения t1 ➔ Конкурентные транзакции работают с разными поднаборами данных ➔ Порядок модификаций одних и тех же данных фиксирован ● Блокировка (лок) — механизм обеспечения эксклюзивного доступа Isolation: классическое решение
  • 10. ● Мы говорим, что история выполнения транзакций последовательна, если их действия в истории не пересекаются: E = r1[x] w1[y] commit1 w2[y] r2[z] commit2 ● Принцип two phase locking — локи захваченные транзакцией не должны освобождаться до commit ● Насколько это строгое требование? Предположим обратное: E = r1[x] r2[y] w2[x] w1[y] - не существует сериального выполнения t1 и t2 (их всего два — t1 t2 или t2 t1) с тем же эффектом Формализация: serial history
  • 11. ● Таким образом, без 2PL история выполнения может оказаться несериализуемой ● Достаточно ли 2PL? Да: Two-Phase Locking Theorem: If all transactions in an execution are two-phase locked, then the execution is serializable. 2PL
  • 12. ● Много пользователей = много потоков, требуется latching, т.е. разграничение доступа к ресурсам ● Внешнее хранение = два представления данных, в памяти и на диске Другие проблемы
  • 13. Другие проблемы (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
  • 15. Решение ● храним 100% данных в RAM ● транзакции выполняются строго последовательно в одном потоке ● получаем настоящий serial execution ● полное отсутствие блокировок ● Шардировать всё равно придётся, поэтому бьём на шарды сразу, с первой машины.
  • 16. ● t1 записала X и завершилась ● выполняется успешно t2, которая читает X ● запись t1 в журнал привела к ошибке → нужно уметь делать откат при ошибке записи в журнал Работа с журналом
  • 17.
  • 20. Concurrency – сойство систем, глобальное состояние которых изменяется чередующимся выполнением независимых или частично-независимых функций или компонент Parallelism – система конкурентна, но один или несколько блоков могут выполняться параллельно Concurrency vs. parallelism
  • 21. With shared state: - locking ← not composable - wait-free algorithms – parallelism - hardware transactional memory Without shared state: - functional programming - actor model Подходы к concurrency
  • 22. + портабельны, просты в использовании + низкие издержки - не интегрируются в poll() event loop - могут стать hot spot Locking
  • 23. + ещё более низкие издержки - сложно реализовать и тестировать - не интегрируются в event loop - могут стать hot spot Wait-free algorithms
  • 24. ● Дедлоки ● Конвоирование, хотспоты ● Лайвлоки ● Голодание ● Не универсальны – гранулярность статична, возможна инверсия приоритетов Locks are not composable!
  • 26. ● нет глобального состояния ● main = f(x) ● порядок выполнения не задаётся явно, зависит от данных ● функциональные зависимости просты для распараллеливания → composable - нет языков достаточно эффективных для системного программирования Functional programming
  • 27. ● Actors – Посылают сообщения – Получают и обрабатывают сообщения – Создают actors ● нет глобального состояния ● unbounded non-determinism :( composable! Actor model
  • 28. Intel Xeon E5 микроархитектура
  • 29. Intel Xeon E5 чип
  • 30. ● кооперативная многозадачность внутри потока ● обмен сообщениями между потоками и узлами → Erlang “на коленке” Выводы: actor model в Tarantool
  • 32. void *malloc(size_t size);  void free(void *); ● работает в любом потоке ● для любого размера (совсем любого) ● “средние по больнице” требования к фрагментации Классический менеджер памяти
  • 33. ● не нужна синхронизация ● нужна поддержка квот ● нужна поддержка консистентных снимков памяти → специализированные аллокаторы памяти Аллокация в одном потоке
  • 34. Аллокаторы 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 битном адресном пространстве
  • 35. slab_arena – quotas and VSS ● глобальна, thread-safe ● MAP_SHARED или MAP_PRIVATE ● поддержка квот, несколько арен в одной квоте ● size-aligned, preallocated prealloc slab 4M
  • 36. slab_cache – buddy system ● thread local ● size-aligned
  • 37. mempool – object pool ● thread local ● objects of the same size object size = 26 slab size = 2048, 76 objects per slab
  • 38. small – slab allocator with MVCC ● collection of mempools for size classes void *small_alloc(small *, size_t size) void small_free(small *, void *, size_t size) object size = 24 object size = 32 object size = 40 object size = 48
  • 39. ibuf, obuf, region ● Аллокаторые это контейнеры, а контейнеры это аллокаторы, различие только в наличии итерации по объектам ● Аллокаторы это буфера, а буфера это аллокаторы, различие лишь в возможности создания точки отката и восстанвлении на точку в прошлом
  • 41. Матрас 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 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 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
  • 44. Хэш-таблица Light Bucket: 16 bytes: 8 – value, 4 – hash, 4 – next bucket ID in chain Table: Buckets with ID: [0..M) Hash → Bucket ID: B(Hash) = Cover: C = M rounded up to the closest power of two; c = C / 2 Hash % C < M → Hash % C Hash % C ≥ M → Hash % C True bucket with ID holds a value with hash: B(hash) == ID Chain bucket with ID holds a value with hash: B(hash) != ID, but the another true bucket with ID = B(hash) starts a chain that contains this chain bucket 0x40 0x42 0x16 5 0xAB 0x44 value hash next 0 1 2 3 4 0x32 1 5 M = 6 C = 8, c = 4 0x40 % 8 = 0 0x16 % 8 = 6 0x16 % 4 = 2 0xAB % 8 = 3 0x44 % 8 = 4 0x32 % 8 = 2 0x40 0x32 2 0xAB 0x44 0 1 2 3 4 5 M = 7 C = 8, c = 4 0x40 % 8 = 0 0xAB % 8 = 3 0x44 % 8 = 4 0x42 % 8 = 2 6 0x16 5 0x16 % 8 = 6 0x42 0x32 % 8 = 20x42 % 8 = 2
  • 46. ● b-tree: compact and cache-oblivious ● b+-tree: cheap iteration ● b*-tree: more compact and more symmetric ● pointer compaction via matras ● MVCC via matras bps_tree
  • 47. Inner nodes Leaf nodes ● K-ary (k-way) tree ● well balanced ● same size for leafs and inner nodes (512 B) ● non-root nodes are filled [2M/3..M] ● root may be filled [1..M] bps_tree
  • 48. Leaf node Header Tuple[0] Tuple[1] Tuple[2] ... Up to 62 pointers to tuples, sorted by key definition Inner node Header MaxTuple[0] MaxTuple[1] ... Id[0] Id[1] Id[2] ... Matras IDs of subtrees MaxTuple[i - 1] < {All tuples in subtree i} ≤ MaxTuple[i + 1] Up to 42 subtrees with their maximal tuples (except last subtree) Subtrees are sorted by their maximal tuples Maximal tuple of maximal subtree is stored in upper node Maximal tuple of maximal subtree in root is stored in special place of tree Maximal tuple pointer in leaf node is copied exactly once somewhere in upper nodes of the tree, except of last tuple, that stored in special place bps_tree
  • 49. Search / find insertion / deletion point Binary search (lower bound) in node 42 4 6318 80 i = 2 Root, inner node 20 5245 60 i = 1 Searching Inner node 23 3530 40 Leaf node42 43 45 ! About log(N) comparisons (N – number of tuples in tree) About log(N)/log(M) block scans (M – average number of tuples in node) bps_tree
  • 50. 1) Find insertion point (path) 2) If leaf has space – insert into leaf; done (most common case) 3) If 2 closest siblings has space – rearrange and insert; done 4) Split the (full) node and 2 closest (full) siblings into 4 nodes and insert 5) Insert id of new node into parent – inner node; done In every case update MaxTuple in parents if it's changed 7040 5010 7040 5010 42 5040 4535 55 65 706020 3010 5042 4540 7060 65553520 3010 5040 4535 55 7565 7060 802515 2010 30 4235 4030 6050 55452515 2010 Root has no siblings; if full it splits into 2 nodes and new root is created 8070 7565 bps_tree: вставка
  • 51. 1) Find deletion point (path) 2) Delete tuple from node 3) If not less than 2*M/3 tuples left – done 70 4050 10 7040 5010 42 4) If 2 closest siblings have more than 2*M/3 tuples left – rearrange; done 42 4540 7565 7060 802515 2010 30 6040 4530 8070 75652520 3010 4) Merge the node and 2 closest siblings into 2 nodes 5) Delete id of deleted node from parent – inner node; done In every case update MaxTuple in parents if it's changed 42 4540 65 706020 3010 7060 65454015 2010 Root is handled specially bps_tree: удаление
  • 52. ● worst case about 12 bytes per tuple (4 bytes overhead) ● average case about 10 bytes per tuple (2 bytes overhead) ● worst case about 1.1 log(N) comparisons per search (AVL-tree about 1.45 log(N), RB-tree about 2 log(N) ● great cache hit ratio ● MVCC over matras bps_tree: итоги