2. Высоконагруженные плоские таблицы
Примеры
sessions
passwd
Характерные особенности
select only by (primary) key
no joins
no complex wheres, no aggregates
sizeof(data) < 256B
высокая доступность
3. Скорость разных типов памяти
Tape is dead, disk is tape, RAM is disk.
Задержка произвольного доступа
RAM — 25 ns
HDD — 8’000’000 ns
Пропускная способность последовательного доступа
RAM — 6’400 MB/s
HDD — 170 MB/s
5. Устройство SLAB аллокатора
Высокая скорость
Рассчитан на хранение множества мелких объектов
Низкие накладные расходы
Отсутствие внешней фрагментации
4MB
free list
alloc
meta
free
...
“phantom” pointers
6. Массаракш: код наизнанку
FSM, libev only Fiber, libev+libcoro
read1 read1
read2 read2
loop loop
process process
write1 write1
7. Persistance
WAL Snapshot
read main process
fork
prepare
writer child
commit/rollback
reply HDD
Запись строго последовательная
Copy on Write
8. Hot Standby
Remote/Log Streaming
Local
port master replica1
master beholder replica2
Zero downtime апгрейд Readonly реплики на
удаленных серверах
9. IProto/Silverbox binary protocol
async safe: каждый запрос маркирован sync числом
tuple storage
< key1 , value1 , key2 , value2 , . . . , valuen >
атомарные операции: +/−, and , or , xor
namespaces
индексы — u32 или string
несколько индексов в одном namespace
10. Эмуляция memcached
нет evictions
expire — отложенный, с помощью background fiber
11. Производительность
latency
цена сискола
пропускная способность дисков невелика
1 KB × 100000 rps = 1MB × 100rps = 100 MB/sec
u32 в два раза быстрее string key
12. Что дальше?
новый формат WAL
расширенная версия бинарного протокола
Lua
Эмуляция протокола redis
13. Open Source
http://opensource.mail.ru/
http://github.com/mailru/
opensource@corp.mail.ru