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

  • 1,154 views
Uploaded on

 

More in: Internet
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,154
On Slideshare
0
From Embeds
0
Number of Embeds
8

Actions

Shares
Downloads
3
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