SlideShare a Scribd company logo
1 of 24
Download to read offline
Tarantool: как обработать
      8
1.5^10 запросов в сутки?

      Константин Осипов, Mail.Ru
План
Основные проблемы масштабирования СУБД
Tarantool: решение из области shared nothing
Data patterns
Scalability patterns
Обзор планов
СУБД: современный ландшафт
СУБД: прогноз
3 проблемы РСУБД
- горизонтальное масштабирование
- rigid schema
- производительность
NoSQL – мир энтузиастов:
- новые модели данных, модели консистентности данных
- новые языки доступа к данным
- новые алгоритмы хранения данных
- много, много новых методов масштабирования
Модель данных
Пространства
(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 байт кортеж
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: 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: нотификации



- 6 машин по 4 Tarantool/Box на каждом
- notification_push(), notification_read()
- 250 GB постоянно меняющихся данных
Масштабирование

                                0 ...10М   Shard 1

Application   Tarantool Proxy
                                10...20М   Shard 2


                                20+ М      Shard 3
Планы
Поддержка транзакций
Мастер-мастер репликация
Кластер менеджер
Спасибо!
http://github.com/mailru/tarantool - исходный код
http://github.com/mailru/tntlua - репозиторий хранимых процедур
http://nosql-databases.org - обзор альтернатив NoSQL
http://groups.google.com/group/tarantool-ru - список рассылки
http://tarantool.org/dist/ - всегда свежие .tar.gz и .rpm
http://habrahabr.ru/blogs/nosql - NoSQL на хабре

                   kostja.osipov@gmail.com
                      http://tarantool.org

More Related Content

What's hot

Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Ontico
 
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Tanya Denisyuk
 
Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Ontico
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...Ontico
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Ontico
 
Reform: путь к лучшему ORM
Reform: путь к лучшему ORMReform: путь к лучшему ORM
Reform: путь к лучшему ORMBadoo Development
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo Development
 
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...Ontico
 
Владислав Животнев - Основы DNS
Владислав Животнев - Основы DNSВладислав Животнев - Основы DNS
Владислав Животнев - Основы DNSYandex
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Ontico
 
Почему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияПочему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияMichael Pankov
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Yandex
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанкуNikolay Sivko
 
Clojure – есть ли жизнь после Java
Clojure – есть ли жизнь после JavaClojure – есть ли жизнь после Java
Clojure – есть ли жизнь после JavaOlim Saidov
 
Типичный стек технологий для использования с Node.js
Типичный стек технологий для использования с Node.jsТипичный стек технологий для использования с Node.js
Типичный стек технологий для использования с Node.jsSerge Shirokov
 
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...
Долгожданный релиз pg_pathman 1.0 / Александр Коротков,  Дмитрий Иванов (Post...Долгожданный релиз pg_pathman 1.0 / Александр Коротков,  Дмитрий Иванов (Post...
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...Ontico
 
Введение в потоки питона
Введение в потоки питонаВведение в потоки питона
Введение в потоки питонаAndrey Niahajchyk
 
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python Meetup
 

What's hot (20)

Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
 
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
 
Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
 
Reform: путь к лучшему ORM
Reform: путь к лучшему ORMReform: путь к лучшему ORM
Reform: путь к лучшему ORM
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
 
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
 
Владислав Животнев - Основы DNS
Владислав Животнев - Основы DNSВладислав Животнев - Основы DNS
Владислав Животнев - Основы DNS
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
 
Почему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияПочему Rust стоит вашего внимания
Почему Rust стоит вашего внимания
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанку
 
Clojure – есть ли жизнь после Java
Clojure – есть ли жизнь после JavaClojure – есть ли жизнь после Java
Clojure – есть ли жизнь после Java
 
2014-11-01 03 Николай Линкер. Open your clojure
2014-11-01 03 Николай Линкер. Open your clojure2014-11-01 03 Николай Линкер. Open your clojure
2014-11-01 03 Николай Линкер. Open your clojure
 
Типичный стек технологий для использования с Node.js
Типичный стек технологий для использования с Node.jsТипичный стек технологий для использования с Node.js
Типичный стек технологий для использования с Node.js
 
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...
Долгожданный релиз pg_pathman 1.0 / Александр Коротков,  Дмитрий Иванов (Post...Долгожданный релиз pg_pathman 1.0 / Александр Коротков,  Дмитрий Иванов (Post...
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...
 
Введение в потоки питона
Введение в потоки питонаВведение в потоки питона
Введение в потоки питона
 
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
 
file handling in c++
file handling in c++file handling in c++
file handling in c++
 

Viewers also liked

Осваиваем 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
 
Эволюция разработки (Ермаков Игорь), Форум технологий Mail.Ru Group
Эволюция разработки (Ермаков Игорь), Форум технологий Mail.Ru GroupЭволюция разработки (Ермаков Игорь), Форум технологий Mail.Ru Group
Эволюция разработки (Ермаков Игорь), Форум технологий Mail.Ru Grouptfmailru
 
Типичные проблемы с массовыми рассылками и как их избежать
Типичные проблемы с массовыми рассылками и как их избежатьТипичные проблемы с массовыми рассылками и как их избежать
Типичные проблемы с массовыми рассылками и как их избежатьtfmailru
 
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Ontico
 
Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...
Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...
Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...Ontico
 
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013it-people
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetOleg Tsarev
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Ontico
 
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...odnoklassniki.ru
 
Класс!ная Cassandra
Класс!ная CassandraКласс!ная Cassandra
Класс!ная Cassandraodnoklassniki.ru
 
"Building data streams" Константин Евтеев (Avito)
"Building data streams" Константин Евтеев (Avito)"Building data streams" Константин Евтеев (Avito)
"Building data streams" Константин Евтеев (Avito)AvitoTech
 
1145 1230 Технологическое партнерство с Microsoft – опыт Mail.Ru Group
1145 1230 Технологическое партнерство с Microsoft – опыт Mail.Ru Group1145 1230 Технологическое партнерство с Microsoft – опыт Mail.Ru Group
1145 1230 Технологическое партнерство с Microsoft – опыт Mail.Ru Grouptfmailru
 
Tech forum 2011-почта
Tech forum 2011-почтаTech forum 2011-почта
Tech forum 2011-почтаtfmailru
 
Опыт внедрения и использования распределенной системы хранения данных на осно...
Опыт внедрения и использования распределенной системы хранения данных на осно...Опыт внедрения и использования распределенной системы хранения данных на осно...
Опыт внедрения и использования распределенной системы хранения данных на осно...tfmailru
 
Платформа@Mail.Ru: настоящее и будущее
Платформа@Mail.Ru: настоящее и будущееПлатформа@Mail.Ru: настоящее и будущее
Платформа@Mail.Ru: настоящее и будущееtfmailru
 
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...tfmailru
 

Viewers also liked (20)

Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
 
Эволюция разработки (Ермаков Игорь), Форум технологий Mail.Ru Group
Эволюция разработки (Ермаков Игорь), Форум технологий Mail.Ru GroupЭволюция разработки (Ермаков Игорь), Форум технологий Mail.Ru Group
Эволюция разработки (Ермаков Игорь), Форум технологий Mail.Ru Group
 
Типичные проблемы с массовыми рассылками и как их избежать
Типичные проблемы с массовыми рассылками и как их избежатьТипичные проблемы с массовыми рассылками и как их избежать
Типичные проблемы с массовыми рассылками и как их избежать
 
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
 
Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...
Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...
Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...
 
ClickHouse Intro
ClickHouse IntroClickHouse Intro
ClickHouse Intro
 
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTarget
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
 
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
 
Класс!ная Cassandra
Класс!ная CassandraКласс!ная Cassandra
Класс!ная Cassandra
 
"Building data streams" Константин Евтеев (Avito)
"Building data streams" Константин Евтеев (Avito)"Building data streams" Константин Евтеев (Avito)
"Building data streams" Константин Евтеев (Avito)
 
ClickHouse
ClickHouseClickHouse
ClickHouse
 
Alekseev
AlekseevAlekseev
Alekseev
 
1145 1230 Технологическое партнерство с Microsoft – опыт Mail.Ru Group
1145 1230 Технологическое партнерство с Microsoft – опыт Mail.Ru Group1145 1230 Технологическое партнерство с Microsoft – опыт Mail.Ru Group
1145 1230 Технологическое партнерство с Microsoft – опыт Mail.Ru Group
 
Tech forum 2011-почта
Tech forum 2011-почтаTech forum 2011-почта
Tech forum 2011-почта
 
Опыт внедрения и использования распределенной системы хранения данных на осно...
Опыт внедрения и использования распределенной системы хранения данных на осно...Опыт внедрения и использования распределенной системы хранения данных на осно...
Опыт внедрения и использования распределенной системы хранения данных на осно...
 
Sumin
SuminSumin
Sumin
 
Платформа@Mail.Ru: настоящее и будущее
Платформа@Mail.Ru: настоящее и будущееПлатформа@Mail.Ru: настоящее и будущее
Платформа@Mail.Ru: настоящее и будущее
 
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
 

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

Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Mikhail Kurnosov
 
Лекция о языке программирования Haskell
Лекция о языке программирования HaskellЛекция о языке программирования Haskell
Лекция о языке программирования Haskellhusniyarova
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...pgdayrussia
 
Haskell
HaskellHaskell
HaskellDevDay
 
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
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаAnastasia Lubennikova
 
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...Ontico
 
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)Ontico
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPython Meetup
 
13 - Hadoop. Парадигма Spark
13 - Hadoop. Парадигма Spark13 - Hadoop. Парадигма Spark
13 - Hadoop. Парадигма SparkRoman Brovko
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksMikhail Kurnosov
 
Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2Technopark
 
Лекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировкиЛекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировкиMikhail Kurnosov
 
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Yandex
 
Олег Алистратов — Сортировка списков в Perl и Python
Олег Алистратов — Сортировка списков в Perl и PythonОлег Алистратов — Сортировка списков в Perl и Python
Олег Алистратов — Сортировка списков в Perl и PythonYandex
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Yandex
 
ОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, спискиОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, спискиVladimir Parfinenko
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Yandex
 

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

Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
 
Лекция о языке программирования Haskell
Лекция о языке программирования HaskellЛекция о языке программирования Haskell
Лекция о языке программирования Haskell
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
 
Haskell
HaskellHaskell
Haskell
 
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
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
 
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
 
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стиль
 
13 - Hadoop. Парадигма Spark
13 - Hadoop. Парадигма Spark13 - Hadoop. Парадигма Spark
13 - Hadoop. Парадигма Spark
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building Blocks
 
Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2
 
Лекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировкиЛекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировки
 
Algo 00
Algo 00Algo 00
Algo 00
 
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
 
Олег Алистратов — Сортировка списков в Perl и Python
Олег Алистратов — Сортировка списков в Perl и PythonОлег Алистратов — Сортировка списков в Perl и Python
Олег Алистратов — Сортировка списков в Perl и Python
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
Sphinx search
Sphinx searchSphinx search
Sphinx search
 
ОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, спискиОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, списки
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 

More from tfmailru

Стабильность — признак мастерства
Стабильность — признак мастерстваСтабильность — признак мастерства
Стабильность — признак мастерстваtfmailru
 
Создание мобильных приложений: платформы, тренды, тонкости
	Создание мобильных приложений: платформы, тренды, тонкости	Создание мобильных приложений: платформы, тренды, тонкости
Создание мобильных приложений: платформы, тренды, тонкостиtfmailru
 
Разработка социальных игр «из первых рук»: ваш путь в топ!
	Разработка социальных игр «из первых рук»: ваш путь в топ!	Разработка социальных игр «из первых рук»: ваш путь в топ!
Разработка социальных игр «из первых рук»: ваш путь в топ!tfmailru
 
к форуму технологий вступление Last
к форуму технологий   вступление Lastк форуму технологий   вступление Last
к форуму технологий вступление Lasttfmailru
 
Партнерские возможности Почты: как дружить с миллионами пользователей Mail.Ru
Партнерские возможности Почты: как дружить с миллионами пользователей Mail.RuПартнерские возможности Почты: как дружить с миллионами пользователей Mail.Ru
Партнерские возможности Почты: как дружить с миллионами пользователей Mail.Rutfmailru
 
Машинное обучение в ранжировании поиска
Машинное обучение в ранжировании поискаМашинное обучение в ранжировании поиска
Машинное обучение в ранжировании поискаtfmailru
 
Hadoop ecosystem
Hadoop ecosystemHadoop ecosystem
Hadoop ecosystemtfmailru
 
Стабильность — признак мастерства
Стабильность — признак мастерстваСтабильность — признак мастерства
Стабильность — признак мастерстваtfmailru
 
Развитие интерфейса через гайдлайны
Развитие интерфейса через гайдлайныРазвитие интерфейса через гайдлайны
Развитие интерфейса через гайдлайныtfmailru
 
Типичные проблемы с массовыми рассылками и как из избежать
Типичные проблемы с массовыми рассылками и как из избежатьТипичные проблемы с массовыми рассылками и как из избежать
Типичные проблемы с массовыми рассылками и как из избежатьtfmailru
 
Как избавиться от опасных ссылок в вашем проекте
Как избавиться от опасных ссылок в вашем проектеКак избавиться от опасных ссылок в вашем проекте
Как избавиться от опасных ссылок в вашем проектеtfmailru
 
Платежные системы и мошенники в Сети
Платежные системы и мошенники в СетиПлатежные системы и мошенники в Сети
Платежные системы и мошенники в Сетиtfmailru
 
Технологии поиска
Технологии поискаТехнологии поиска
Технологии поискаtfmailru
 
Как не утонуть в мегабайтах JS-кода
Как не утонуть в мегабайтах JS-кодаКак не утонуть в мегабайтах JS-кода
Как не утонуть в мегабайтах JS-кодаtfmailru
 
Платежные системы и мошенники в Сети (Ефимочкин Андрей))
Платежные системы и мошенники в Сети (Ефимочкин Андрей))Платежные системы и мошенники в Сети (Ефимочкин Андрей))
Платежные системы и мошенники в Сети (Ефимочкин Андрей))tfmailru
 
Программа форума
Программа форумаПрограмма форума
Программа форумаtfmailru
 
Как мы в Почте@Mail.Ru выдерживаем высокие нагрузки
Как мы в Почте@Mail.Ru выдерживаем высокие нагрузкиКак мы в Почте@Mail.Ru выдерживаем высокие нагрузки
Как мы в Почте@Mail.Ru выдерживаем высокие нагрузкиtfmailru
 

More from tfmailru (17)

Стабильность — признак мастерства
Стабильность — признак мастерстваСтабильность — признак мастерства
Стабильность — признак мастерства
 
Создание мобильных приложений: платформы, тренды, тонкости
	Создание мобильных приложений: платформы, тренды, тонкости	Создание мобильных приложений: платформы, тренды, тонкости
Создание мобильных приложений: платформы, тренды, тонкости
 
Разработка социальных игр «из первых рук»: ваш путь в топ!
	Разработка социальных игр «из первых рук»: ваш путь в топ!	Разработка социальных игр «из первых рук»: ваш путь в топ!
Разработка социальных игр «из первых рук»: ваш путь в топ!
 
к форуму технологий вступление Last
к форуму технологий   вступление Lastк форуму технологий   вступление Last
к форуму технологий вступление Last
 
Партнерские возможности Почты: как дружить с миллионами пользователей Mail.Ru
Партнерские возможности Почты: как дружить с миллионами пользователей Mail.RuПартнерские возможности Почты: как дружить с миллионами пользователей Mail.Ru
Партнерские возможности Почты: как дружить с миллионами пользователей Mail.Ru
 
Машинное обучение в ранжировании поиска
Машинное обучение в ранжировании поискаМашинное обучение в ранжировании поиска
Машинное обучение в ранжировании поиска
 
Hadoop ecosystem
Hadoop ecosystemHadoop ecosystem
Hadoop ecosystem
 
Стабильность — признак мастерства
Стабильность — признак мастерстваСтабильность — признак мастерства
Стабильность — признак мастерства
 
Развитие интерфейса через гайдлайны
Развитие интерфейса через гайдлайныРазвитие интерфейса через гайдлайны
Развитие интерфейса через гайдлайны
 
Типичные проблемы с массовыми рассылками и как из избежать
Типичные проблемы с массовыми рассылками и как из избежатьТипичные проблемы с массовыми рассылками и как из избежать
Типичные проблемы с массовыми рассылками и как из избежать
 
Как избавиться от опасных ссылок в вашем проекте
Как избавиться от опасных ссылок в вашем проектеКак избавиться от опасных ссылок в вашем проекте
Как избавиться от опасных ссылок в вашем проекте
 
Платежные системы и мошенники в Сети
Платежные системы и мошенники в СетиПлатежные системы и мошенники в Сети
Платежные системы и мошенники в Сети
 
Технологии поиска
Технологии поискаТехнологии поиска
Технологии поиска
 
Как не утонуть в мегабайтах JS-кода
Как не утонуть в мегабайтах JS-кодаКак не утонуть в мегабайтах JS-кода
Как не утонуть в мегабайтах JS-кода
 
Платежные системы и мошенники в Сети (Ефимочкин Андрей))
Платежные системы и мошенники в Сети (Ефимочкин Андрей))Платежные системы и мошенники в Сети (Ефимочкин Андрей))
Платежные системы и мошенники в Сети (Ефимочкин Андрей))
 
Программа форума
Программа форумаПрограмма форума
Программа форума
 
Как мы в Почте@Mail.Ru выдерживаем высокие нагрузки
Как мы в Почте@Mail.Ru выдерживаем высокие нагрузкиКак мы в Почте@Mail.Ru выдерживаем высокие нагрузки
Как мы в Почте@Mail.Ru выдерживаем высокие нагрузки
 

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

  • 1. Tarantool: как обработать 8 1.5^10 запросов в сутки? Константин Осипов, Mail.Ru
  • 2. План Основные проблемы масштабирования СУБД Tarantool: решение из области shared nothing Data patterns Scalability patterns Обзор планов
  • 5. 3 проблемы РСУБД - горизонтальное масштабирование - rigid schema - производительность NoSQL – мир энтузиастов: - новые модели данных, модели консистентности данных - новые языки доступа к данным - новые алгоритмы хранения данных - много, много новых методов масштабирования
  • 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 байт кортеж Tarantool: 100k writes, 260k reads
  • 13.
  • 14.
  • 15.
  • 16. 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 Новая строка
  • 17. 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);
  • 18. 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);
  • 19. 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
  • 20. 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%
  • 21. Pattern: нотификации - 6 машин по 4 Tarantool/Box на каждом - notification_push(), notification_read() - 250 GB постоянно меняющихся данных
  • 22. Масштабирование 0 ...10М Shard 1 Application Tarantool Proxy 10...20М Shard 2 20+ М Shard 3
  • 24. Спасибо! http://github.com/mailru/tarantool - исходный код http://github.com/mailru/tntlua - репозиторий хранимых процедур http://nosql-databases.org - обзор альтернатив NoSQL http://groups.google.com/group/tarantool-ru - список рассылки http://tarantool.org/dist/ - всегда свежие .tar.gz и .rpm http://habrahabr.ru/blogs/nosql - NoSQL на хабре kostja.osipov@gmail.com http://tarantool.org