Your SlideShare is downloading. ×
Константин Осипов (Mail.Ru)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

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

1,301
views

Published on

Published in: Internet

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

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

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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 транзакция
  • 17. Q&A http://tarantool.org/ https://github.com/tarantool