23
Хранение данных на виниле [email protected] Konstantin Osipov

Хранение данных на виниле / Константин Осипов (tarantool.org)

  • Upload
    ontico

  • View
    138

  • Download
    10

Embed Size (px)

Citation preview

Page 1: Хранение данных на виниле / Константин Осипов (tarantool.org)

Хранение данных на виниле

[email protected] Osipov

Page 2: Хранение данных на виниле / Константин Осипов (tarantool.org)

План доклада

● вводный обзор log structured merge tree● Устройство vinyl engine в Tarantool● варианты использования● планы

Page 3: Хранение данных на виниле / Константин Осипов (tarantool.org)

Классическое LSM

Page 4: Хранение данных на виниле / Константин Осипов (tarantool.org)

DELETE в LSM tree

● нет возможности удалять из всех уровней● вставляется маркер удаления

Page 5: Хранение данных на виниле / Константин Осипов (tarantool.org)

SELECT в LSM tree

● ищет во всех уровнях, пока не найдёт нужный ключ● слияние результатов поиска

Page 6: Хранение данных на виниле / Константин Осипов (tarantool.org)

LSM: алгортмический потолок

LSM tree B-tree

Search K * O(log N/B) O(logB N)

Delete O(logB N/Bε) O(logB N)

Insert O(logB N/Bε) O(logB N)

Page 7: Хранение данных на виниле / Константин Осипов (tarantool.org)

RUM conjecture

Page 8: Хранение данных на виниле / Константин Осипов (tarantool.org)

Проблемы применения LSM в Web/OLTP

1. Медленные чтения: read amplification2. Потенциально очень много пишем на диск, много больше чем сами данные: write amplification3. Храним мусор: space amplification4. Непредсказуемая работа в моменты перестроения дерева: latency spikes

Page 9: Хранение данных на виниле / Константин Осипов (tarantool.org)

Vinyl: memtable, sorted run, dump & merge

● хранит операции, а не данные: REPLACE, DELETE, UPSERT● каждое значение помечено LSN ● append-only, garbage collection, message passing

Page 10: Хранение данных на виниле / Константин Осипов (tarantool.org)

Vinyl: чтение

Page 11: Хранение данных на виниле / Константин Осипов (tarantool.org)

Делаем latency предсказуемым

● упреждающие dumpы● throttling

Page 12: Хранение данных на виниле / Константин Осипов (tarantool.org)

Снижаем read amplification

● page index● tuple range cache● multi-level compaction

Page 13: Хранение данных на виниле / Константин Осипов (tarantool.org)

Снижаем write amplification

● multi-level compaction● ranges

Page 14: Хранение данных на виниле / Константин Осипов (tarantool.org)

Снижаем space amplification

● ranges

Page 15: Хранение данных на виниле / Константин Осипов (tarantool.org)

Поддержка вторичных ключей

● хранят значение вторичного и первичного ключа● нивелируют преимущества REPLACE/UPSERT

Page 16: Хранение данных на виниле / Константин Осипов (tarantool.org)

UPSERT

● non-reading update or insert● отложенное выполнение● есть только в Tarantool● squashing

Page 17: Хранение данных на виниле / Константин Осипов (tarantool.org)

Планировщик

● единственная активная сущность в Vinyl● обрабатывает две очереди: dump и merge● очереди содержат все ranges

Page 18: Хранение данных на виниле / Константин Осипов (tarantool.org)

Transactions

● MVCC● the first transaction to commit wins● no waits, no deadlocks, only aborts● yields don’t abort transactions

Page 19: Хранение данных на виниле / Константин Осипов (tarantool.org)

Репликация

Работает из коробки

Page 20: Хранение данных на виниле / Константин Осипов (tarantool.org)

Ограничения

● небольшие таплы● помните об оверхеде вторичных ключей● несколько тысяч файловых дескрипторов● просто планировщик транзакций: долгие read-write

транзакции могут абортиться● нет cross-engine транзакций● space amplification требует до 2х резервирования

Page 21: Хранение данных на виниле / Константин Осипов (tarantool.org)

Ссылки

Leveled compaction in Apache Cassandrahttp://www.datastax.com/dev/blog/leveled-compaction-in-apache-cassandrahttp://www.scylladb.com/kb/compaction/https://github.com/facebook/rocksdb/wiki/Universal-Compactionhttps://dom.as/2015/04/09/how-innodb-lost-its-advantage/

Page 22: Хранение данных на виниле / Константин Осипов (tarantool.org)

@kostja_osipov

Thank you!

fb.com/TarantoolDatabase

[email protected]

Page 23: Хранение данных на виниле / Константин Осипов (tarantool.org)

Делаем latency предсказуемым

● упреждающие dumpы● throttling