Tarantool 1.6 Primer
РИТ++, 2014
Konstantin Osipov
Что такое Tarantool?
● Redis + Node.JS для Lua
● все данные в одном процессе
● кооперативная многозадачность
● число полей...
Обзор 1.6
● AppServer: кишками наружу
● MsgPack для общения
● авторизация и проверка привилегий
● реактивный Lua через Lua...
Lua application server
● неблокирующий ввод/вывод без callbacks
● изменение кода на лету (админ консоль)
● модульная струк...
#!/usr/bin/env tarantool
#!/usr/bin/env tarantool
box.cfg{admin_port=3313} –- start database
s = box.schema.create_space('...
Data dictionary
● создание таблиц и функций на лету
● интроспекция
● cluster & sharding friendly
box.schema.create_space()...
MsgPack
● это как BSON, но компактный и быстрый
● schema-less хранение документов
● на ~30% компактнее чем Tarantool 1.5
●...
Использование MsgPack
space:insert{1, 'online', { atime =
box.time(), referer = 'rit++'}}
---
- [1, 'online', {'atime':
13...
Авторизация и привилегии
● Discretional Access Control model
● Пользователи, объекты и права
● Guest и Admin users
● Space...
Ускорение Lua
● Tracing just-in-time compiler и Foreign Function
Interface
● JIT компиляция select(), map(), filter()
● Ус...
Пример: работа tracing JIT
x = tabulate(math.sin)
:take(100)
:map(function(x) return x^2 end)
:sum()
=> трейс => 12 ASM ин...
Асинхронный мастер-мастер
● автоматическое присоединение к кластеру
● прощай, failover
first> space:replace{1, 'hello'}
--
- [1, 'hello']
...
second> space:replace{2, 'world'}
---
- [2, 'world']
...
Пример: ма...
Хранение данных на диске
● операционные данные – в памяти,
исторические – на диске
● Sophia engine даст фору LevelDB
● опт...
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
sp...
Транзакции
● lock-free
● wait-free
● yield() внутри транзакции невозможен
● быстрое обновление нескольких спейсов
● 1 вызо...
Q&A
http://tarantool.org/
https://github.com/tarantool
Upcoming SlideShare
Loading in...5
×

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

1,450

Published on

Published in: Internet
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,450
On Slideshare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
7
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

  1. 1. Tarantool 1.6 Primer РИТ++, 2014 Konstantin Osipov
  2. 2. Что такое Tarantool? ● Redis + Node.JS для Lua ● все данные в одном процессе ● кооперативная многозадачность ● число полей в записи не ограничено ● вторичные и multipart ключи ● триггеры, семафоры, сокеты, няшки
  3. 3. Обзор 1.6 ● AppServer: кишками наружу ● MsgPack для общения ● авторизация и проверка привилегий ● реактивный Lua через LuaFFI А также: ● асинхронный мастер-мастер ● разные “движки” хранения данных ● транзакции
  4. 4. Lua application server ● неблокирующий ввод/вывод без callbacks ● изменение кода на лету (админ консоль) ● модульная структура и совместимость с Lua ● запуск скриптов через #! (hashbang) ● cокеты, http сервера, очереди, шардинги... ● AppServer и СУБД в одном стакане
  5. 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. 6. Data dictionary ● создание таблиц и функций на лету ● интроспекция ● cluster & sharding friendly box.schema.create_space() box.schema.create_user() box.schema.create_function() _space, _function, _user – system  spaces
  7. 7. MsgPack ● это как BSON, но компактный и быстрый ● schema-less хранение документов ● на ~30% компактнее чем Tarantool 1.5 ● хранение данных as-is без преобразования ● простой клиентский код ● Tarantool – первая MsgPack база данных
  8. 8. Использование MsgPack space:insert{1, 'online', { atime = box.time(), referer = 'rit++'}} --- - [1, 'online', {'atime': 1396161275.7198, 'referer': 'rit++'}] ... 0x960102A45465737483A26B3330A26B31A27631A26B32930A0F14C3CB400921CAC08312 6F
  9. 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. 10. Ускорение Lua ● Tracing just-in-time compiler и Foreign Function Interface ● JIT компиляция select(), map(), filter() ● Ускорение хранимок более чем в два раза ● Удобная интеграция с модулями на С ● А v8 так не умеет ● Tarantool + LuaJIT = хранимые процедуры на языке общего назначения со скоростью C
  11. 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. 12. Асинхронный мастер-мастер ● автоматическое присоединение к кластеру ● прощай, failover
  13. 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. 14. Хранение данных на диске ● операционные данные – в памяти, исторические – на диске ● Sophia engine даст фору LevelDB ● оптимизация под SSD ● соотношение mem / disk для Web ● поддержка репликации и всех фич Tarantool box.schema.create_space('archive', { engine = 'sophia'})
  15. 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. 16. Транзакции ● lock-free ● wait-free ● yield() внутри транзакции невозможен ● быстрое обновление нескольких спейсов ● 1 вызов Lua = 1 транзакция
  17. 17. Q&A http://tarantool.org/ https://github.com/tarantool
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×