• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Osipov
 

Osipov

on

  • 448 views

 

Statistics

Views

Total Views
448
Views on SlideShare
306
Embed Views
142

Actions

Likes
0
Downloads
5
Comments
0

2 Embeds 142

http://techforum.mail.ru 139
http://www.techforum.mail.ru 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Osipov Osipov Presentation Transcript

    • Tarantool 1.5:хранение данных на диске Konstantin Osipov, kostja@tarantool.org April 09th, 2013 http://techforum.mail.ru
    • Прейскурант● Новые возможности Tarantool 1.4.9 - 62 р.● Алгоритмы хранения данных на диске - 165 р.● Log-structured merge trees в Tarantool - 200 р.● Компот из сухофруктов - 20 р.
    • ДЕЙСТВИЕ ПЕРВОЕ, Явление IНовые возможности 1.4.9:● 90% ускорение TREE индексов● BITSET index● Lua box.socket API● on_connect/on_disconnect triggers● См. https://launchpad.net/tarantool/1.4/1.4.9
    • BITSET index: применение● вычисление логических выражений● b1 & !b2 || b3 & b4● наиболее компактный индекс по разреженным данным (1 bit per value vs 16 bytes in TREE)● поиск по интересам, рекомендательные сети, tag clouds
    • BITSET index: крупный план b0 b1 b2 b3 b4 tuples 1 1 1 1 1 {…, 31, …} 0 0 0 0 0 {…, 0, …} key={20} 1 0 1 0 0 {…, 20, …} 0 1 0 0 1 {…, 9, …}23 = 0b10100 1 0 1 1 1 {…, 23, …} 0 1 0 0 0 {…, 8, …}b0 — параметр 1 1 0 1 0 {…, 26, …}b1 — параметр 0 1 0 1 0 {…, 10, …}b2 — параметр 1 0 0 1 1 {…, 19, …}b3 — параметр 0 1 0 0 1 {…, 9, …} key bits value
    • Lua box.socket API● LuaSocket совместимое API● box.socket.udp(), box.socket.tcp()● socket:recv(), send(), readline(), recvfrom(), sendto()● cерверные сокеты: socket:bind(), socket:listen()● встроенный асинхронный DNS resolver● → zero-conf, proactive monitoring via UDP● → node.js для Lua, но без callbackов!
    • Lua box.socket examples = box.socket.tcp()s:connect(google.com, 80)s:send("GET / HTTP/1.0rnrn")hdr = s:readline({ "rnrn", "nn"})body = s:recv(parse_header(hdr).content_length)
    • Lua box.socket: выход на бис● box.net.box: работа с удалёнными Tarantool/Box● box.net.mysql, box.net.pg – доступ к MySQL и PostgreSQL из хранимых процедур● → single-round-trip database proxy and cache
    • Антракт
    • ДЕЙСТВИЕ ПЕРВОЕ, Явление II Diskstore •B-tree – most popular disk- •B-tree balances INSERT, U •DELETEs can be slow
    • СУБД быстрая, настраивать надо уметь
    • B-tree: внутреннее устройство
    • LSM-tree: внутреннее устройство
    • LSM-tree: внутреннее устройство
    • LSM example: LevelDB
    • Diskstore: крупный план● отдельный тип хранения данных, по аналогии с MySQL storage engine● 0% performance overhead if not used● .engine = MEMORY, .engine = LSM● key/value only (no secondary keys yet)● оптимально для 50/50 READ-WRITE workload
    • PUT(37), PUT(16) Self-Balancing Tree Memory DiskWAL:
    • 16 37 Self-Balancing Tree Memory DiskWAL: 37, 16
    • 7 41 Self-Balancing Tree Memory 16 37 Sorted String Table DiskWAL: 41, 7, 37, 16
    • Memory 7 37 Disk 7 16 37 41WAL: 41, 7, 28, 16
    • 10 28 Memory 7 37 Disk 7 16 37 41WAL: 10, 28, 41, 7, 37, 16
    • Memory 10 28 Disk 7 16 37 41WAL: 10, 28, 41, 7, 37, 16
    • 2 47 Memory 10 28 Disk 7 16 37 41WAL: 47, 2, 10, 28, 41, 7, 37, 16
    • Memory 2 28 Disk 2 10 28 41 2 7 10 16 28 37 41 47WAL: 47, 2, 10, 28, 41, 7, 37, 16
    • 6 49 Memory 2 28 Disk 2 10 28 41 2 7 10 16 28 37 41 47WAL: 49, 6, 47, 2, 10, 28, 41, 7, 37, 16
    • Memory 6 49 Disk 2 10 28 41 2 7 10 16 28 37 41 47WAL: 49, 6, 47, 2, 10, 28, 41, 7, 37, 16
    • 23 32 Memory 6 49 Disk 2 10 28 41 2 7 10 16 28 37 41 47WAL: 32, 23, 49, 6, 47, 2, 10, 28, 41, 7, 37, 16
    • Memory 6 32 Disk 6 23 32 49 2 7 10 16 28 37 41 47WAL: 32, 23, 49, 6, 47, 2, 10, 28, 41, 7, 37, 16
    • 30 45 Memory 6 32 Disk 6 23 32 49 2 7 10 16 28 37 41 47WAL: 30, 45, 32, 23, 49, 6, 47, 2, 10, 28, 41, 7, 37, 16
    • 14 38 Memory 30 45 Disk 6 23 32 49 2 7 10 16 28 37 41 47WAL: 38, 14, 30, 45, 32, 23, 49, 6, 47, 2, 10, 28, 41, 7, 37, 16
    • 6 10 Memory 2 30 Disk 2 14 30 41 2 7 14 23 30 37 41 47 2 6 7 10 14 16 23 28 30 32 37 38 41 45 47 49WAL: 10, 6, 38, 14, 45, 30, 45, 32, 23, 49, 6, 47, 2, 10, 28, 41, 7, 37, 16
    • Memory 22 37 Disk 10 25 36 42 3 8 15 26 35 40 45 48 2 6 7 10 14 16 23 28 30 32 37 38 41 45 47 49WAL: 37, 22, 36, 10, 25, 42, 10, 6, 38, 14, 45, 30, 45, 32, 23, 49, 6, 47, 2, 10, 28, 41,
    • GET(16) Memory 22 37 Disk 10 25 36 42 3 8 15 26 35 40 45 48 2 6 7 10 14 16 23 28 30 32 37 38 41 45 47 49WAL: 37, 22, 36, 10, 25, 42, 10, 6, 38, 14, 45, 30, 45, 32, 23, 49, 6, 47, 2, 10, 28, 41,
    • GET(16) Memory 22 37 Disk 10 25 36 42 3 8 15 26 35 40 45 48 2 6 7 10 14 16 23 28 30 32 37 38 41 45 47 49WAL: 37, 22, 36, 10, 25, 42, 10, 6, 38, 14, 45, 30, 45, 32, 23, 49, 6, 47, 2, 10, 28, 41,
    • LSM-tree: применение● Данные с разной степенью актуальности – Ленты сообщений – Стена в соцсети – Чаты – События● Сегрегация данных – Данные в LSM space, индекс в MEMORY space
    • Эпилог● Tarantool/Box - *fast* in-memory database● Идеального способа хранения данных на диске не существует● Плохих способов реализовано предостаточно● LSM-деревья оптимальны для часто меняющихся данных● in-memory + disk-store в одном продукте = возможность тонко подстроиться под нужды конкретной задачи
    • ?
    • Действующие лицаDmitry Simonenko – клиенты, библиотеки Lua, билды● Dmitry E. Oboukhov, – Perl monger, главный тролль● Roman Tsisyk, – алгоритмы,● Konstantin Osipov – продавец-кассир● … а также актёры ведущих московских театров
    • Tarantool 1.5:хранение данных на диске