ݺߣ

ݺߣShare 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

What's hot (20)

стандартная библиотека с++: введение
стандартная библиотека с++: введениестандартная библиотека с++: введение
стандартная библиотека с++: введение
mcroitor
Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.
Alexandr Nox
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularities
mcroitor
лабораторная работа №8
лабораторная работа №8лабораторная работа №8
лабораторная работа №8
Zhanna Kazakova
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3
phpclub
контейнеры STL
контейнеры STLконтейнеры STL
контейнеры STL
mcroitor
C++ осень 2012 лекция 11
C++ осень 2012 лекция 11C++ осень 2012 лекция 11
C++ осень 2012 лекция 11
Technopark
Cassandra @JEEConf March 21, 2011 (Kiev, Ukraine)
Cassandra @JEEConf  March 21, 2011 (Kiev, Ukraine)Cassandra @JEEConf  March 21, 2011 (Kiev, Ukraine)
Cassandra @JEEConf March 21, 2011 (Kiev, Ukraine)
Pavel Yaskevich
Hf labs education day. rocket science
Hf labs education day. rocket scienceHf labs education day. rocket science
Hf labs education day. rocket science
Olga Kiseleva
Юрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWWЮрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWW
Positive Hack Days
Clojure– есть ли жизнь после Java
Clojure– есть ли жизнь после JavaClojure– есть ли жизнь после Java
Clojure– есть ли жизнь после Java
Olim Saidov
plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)
ygoltsev
Python. Обработка ошибок
Python. Обработка ошибокPython. Обработка ошибок
Python. Обработка ошибок
Theoretical mechanics department
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
Alexey Paznikov
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
Ontico
Linux (pipes)
Linux (pipes) Linux (pipes)
Linux (pipes)
Mihail Nesterov
file handling in c
file handling in cfile handling in c
file handling in c
Maxim Shaptala
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Ontico
стандартная библиотека с++: введение
стандартная библиотека с++: введениестандартная библиотека с++: введение
стандартная библиотека с++: введение
mcroitor
Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.
Alexandr Nox
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularities
mcroitor
лабораторная работа №8
лабораторная работа №8лабораторная работа №8
лабораторная работа №8
Zhanna Kazakova
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3
phpclub
контейнеры STL
контейнеры STLконтейнеры STL
контейнеры STL
mcroitor
C++ осень 2012 лекция 11
C++ осень 2012 лекция 11C++ осень 2012 лекция 11
C++ осень 2012 лекция 11
Technopark
Cassandra @JEEConf March 21, 2011 (Kiev, Ukraine)
Cassandra @JEEConf  March 21, 2011 (Kiev, Ukraine)Cassandra @JEEConf  March 21, 2011 (Kiev, Ukraine)
Cassandra @JEEConf March 21, 2011 (Kiev, Ukraine)
Pavel Yaskevich
Hf labs education day. rocket science
Hf labs education day. rocket scienceHf labs education day. rocket science
Hf labs education day. rocket science
Olga Kiseleva
Юрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWWЮрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWW
Positive Hack Days
Clojure– есть ли жизнь после Java
Clojure– есть ли жизнь после JavaClojure– есть ли жизнь после Java
Clojure– есть ли жизнь после Java
Olim Saidov
plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)
ygoltsev
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
Alexey Paznikov
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
Ontico
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Ontico

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

Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
tfmailru
Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)
Ontico
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building Blocks
Mikhail Kurnosov
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Yandex
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Yandex
Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25
Roman Tsisyk
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Ontico
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
Anastasia Lubennikova
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
Platonov Sergey
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
Platonov Sergey
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Ontico
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Badoo Development
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
2ГИС Технологии
Лекция о языке программирования Haskell
Лекция о языке программирования HaskellЛекция о языке программирования Haskell
Лекция о языке программирования Haskell
husniyarova
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Yandex
Haskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell languageHaskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell language
Alexander Granin
Haskell
HaskellHaskell
Haskell
DevDay
Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська
Tatyanazaxarova
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в TarantoolИнструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Timur Safin
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
Alexander Granin
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
tfmailru
Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)
Ontico
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building Blocks
Mikhail Kurnosov
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Yandex
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Yandex
Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25
Roman Tsisyk
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Ontico
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
Anastasia Lubennikova
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
Platonov Sergey
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
Platonov Sergey
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Ontico
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Badoo Development
Лекция о языке программирования Haskell
Лекция о языке программирования HaskellЛекция о языке программирования Haskell
Лекция о языке программирования Haskell
husniyarova
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Yandex
Haskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell languageHaskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell language
Alexander Granin
Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська
Tatyanazaxarova
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в TarantoolИнструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Timur Safin
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
Alexander Granin

More from tfmailru (20)

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

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/