Tarantool 1.6 Primer
РИТ++, 2014
Konstantin Osipov
Что такое Tarantool?
● Redis + Node.JS для Lua
● все данные в одном процессе
● кооперативная многозадачность
● число полей в записи не ограничено
● вторичные и multipart ключи
● триггеры, семафоры, сокеты, няшки
Обзор 1.6
● AppServer: кишками наружу
● MsgPack для общения
● авторизация и проверка привилегий
● реактивный Lua через LuaFFI
А также:
● асинхронный мастер-мастер
● разные “движки” хранения данных
● транзакции
Lua application server
● неблокирующий ввод/вывод без callbacks
● изменение кода на лету (админ консоль)
● модульная структура и совместимость с
Lua
● запуск скриптов через #! (hashbang)
● cокеты, http сервера, очереди, шардинги...
● AppServer и СУБД в одном стакане
#!/usr/bin/env tarantool
#!/usr/bin/env tarantool
box.cfg{admin_port=3313} –- start database
s = box.schema.create_space('s', { if_not_exists =
true})
if not s.index.primary
s:create_index('primary', { type = 'hash' })
end
local purger = box.fiber.wrap(function() … end)
local sock = require('box.socket').tcp()
sock:connect(…)
Data dictionary
● создание таблиц и функций на лету
● интроспекция
● cluster & sharding friendly
box.schema.create_space()
box.schema.create_user()
box.schema.create_function()
_space, _function, _user – system 
spaces
MsgPack
● это как BSON, но компактный и быстрый
● schema-less хранение документов
● на ~30% компактнее чем Tarantool 1.5
● хранение данных as-is без преобразования
● простой клиентский код
● Tarantool – первая MsgPack база данных
Использование MsgPack
space:insert{1, 'online', { atime =
box.time(), referer = 'rit++'}}
---
- [1, 'online', {'atime':
1396161275.7198, 'referer': 'rit++'}]
...
0x960102A45465737483A26B3330A26B31A27631A26B32930A0F14C3CB400921CAC08312
6F
Авторизация и привилегии
● Discretional Access Control model
● Пользователи, объекты и права
● Guest и Admin users
● Spaces, Functions and the Universe
box.schema.user.create('kostja')
box.schema.user.grant('kostja',
'read,write,execute', 'universe')
Ускорение Lua
● Tracing just-in-time compiler и Foreign Function
Interface
● JIT компиляция select(), map(), filter()
● Ускорение хранимок более чем в два раза
● Удобная интеграция с модулями на С
● А v8 так не умеет
● Tarantool + LuaJIT = хранимые процедуры на
языке общего назначения со скоростью C
Пример: работа tracing JIT
x = tabulate(math.sin)
:take(100)
:map(function(x) return x^2 end)
:sum()
=> трейс => 12 ASM инструкций
Аналогично для запросов
space:iterator(...)
:map(...)
:filter(...)
:reduce(...)
...
=>> LOOP:
0bcaffd0 movsd [rsp+0x8], xmm7
0bcaffd6 addsd xmm4, xmm5
0bcaffda ucomisd xmm6, xmm1
0bcaffde jnb 0x0bca0028 ->6
0bcaffe4 addsd xmm6, xmm0
0bcaffe8 addsd xmm7, xmm0
0bcaffec fld qword [rsp+0x8]
0bcafff0 fsin
0bcafff2 fstp qword [rsp]
0bcafff5 movsd xmm5, [rsp]
0bcafffa mulsd xmm5, xmm5
0bcafffe jmp 0x0bcaffd0 ->LOOP
---- TRACE 1 stop -> loop
Асинхронный мастер-мастер
● автоматическое присоединение к кластеру
● прощай, failover
first> space:replace{1, 'hello'}
--
- [1, 'hello']
...
second> space:replace{2, 'world'}
---
- [2, 'world']
...
Пример: мастер-мастер
first> space:select{}
---
- [1, 'hello']
- [2, 'world']
...
second> space:select{}
---
- [1, 'hello']
- [2, 'world']
...
Хранение данных на диске
● операционные данные – в памяти,
исторические – на диске
● Sophia engine даст фору LevelDB
● оптимизация под SSD
● соотношение mem / disk для Web
● поддержка репликации и всех фич Tarantool
box.schema.create_space('archive', {
engine = 'sophia'})
Sophia: архитектура
Key-value index
Disk
10, 25
Memory 15 26 40 84
Page index
Disk
26, 31
10, 15, 16, 25
39, 40, 84, 85
split
26, 31
86, 96
39, 85 86, 96
Транзакции
● lock-free
● wait-free
● yield() внутри транзакции невозможен
● быстрое обновление нескольких спейсов
● 1 вызов Lua = 1 транзакция
Q&A
http://tarantool.org/
https://github.com/tarantool

More Related Content

PDF
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
PDF
Хранение данных на виниле / Константин Осипов (tarantool.org)
PPTX
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
PPTX
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
PDF
Современная операционная система: что надо знать разработчику / Александр Кри...
PDF
Дмитрий Новиков - Tarantool в Badoo
PPTX
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
PDF
Механика DDoS (Александр Крижановский)
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Хранение данных на виниле / Константин Осипов (tarantool.org)
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Современная операционная система: что надо знать разработчику / Александр Кри...
Дмитрий Новиков - Tarantool в Badoo
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Механика DDoS (Александр Крижановский)

What's hot (20)

PDF
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
PDF
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
PDF
Реализация восстановления после аварий / Сергей Бурладян (Avito)
PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
PDF
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
PDF
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PPTX
Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)
PPTX
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
PDF
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
PDF
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
PDF
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
PPTX
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
PDF
pgconf.ru 2015.avito postgresql recovery
PPTX
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
PDF
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
PDF
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
PDF
За гранью NoSQL: NewSQL на Cassandra
PDF
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
PPTX
Mysql vs postgresql
PDF
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Реализация восстановления после аварий / Сергей Бурладян (Avito)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
Движок LMDB — особенный чемпион / Юрьев Леонид (Петер-Сервис R&D)
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
pgconf.ru 2015.avito postgresql recovery
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
За гранью NoSQL: NewSQL на Cassandra
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
Mysql vs postgresql
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Ad

Similar to Константин Осипов (Mail.Ru) (7)

PDF
Tarantool Modules, Tarantool Meetup 2016-08-25
PDF
Tarantool_qs
PPTX
Tarantool, .net, newsql
PDF
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
PDF
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
PPTX
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
PDF
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool_qs
Tarantool, .net, newsql
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Ad

More from Ontico (20)

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

Константин Осипов (Mail.Ru)

  • 1. Tarantool 1.6 Primer РИТ++, 2014 Konstantin Osipov
  • 2. Что такое Tarantool? ● Redis + Node.JS для Lua ● все данные в одном процессе ● кооперативная многозадачность ● число полей в записи не ограничено ● вторичные и multipart ключи ● триггеры, семафоры, сокеты, няшки
  • 3. Обзор 1.6 ● AppServer: кишками наружу ● MsgPack для общения ● авторизация и проверка привилегий ● реактивный Lua через LuaFFI А также: ● асинхронный мастер-мастер ● разные “движки” хранения данных ● транзакции
  • 4. Lua application server ● неблокирующий ввод/вывод без callbacks ● изменение кода на лету (админ консоль) ● модульная структура и совместимость с Lua ● запуск скриптов через #! (hashbang) ● cокеты, http сервера, очереди, шардинги... ● AppServer и СУБД в одном стакане
  • 5. #!/usr/bin/env tarantool #!/usr/bin/env tarantool box.cfg{admin_port=3313} –- start database s = box.schema.create_space('s', { if_not_exists = true}) if not s.index.primary s:create_index('primary', { type = 'hash' }) end local purger = box.fiber.wrap(function() … end) local sock = require('box.socket').tcp() sock:connect(…)
  • 6. Data dictionary ● создание таблиц и функций на лету ● интроспекция ● cluster & sharding friendly box.schema.create_space() box.schema.create_user() box.schema.create_function() _space, _function, _user – system  spaces
  • 7. MsgPack ● это как BSON, но компактный и быстрый ● schema-less хранение документов ● на ~30% компактнее чем Tarantool 1.5 ● хранение данных as-is без преобразования ● простой клиентский код ● Tarantool – первая MsgPack база данных
  • 8. Использование MsgPack space:insert{1, 'online', { atime = box.time(), referer = 'rit++'}} --- - [1, 'online', {'atime': 1396161275.7198, 'referer': 'rit++'}] ... 0x960102A45465737483A26B3330A26B31A27631A26B32930A0F14C3CB400921CAC08312 6F
  • 9. Авторизация и привилегии ● Discretional Access Control model ● Пользователи, объекты и права ● Guest и Admin users ● Spaces, Functions and the Universe box.schema.user.create('kostja') box.schema.user.grant('kostja', 'read,write,execute', 'universe')
  • 10. Ускорение Lua ● Tracing just-in-time compiler и Foreign Function Interface ● JIT компиляция select(), map(), filter() ● Ускорение хранимок более чем в два раза ● Удобная интеграция с модулями на С ● А v8 так не умеет ● Tarantool + LuaJIT = хранимые процедуры на языке общего назначения со скоростью C
  • 11. Пример: работа tracing JIT x = tabulate(math.sin) :take(100) :map(function(x) return x^2 end) :sum() => трейс => 12 ASM инструкций Аналогично для запросов space:iterator(...) :map(...) :filter(...) :reduce(...) ... =>> LOOP: 0bcaffd0 movsd [rsp+0x8], xmm7 0bcaffd6 addsd xmm4, xmm5 0bcaffda ucomisd xmm6, xmm1 0bcaffde jnb 0x0bca0028 ->6 0bcaffe4 addsd xmm6, xmm0 0bcaffe8 addsd xmm7, xmm0 0bcaffec fld qword [rsp+0x8] 0bcafff0 fsin 0bcafff2 fstp qword [rsp] 0bcafff5 movsd xmm5, [rsp] 0bcafffa mulsd xmm5, xmm5 0bcafffe jmp 0x0bcaffd0 ->LOOP ---- TRACE 1 stop -> loop
  • 12. Асинхронный мастер-мастер ● автоматическое присоединение к кластеру ● прощай, failover
  • 13. first> space:replace{1, 'hello'} -- - [1, 'hello'] ... second> space:replace{2, 'world'} --- - [2, 'world'] ... Пример: мастер-мастер first> space:select{} --- - [1, 'hello'] - [2, 'world'] ... second> space:select{} --- - [1, 'hello'] - [2, 'world'] ...
  • 14. Хранение данных на диске ● операционные данные – в памяти, исторические – на диске ● Sophia engine даст фору LevelDB ● оптимизация под SSD ● соотношение mem / disk для Web ● поддержка репликации и всех фич Tarantool box.schema.create_space('archive', { engine = 'sophia'})
  • 15. Sophia: архитектура Key-value index Disk 10, 25 Memory 15 26 40 84 Page index Disk 26, 31 10, 15, 16, 25 39, 40, 84, 85 split 26, 31 86, 96 39, 85 86, 96
  • 16. Транзакции ● lock-free ● wait-free ● yield() внутри транзакции невозможен ● быстрое обновление нескольких спейсов ● 1 вызов Lua = 1 транзакция