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 база данных
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
14. Хранение данных на диске
● операционные данные – в памяти,
исторические – на диске
● Sophia engine даст фору LevelDB
● оптимизация под SSD
● соотношение mem / disk для Web
● поддержка репликации и всех фич Tarantool
box.schema.create_space('archive', {
engine = 'sophia'})