SlideShare uma empresa Scribd logo
1 de 25
Baixar para ler offline
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/

Mais conteúdo relacionado

Mais procurados

стандартная библиотека с++: введение
стандартная библиотека с++: введениестандартная библиотека с++: введение
стандартная библиотека с++: введениеmcroitor
 
Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.Alexandr Nox
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularitiesmcroitor
 
лабораторная работа №8
лабораторная работа №8лабораторная работа №8
лабораторная работа №8Zhanna Kazakova
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3 phpclub
 
контейнеры STL
контейнеры STLконтейнеры STL
контейнеры STLmcroitor
 
C++ осень 2012 лекция 11
C++ осень 2012 лекция 11C++ осень 2012 лекция 11
C++ осень 2012 лекция 11Technopark
 
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 scienceOlga Kiseleva
 
Юрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWWЮрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWWPositive Hack Days
 
Clojure – есть ли жизнь после Java
Clojure – есть ли жизнь после JavaClojure – есть ли жизнь после Java
Clojure – есть ли жизнь после JavaOlim 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
 

Mais procurados (20)

стандартная библиотека с++: введение
стандартная библиотека с++: введениестандартная библиотека с++: введение
стандартная библиотека с++: введение
 
Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularities
 
лабораторная работа №8
лабораторная работа №8лабораторная работа №8
лабораторная работа №8
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3
 
Ngs 2
Ngs 2Ngs 2
Ngs 2
 
контейнеры STL
контейнеры STLконтейнеры STL
контейнеры STL
 
C++ осень 2012 лекция 11
C++ осень 2012 лекция 11C++ осень 2012 лекция 11
C++ осень 2012 лекция 11
 
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)
 
Hf labs education day. rocket science
Hf labs education day. rocket scienceHf labs education day. rocket science
Hf labs education day. rocket science
 
Юрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWWЮрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWW
 
Clojure – есть ли жизнь после Java
Clojure – есть ли жизнь после JavaClojure – есть ли жизнь после Java
Clojure – есть ли жизнь после Java
 
plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)
 
Python. Обработка ошибок
Python. Обработка ошибокPython. Обработка ошибок
Python. Обработка ошибок
 
работа с файлами в с++
работа с файлами в с++работа с файлами в с++
работа с файлами в с++
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
 
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
 
Linux (pipes)
Linux (pipes) Linux (pipes)
Linux (pipes)
 
file handling in c
file handling in cfile handling in c
file handling in c
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
 

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

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 BlocksMikhail 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-25Roman 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 templatesPlatonov Sergey
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesPlatonov 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
Лекция о языке программирования Haskellhusniyarova
 
Андрей Субботин "Локализация приложений для 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 languageAlexander Granin
 
Haskell
HaskellHaskell
HaskellDevDay
 
Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Tatyanazaxarova
 
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в TarantoolИнструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в TarantoolTimur Safin
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняAlexander Granin
 

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

Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
 
Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building Blocks
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 
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
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
 
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
 
Лекция о языке программирования Haskell
Лекция о языке программирования HaskellЛекция о языке программирования Haskell
Лекция о языке программирования Haskell
 
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
 
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
 
Haskell
HaskellHaskell
Haskell
 
Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська
 
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в TarantoolИнструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
 

Mais de tfmailru

Стабильность — признак мастерства
Стабильность — признак мастерстваСтабильность — признак мастерства
Стабильность — признак мастерстваtfmailru
 
Создание мобильных приложений: платформы, тренды, тонкости
	Создание мобильных приложений: платформы, тренды, тонкости	Создание мобильных приложений: платформы, тренды, тонкости
Создание мобильных приложений: платформы, тренды, тонкостиtfmailru
 
Tech forum 2011-почта
Tech forum 2011-почтаTech forum 2011-почта
Tech forum 2011-почтаtfmailru
 
Разработка социальных игр «из первых рук»: ваш путь в топ!
	Разработка социальных игр «из первых рук»: ваш путь в топ!	Разработка социальных игр «из первых рук»: ваш путь в топ!
Разработка социальных игр «из первых рук»: ваш путь в топ!tfmailru
 
к форуму технологий вступление Last
к форуму технологий   вступление Lastк форуму технологий   вступление Last
к форуму технологий вступление Lasttfmailru
 
Партнерские возможности Почты: как дружить с миллионами пользователей Mail.Ru
Партнерские возможности Почты: как дружить с миллионами пользователей Mail.RuПартнерские возможности Почты: как дружить с миллионами пользователей Mail.Ru
Партнерские возможности Почты: как дружить с миллионами пользователей Mail.Rutfmailru
 
Платформа@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 Grouptfmailru
 
Hadoop ecosystem
Hadoop ecosystemHadoop ecosystem
Hadoop ecosystemtfmailru
 
Стабильность — признак мастерства
Стабильность — признак мастерстваСтабильность — признак мастерства
Стабильность — признак мастерстваtfmailru
 
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...tfmailru
 
Опыт внедрения и использования распределенной системы хранения данных на осно...
Опыт внедрения и использования распределенной системы хранения данных на осно...Опыт внедрения и использования распределенной системы хранения данных на осно...
Опыт внедрения и использования распределенной системы хранения данных на осно...tfmailru
 
Развитие интерфейса через гайдлайны
Развитие интерфейса через гайдлайныРазвитие интерфейса через гайдлайны
Развитие интерфейса через гайдлайныtfmailru
 
Типичные проблемы с массовыми рассылками и как из избежать
Типичные проблемы с массовыми рассылками и как из избежатьТипичные проблемы с массовыми рассылками и как из избежать
Типичные проблемы с массовыми рассылками и как из избежатьtfmailru
 
Как избавиться от опасных ссылок в вашем проекте
Как избавиться от опасных ссылок в вашем проектеКак избавиться от опасных ссылок в вашем проекте
Как избавиться от опасных ссылок в вашем проектеtfmailru
 
Платежные системы и мошенники в Сети
Платежные системы и мошенники в СетиПлатежные системы и мошенники в Сети
Платежные системы и мошенники в Сетиtfmailru
 
Технологии поиска
Технологии поискаТехнологии поиска
Технологии поискаtfmailru
 

Mais de tfmailru (20)

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