2. План
Архитектура и модель данных NoSQL СУБД Tarantool/Box
Производительность в сравнении с Redis
Доступ из PHP
Data patterns
Scalability patterns
Обзор планов
10. 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 Новая строка
11. 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);
12. 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);
13. Pattern FIFO: PHP
primary key
...
index.php
begin pointer
clients.php
end pointer contacts.php
15. 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
16. Pattern Memcache
• есть возможность создавать свои микро-потоки:
• box.coro.create(), box.coro.yield()
• создаёте хранимую процедуру, запускаете её
• получаете custom expire process
• используется для хранения сессий в mail.ru:
4 машины, по 2 Tarantool/Box на каждой, 2 мастера,
и 2 реплики
40-60k requests/second, CPU usage < 20%
17. 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
19. Что такое Tarantool Proxy
•
Многопоточный демон
•
Отправляет запросы на разные сервера
•
Определение сервера с помощью конфигурационного
файла или плагина
20. 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
21. Не успели рассказать о:
Интеграция в Voldemort
Доступ из Perl, Python, C, Ruby, Java
http://github.com/mailru/tntlua,
http://github.com/mailru/nosqlbench,
http://github.com/akalend/