Осваиваем
Tarantool
Шадрин
Евгений
Что такое NoSQL?
• Не только SQL
• Простота масштабирования
• Производительность в
конкретных задачах
• Удобство и простота
использования
Мир NoSQL
Выбор решения
• Не стоит изобретать
велосипед
• Исходите из задачи
• Опирайтесь на опыт других
• Выбирайте, что знаете
Использование
NoSQL
• «Кэширование» данных
memcached
●
Большие объемы данных
Hbase
• Сервисы очередей
redis
• Платформы для статистики и
обработки данных
redis
• Удобный бекенд для хранения
mongoDB
Tarantool
A NoSQL database running in
a Lua application server
try.tarantool.org
Особенности
Tarantool
• Все данные в памяти
• Документно-ориентированная
модель данных
• Вторичные индексы
• Транзакции
• Легковесные потоки
• Работа с сетью и файлами
script.lua
#!/usr/bin/tarantool
-- This is lua script
function hw(a, b)
print (a.hello..b.world)
end
b = {}
a = { hello = 'Hello ' }
b['world'] = 'world!'
hw(a, b)`
#!/usr/bin/tarantool
-- Tarantool init script
local log = require('log')
local console = require('console')
local server = require('http.server')
local HOST = 'localhost'
local PORT = 8008
box.cfg {
log_level = 5,
slab_alloc_arena = 1,
}
console.listen('127.0.0.1:33013')
if not box.space.users then
s = box.schema.space.create('users')
s:create_index('primary',
{type = 'tree', parts = {1, 'NUM'}})
end
init.lua
function handler(self)
local id = self:cookie('tarantool_id')
local ip = self.peer.host
local data = ''
log.info('Users id = %s', id)
if not id then
data = 'Welcome to tarantool server!'
box.space.users:auto_increment({ip})
id = box.space.users:len()
return self:render({ text = data}):
setcookie({ name = 'tarantool_id', value
= id, expires = '+1y' })
else
local count = box.space.users:len()
data = 'You id is ' .. id .. '. We have ' ..
count .. ' users'
return self:render({ text = data })
end
end
httpd = server.new(HOST, PORT)
httpd:route({ path = '/' }, handler)
httpd:start()
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Lua
• Простой
• Структуры данных – таблицы
• Быстрый luajit (luafun)
• Удобная интеграция с С
• tarantool – Lua интерпретатор
tarantool>
• /usr/bin/tarantool
• tarantool> print(‘Ola lua’)
Стартовый скрипт
init.lua
• /usr/bin/tarantool init.lua
Запуск
box.cfg
box.cfg {
log_level = 5,
slab_alloc_arena = 1,
}
Пакет box
box.cfg, box.info, box.slab,
box.stat
box.cfg
tarantool> box.cfg
---
- snapshot_count: 6
slab_alloc_arena: 1
background: false
snapshot_period: 3600
log_level: 5
snap_dir: .
wal_dir: .
...
box.info
tarantool> box.info.pid
---
- 17922
...
tarantool> box.info.version
---
- 1.6.5-98-ge279a5f
...
tarantool> box.info.uptime
---
- 143
...
tarantool> box.info.status
---
- running
...
Модель данных
База данных
if not box.space.users then
s = box.schema.space.create('users')
s:create_index('primary',
{type = 'tree', parts =
{1, 'NUM'}})
end
box.space.users:auto_increment({ip})
local count = box.space.users:len()
Lua application
server
●
https://github.com/tarantool
●
tarantool http
●
tarantool queue
●
try.tarantool.org
●
Rocks репозиторий
Пакеты
console = require('console')
log = require('log')
console.listen('127.0.0.1:33013')
log.info('Tarantool start')
Консоль администратора
---------------------------
$ rlwrap telnet 0 33013
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
Tarantool 1.6.5-98-ge279a5f (Lua console)
type 'help' for interactive help
Tarantool http
local server = require('http.server')
httpd = server.new(HOST, PORT)
httpd:route({ path = '/' }, handler)
httpd:start()
return self:render({ text = data}):
setcookie({ name =
'tarantool_id', value = id, expires =
'+1y' })
Tarantool http
●
Сервер
●
Клиент
●
Куки
●
Lua внутри Template
#!/usr/bin/tarantool
-- Tarantool init script
local log = require('log')
local console = require('console')
local server = require('http.server')
local HOST = 'localhost'
local PORT = 8008
box.cfg {
log_level = 5,
slab_alloc_arena = 1,
}
console.listen('127.0.0.1:33013')
if not box.space.users then
s = box.schema.space.create('users')
s:create_index('primary',
{type = 'tree', parts = {1, 'NUM'}})
end
init.lua
function handler(self)
local id = self:cookie('tarantool_id')
local ip = self.peer.host
local data = ''
log.info('Users id = %s', id)
if not id then
data = 'Welcome to tarantool server!'
box.space.users:auto_increment({ip})
id = box.space.users:len()
return self:render({ text = data}):
setcookie({ name = 'tarantool_id', value
= id, expires = '+1y' })
else
local count = box.space.users:len()
data = 'You id is ' .. id .. '. We have ' ..
count .. ' users'
return self:render({ text = data })
end
end
httpd = server.new(HOST, PORT)
httpd:route({ path = '/' }, handler)
httpd:start()
Пакеты
• json
• fiber
• yaml
• digest
• socket
• msgpack
• fio
• net.box
Fibers
• Модель green threads
• Быстро создаются
• Хорошая производительность
переключения
fiber.create()
fiber.sleep()
fiber_object:cancel()
fiber.time()
Документация
• tarantool.org (documentation,
downloads)
• Поддержка большинства unix
подобных систем (buildbot),
сопровождение пакетов
• Связь с разработчиками
Opensource
Итоги
●
Своя сфера применения
●
Инструмент разработки – это
важно
●
Идея и цель – важнее
●
tarantool – совсем не
сложный
Спасибо за внимание!
shadrin.e@gmail.com

More Related Content

PDF
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
PDF
Дмитрий Новиков - Tarantool в Badoo
PDF
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
PDF
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
PDF
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
PDF
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
PPTX
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
PDF
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Дмитрий Новиков - Tarantool в Badoo
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...

What's hot (20)

PPTX
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
PPTX
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
PDF
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
PDF
Современная операционная система: что надо знать разработчику / Александр Кри...
PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
PDF
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
PDF
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
PPTX
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
PDF
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
PDF
My talk at Highload++ 2015
PPTX
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
PPT
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
PPTX
Поиск наизнанку
PDF
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
PDF
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
PDF
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
PDF
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
PDF
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
PDF
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PDF
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Современная операционная система: что надо знать разработчику / Александр Кри...
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
My talk at Highload++ 2015
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Поиск наизнанку
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Ad

Viewers also liked (10)

PPTX
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
PDF
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
PDF
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
PDF
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
PPTX
Как устроен поиск / Андрей Аксенов (Sphinx)
PPTX
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
PDF
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
PDF
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
PDF
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
PDF
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Как устроен поиск / Андрей Аксенов (Sphinx)
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Ad

Similar to Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures) (16)

PDF
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
PDF
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
PDF
Tarantool_qs
PDF
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
PDF
Tarantool Modules, Tarantool Meetup 2016-08-25
PPTX
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
PPTX
Tarantool
PDF
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
PPTX
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
PDF
Tarantool 1.6: NoSQL database and application server
PDF
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
PDF
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
ODP
Константин Осипов (Mail.Ru)
PDF
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
PPTX
Tarantool, .net, newsql
PDF
РИФ 2016, Tarantool – кейсы использования
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool_qs
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
Tarantool Modules, Tarantool Meetup 2016-08-25
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Tarantool
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
Tarantool 1.6: NoSQL database and application server
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Константин Осипов (Mail.Ru)
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Tarantool, .net, newsql
РИФ 2016, Tarantool – кейсы использования

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...

Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)