4. 2 проблемы РСУБД
- горизонтальное масштабирование
- rigid schema
NoSQL – мир энтузиастов:
- новые модели данных
- новые языки доступа к данным
- новые модели консистентности данных
- новые алгоритмы хранения данных
- много, много методов масштабирования
5. Современный ландшафт
БД
Основные проблемы масштабирования СУБД
Tarantool: решение из области MPI
Data patterns
Scalability patterns
Обзор планов
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
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
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