5. 3 проблемы РСУБД
- горизонтальное масштабирование
- rigid schema
- производительность
NoSQL – мир энтузиастов:
- новые модели данных, модели консистентности данных
- новые языки доступа к данным
- новые алгоритмы хранения данных
- много, много новых методов масштабирования
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 постоянно меняющихся данных