SlideShare a Scribd company logo
Tarantool: как обработать
      8
1.5^10 запросов в сутки?

      Константин Осипов, Mail.Ru
План
Основные проблемы масштабирования СУБД
Tarantool: решение из области shared nothing
Data patterns
Scalability patterns
Обзор планов
СУБД: современный ландшафт
2 проблемы РСУБД
- горизонтальное масштабирование
- rigid schema
NoSQL – мир энтузиастов:
- новые модели данных
- новые языки доступа к данным
- новые модели консистентности данных
- новые алгоритмы хранения данных
- много, много методов масштабирования
Современный ландшафт
                          БД
Основные проблемы масштабирования СУБД
Tarantool: решение из области MPI
Data patterns
Scalability patterns
Обзор планов
Модель данных
Пространства
(spaces)
Кортежи
(tuples)
Поля
(fields)
Индексы
(indexes)
Модель данных (2)
Соответствие терминов: Типы данных:   Типы индексов:
Tarantool     РСУБД    NUM            HASH
Space         Table    NUM64          TREE
Field         Column   STRING
Модель данных (3)
Индексы: простые, составные, уникальные, неуникальные
Операции: INSERT/SELECT/UPDATE/DELETE/REPLACE
Поддерживается простой SQL
PHP интерфейс
$tnt = new Tarantool($host, $port, $admPort);
# $host – хост (def: localhost);
# $port – порт (def: 33013);
# $admPort – административный порт (def: 33015)
PHP: INSERT, UPDATE
define(‘SNO’,0);      // номер space
$key = 12345
$tuple = array($key,‘spb’,’Hello Word’);
# если данные существуют, они замещаются
$res = $tnt->insert(SNO, $tuple);
$res = $tnt->delete(SNO, $key, [$flag]);
$data = array(1 => ’msk’, 2 => ‘Hello Hi++!’);
$res = $tnt->update(SNO, $key, $data);
# $key – всегда первичный ключ
# $data – асс. массив № поля => нов. значение
PHP интерфейс: SELECT
$count = $tnt->select(SNO, $index, $key,[$limit,
$offset]);
# $key – ключ, возможен массив;
# $index – номер индекса, по которому
# осуществляется выборка;
# default $limit = 0хFFFFFFFF, $offset = 0;
# Возвращает количество найденных кортежей
# Выборка данных осуществляется методом
$tuple = $tnt->getTuple();
Производительность
Intel I5 , 4G RAM, 7200 RPM SATA
10 потоков, 200-300 байт кортеж
Redis: 120k writes, 270k reads
Tarantool: 100k writes, 260k reads
Auto-increment pattern
Field 0   Field 1 = Phone   Field2 = Name
(PK)


1         212-85-01         John Dow
2         212-85-02         Clint Smith
3         967-53-09         Cheryl Wood
4         Новая строка
Auto-increment: PHP
define(S_USER, 1); // номер space USER
define(INC_NO,1); // номер ключа счетчика
define(COUNTER,1); // номер поля счетчика

$key = $tnt->inc(SNO, INC_NO, COUNTER,
                 [1, true]);
$tnt->insert(NS_USER, $key, $data);
Auto-increment: Lua
function box.auto_increment(spaceno, ...)
    max_tuple = box.space[spaceno].index[0].idx:max()
    if max_tuple ~= nil then
         max = box.unpack('i', max_tuple[0])
    else
         max = -1
    end
    return box.insert(spaceno, max + 1, ...)
end

$tnt->call(SNO, “box.auto_increment”, $data);
Pattern FIFO: PHP
                 primary key
                 ...
                 index.php
begin pointer
                 clients.php
end pointer      contacts.php
Pattern FIFO: PHP
FIFO POP:
define(END_PTR, 5); // номер ключа End Pointer
$key = $tnt->inc(NS, END_PTR, FD_COUNTER, -1,
                 true);
$data = $tnt->delete(NS_USER, $key, true);
FIFO PUSH:
define(BEG_PTR, 4); // номер ключа Beg Pointer
$key = $tnt->inc(NS, BEG_PTR,
                  FD_COUNTER, 1, true);
$tnt->insert(NS_USER, $data);
Pattern FIFO: Lua
function fifo_push(name, val)
    fifo = find_or_create_fifo(name)
    top = box.unpack('i', fifo[1])
    bottom = box.unpack('i', fifo[2])
    if top == fifomax+2 then -- % size
        top = 3
     …
    end
    return box.update(0, name, '=p=p=p', 1, top,
                       2, bottom, top, val)
end
Pattern Memcache
• есть возможность создавать свои микро-потоки:
• box.fiber.create(), box.fiber.yield()
• создаёте хранимую процедуру, запускаете её
• получаете custom expire process

• используется для хранения сессий в mail.ru:
 4 машины, по 2 Tarantool/Box на каждой, 2 мастера,
 и 2 реплики
 40-60k requests/second, CPU usage < 20%
Pattern: справочник
Field 0, Primary    Field1 = date   Field2 = City
INDEX=0                             INDEX=1
rizaeyka@mail.ru    2011-05-09      SPB
slavsyper@mail.ru   2011-09-09      MSK

oxic10@mail.ru      2011-10-01      SPB
Масштабирование
                                0 ...10М   Shard 1

Application   Tarantool Proxy
                                10...20М   Shard 2


                                20+ М      Shard 3
Что такое Tarantool Proxy
•
    Многопоточный демон
•
    Отправляет запросы на разные сервера
•
   Определение сервера с помощью конфигурационного
файла или плагина
READ/WRITE scaling
                                Shard 1
                     0 ...10М
Tarantool Proxy
                  10...20М      Shard 2
                                                  SELECT WHERE key=k1,k2
INSERT, UPDATE,                 Shard 3
DELETE, SELECT     20+ М
                                                       0 ...10М   Shard 1
WHERE key=PK

                                Tarantool Proxy       10...20М    Shard 2


                                                       20+ М      Shard 3
Планы
Поддержка транзакций
Мастер-мастер репликация
Кластер менеджер
Tarantool Proxy: load balancing
Спасибо!



   kostja.osipov@gmail.com
      http://tarantool.org
http://habrahabr.ru/blogs/nosql/

More Related Content

PDF
Паттерны и примеры структур данных в NoSQL на примере Tarantool
PDF
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
PDF
Tarantool_qs
PDF
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
PPTX
file handling in c++
PPTX
C++ и базы данных
PDF
Reform: путь к лучшему ORM
Паттерны и примеры структур данных в NoSQL на примере Tarantool
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
Tarantool_qs
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
file handling in c++
C++ и базы данных
Reform: путь к лучшему ORM

What's hot (20)

PPTX
стандартная библиотека с++: введение
PDF
Недостатки Linux API с точки зрения разработчика веб-сервера.
PPTX
Cpp/cli particularities
PPT
лабораторная работа №8
PPT
Что нового в PHP-5.3
PPTX
контейнеры STL
PPTX
C++ осень 2012 лекция 11
KEY
Cassandra @JEEConf March 21, 2011 (Kiev, Ukraine)
PDF
Hf labs education day. rocket science
PPT
Юрий Гольцев - Сервис PLWWW
PDF
Clojure – есть ли жизнь после Java
PPT
plwww (24.03) MEPHI (PHDays)
PDF
Python. Обработка ошибок
PPTX
PDF
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
PPTX
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
PDF
Linux (pipes)
PPTX
file handling in c
PDF
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
стандартная библиотека с++: введение
Недостатки Linux API с точки зрения разработчика веб-сервера.
Cpp/cli particularities
лабораторная работа №8
Что нового в PHP-5.3
контейнеры STL
C++ осень 2012 лекция 11
Cassandra @JEEConf March 21, 2011 (Kiev, Ukraine)
Hf labs education day. rocket science
Юрий Гольцев - Сервис PLWWW
Clojure – есть ли жизнь после Java
plwww (24.03) MEPHI (PHDays)
Python. Обработка ошибок
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
Linux (pipes)
file handling in c
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Ad

Similar to Tarantool: как обрабатывать 
1,5 млрд запросов в сутки? (20)

PDF
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
PDF
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
PPTX
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
PDF
РИФ 2016, Tarantool – кейсы использования
PPTX
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
PPTX
Tarantool
PDF
Tarantool Modules, Tarantool Meetup 2016-08-25
PDF
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
PDF
YuryByyanov (e-legion) @ CodeCamp2011
PDF
Юрий Буянов «Архитектура Goozy»
PDF
Tarantool 1.6: NoSQL database and application server
PPT
TreeDb key/value noSQL database
PDF
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
PPTX
Как мы в Почте@Mail.Ru выдерживаем высокие нагрузки
PDF
Nosql and Mongodb
PDF
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
PPTX
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
PDF
Обзор перспективных баз данных для highload / Юрий Насретдинов
PDF
Ostrovok.ru.cache.messages
PPT
Ленвендо.Построение системного ландшафта высоконагруженного проекта
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
РИФ 2016, Tarantool – кейсы использования
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
Tarantool
Tarantool Modules, Tarantool Meetup 2016-08-25
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
YuryByyanov (e-legion) @ CodeCamp2011
Юрий Буянов «Архитектура Goozy»
Tarantool 1.6: NoSQL database and application server
TreeDb key/value noSQL database
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Как мы в Почте@Mail.Ru выдерживаем высокие нагрузки
Nosql and Mongodb
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
Обзор перспективных баз данных для highload / Юрий Насретдинов
Ostrovok.ru.cache.messages
Ленвендо.Построение системного ландшафта высоконагруженного проекта
Ad

More from tfmailru (20)

PPTX
Стабильность — признак мастерства
PPTX
Создание мобильных приложений: платформы, тренды, тонкости
PPTX
Tech forum 2011-почта
PPT
Разработка социальных игр «из первых рук»: ваш путь в топ!
PPTX
к форуму технологий вступление Last
PPTX
Партнерские возможности Почты: как дружить с миллионами пользователей Mail.Ru
PPTX
Платформа@Mail.Ru: настоящее и будущее
PPTX
Sumin
PPTX
Машинное обучение в ранжировании поиска
PPTX
1145 1230 Технологическое партнерство с Microsoft – опыт Mail.Ru Group
PPT
Hadoop ecosystem
PPTX
Стабильность — признак мастерства
PPTX
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
PPTX
Опыт внедрения и использования распределенной системы хранения данных на осно...
PPTX
Развитие интерфейса через гайдлайны
PPTX
Типичные проблемы с массовыми рассылками и как из избежать
PPTX
Alekseev
PPTX
Как избавиться от опасных ссылок в вашем проекте
PPTX
Платежные системы и мошенники в Сети
PPTX
Технологии поиска
Стабильность — признак мастерства
Создание мобильных приложений: платформы, тренды, тонкости
Tech forum 2011-почта
Разработка социальных игр «из первых рук»: ваш путь в топ!
к форуму технологий вступление Last
Партнерские возможности Почты: как дружить с миллионами пользователей Mail.Ru
Платформа@Mail.Ru: настоящее и будущее
Sumin
Машинное обучение в ранжировании поиска
1145 1230 Технологическое партнерство с Microsoft – опыт Mail.Ru Group
Hadoop ecosystem
Стабильность — признак мастерства
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
Опыт внедрения и использования распределенной системы хранения данных на осно...
Развитие интерфейса через гайдлайны
Типичные проблемы с массовыми рассылками и как из избежать
Alekseev
Как избавиться от опасных ссылок в вашем проекте
Платежные системы и мошенники в Сети
Технологии поиска

Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?

  • 1. Tarantool: как обработать 8 1.5^10 запросов в сутки? Константин Осипов, Mail.Ru
  • 2. План Основные проблемы масштабирования СУБД Tarantool: решение из области shared nothing Data patterns Scalability patterns Обзор планов
  • 4. 2 проблемы РСУБД - горизонтальное масштабирование - rigid schema NoSQL – мир энтузиастов: - новые модели данных - новые языки доступа к данным - новые модели консистентности данных - новые алгоритмы хранения данных - много, много методов масштабирования
  • 5. Современный ландшафт БД Основные проблемы масштабирования СУБД Tarantool: решение из области MPI Data patterns Scalability patterns Обзор планов
  • 7. Модель данных (2) Соответствие терминов: Типы данных: Типы индексов: Tarantool РСУБД NUM HASH Space Table NUM64 TREE Field Column STRING
  • 8. Модель данных (3) Индексы: простые, составные, уникальные, неуникальные Операции: INSERT/SELECT/UPDATE/DELETE/REPLACE Поддерживается простой SQL
  • 9. PHP интерфейс $tnt = new Tarantool($host, $port, $admPort); # $host – хост (def: localhost); # $port – порт (def: 33013); # $admPort – административный порт (def: 33015)
  • 10. PHP: INSERT, UPDATE define(‘SNO’,0); // номер space $key = 12345 $tuple = array($key,‘spb’,’Hello Word’); # если данные существуют, они замещаются $res = $tnt->insert(SNO, $tuple); $res = $tnt->delete(SNO, $key, [$flag]); $data = array(1 => ’msk’, 2 => ‘Hello Hi++!’); $res = $tnt->update(SNO, $key, $data); # $key – всегда первичный ключ # $data – асс. массив № поля => нов. значение
  • 11. PHP интерфейс: SELECT $count = $tnt->select(SNO, $index, $key,[$limit, $offset]); # $key – ключ, возможен массив; # $index – номер индекса, по которому # осуществляется выборка; # default $limit = 0хFFFFFFFF, $offset = 0; # Возвращает количество найденных кортежей # Выборка данных осуществляется методом $tuple = $tnt->getTuple();
  • 12. Производительность Intel I5 , 4G RAM, 7200 RPM SATA 10 потоков, 200-300 байт кортеж Redis: 120k writes, 270k reads Tarantool: 100k writes, 260k reads
  • 13. Auto-increment pattern Field 0 Field 1 = Phone Field2 = Name (PK) 1 212-85-01 John Dow 2 212-85-02 Clint Smith 3 967-53-09 Cheryl Wood 4 Новая строка
  • 14. Auto-increment: PHP define(S_USER, 1); // номер space USER define(INC_NO,1); // номер ключа счетчика define(COUNTER,1); // номер поля счетчика $key = $tnt->inc(SNO, INC_NO, COUNTER, [1, true]); $tnt->insert(NS_USER, $key, $data);
  • 15. Auto-increment: Lua function box.auto_increment(spaceno, ...) max_tuple = box.space[spaceno].index[0].idx:max() if max_tuple ~= nil then max = box.unpack('i', max_tuple[0]) else max = -1 end return box.insert(spaceno, max + 1, ...) end $tnt->call(SNO, “box.auto_increment”, $data);
  • 16. Pattern FIFO: PHP primary key ... index.php begin pointer clients.php end pointer contacts.php
  • 17. Pattern FIFO: PHP FIFO POP: define(END_PTR, 5); // номер ключа End Pointer $key = $tnt->inc(NS, END_PTR, FD_COUNTER, -1, true); $data = $tnt->delete(NS_USER, $key, true); FIFO PUSH: define(BEG_PTR, 4); // номер ключа Beg Pointer $key = $tnt->inc(NS, BEG_PTR, FD_COUNTER, 1, true); $tnt->insert(NS_USER, $data);
  • 18. Pattern FIFO: Lua function fifo_push(name, val) fifo = find_or_create_fifo(name) top = box.unpack('i', fifo[1]) bottom = box.unpack('i', fifo[2]) if top == fifomax+2 then -- % size top = 3 … end return box.update(0, name, '=p=p=p', 1, top, 2, bottom, top, val) end
  • 19. Pattern Memcache • есть возможность создавать свои микро-потоки: • box.fiber.create(), box.fiber.yield() • создаёте хранимую процедуру, запускаете её • получаете custom expire process • используется для хранения сессий в mail.ru: 4 машины, по 2 Tarantool/Box на каждой, 2 мастера, и 2 реплики 40-60k requests/second, CPU usage < 20%
  • 20. Pattern: справочник Field 0, Primary Field1 = date Field2 = City INDEX=0 INDEX=1 rizaeyka@mail.ru 2011-05-09 SPB slavsyper@mail.ru 2011-09-09 MSK oxic10@mail.ru 2011-10-01 SPB
  • 21. Масштабирование 0 ...10М Shard 1 Application Tarantool Proxy 10...20М Shard 2 20+ М Shard 3
  • 22. Что такое Tarantool Proxy • Многопоточный демон • Отправляет запросы на разные сервера • Определение сервера с помощью конфигурационного файла или плагина
  • 23. READ/WRITE scaling Shard 1 0 ...10М Tarantool Proxy 10...20М Shard 2 SELECT WHERE key=k1,k2 INSERT, UPDATE, Shard 3 DELETE, SELECT 20+ М 0 ...10М Shard 1 WHERE key=PK Tarantool Proxy 10...20М Shard 2 20+ М Shard 3
  • 25. Спасибо! kostja.osipov@gmail.com http://tarantool.org http://habrahabr.ru/blogs/nosql/