Хранение данных на виниле / Константин Осипов (tarantool.org)
TRANSCRIPT
![Page 2: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/2.jpg)
План доклада
● вводный обзор log structured merge tree● Устройство vinyl engine в Tarantool● варианты использования● планы
![Page 3: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/3.jpg)
Классическое LSM
![Page 4: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/4.jpg)
DELETE в LSM tree
● нет возможности удалять из всех уровней● вставляется маркер удаления
![Page 5: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/5.jpg)
SELECT в LSM tree
● ищет во всех уровнях, пока не найдёт нужный ключ● слияние результатов поиска
![Page 6: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/6.jpg)
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)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/7.jpg)
RUM conjecture
![Page 8: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/8.jpg)
Проблемы применения LSM в Web/OLTP
1. Медленные чтения: read amplification2. Потенциально очень много пишем на диск, много больше чем сами данные: write amplification3. Храним мусор: space amplification4. Непредсказуемая работа в моменты перестроения дерева: latency spikes
![Page 9: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/9.jpg)
Vinyl: memtable, sorted run, dump & merge
● хранит операции, а не данные: REPLACE, DELETE, UPSERT● каждое значение помечено LSN ● append-only, garbage collection, message passing
![Page 10: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/10.jpg)
Vinyl: чтение
![Page 11: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/11.jpg)
Делаем latency предсказуемым
● упреждающие dumpы● throttling
![Page 12: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/12.jpg)
Снижаем read amplification
● page index● tuple range cache● multi-level compaction
![Page 13: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/13.jpg)
Снижаем write amplification
● multi-level compaction● ranges
![Page 14: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/14.jpg)
Снижаем space amplification
● ranges
![Page 15: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/15.jpg)
Поддержка вторичных ключей
● хранят значение вторичного и первичного ключа● нивелируют преимущества REPLACE/UPSERT
![Page 16: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/16.jpg)
UPSERT
● non-reading update or insert● отложенное выполнение● есть только в Tarantool● squashing
![Page 17: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/17.jpg)
Планировщик
● единственная активная сущность в Vinyl● обрабатывает две очереди: dump и merge● очереди содержат все ranges
![Page 18: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/18.jpg)
Transactions
● MVCC● the first transaction to commit wins● no waits, no deadlocks, only aborts● yields don’t abort transactions
![Page 19: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/19.jpg)
Репликация
Работает из коробки
![Page 20: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/20.jpg)
Ограничения
● небольшие таплы● помните об оверхеде вторичных ключей● несколько тысяч файловых дескрипторов● просто планировщик транзакций: долгие read-write
транзакции могут абортиться● нет cross-engine транзакций● space amplification требует до 2х резервирования
![Page 21: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/21.jpg)
Ссылки
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 23: Хранение данных на виниле / Константин Осипов (tarantool.org)](https://reader034.vdocuments.mx/reader034/viewer/2022042517/586f905a1a28ab54768b796b/html5/thumbnails/23.jpg)
Делаем latency предсказуемым
● упреждающие dumpы● throttling