Osipov

737 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
737
On SlideShare
0
From Embeds
0
Number of Embeds
260
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Osipov

  1. 1. Tarantool 1.5:хранение данных на диске Konstantin Osipov, kostja@tarantool.org April 09th, 2013 http://techforum.mail.ru
  2. 2. Прейскурант● Новые возможности Tarantool 1.4.9 - 62 р.● Алгоритмы хранения данных на диске - 165 р.● Log-structured merge trees в Tarantool - 200 р.● Компот из сухофруктов - 20 р.
  3. 3. ДЕЙСТВИЕ ПЕРВОЕ, Явление 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
  4. 4. BITSET index: применение● вычисление логических выражений● b1 & !b2 || b3 & b4● наиболее компактный индекс по разреженным данным (1 bit per value vs 16 bytes in TREE)● поиск по интересам, рекомендательные сети, tag clouds
  5. 5. 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
  6. 6. 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ов!
  7. 7. 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)
  8. 8. Lua box.socket: выход на бис● box.net.box: работа с удалёнными Tarantool/Box● box.net.mysql, box.net.pg – доступ к MySQL и PostgreSQL из хранимых процедур● → single-round-trip database proxy and cache
  9. 9. Антракт
  10. 10. ДЕЙСТВИЕ ПЕРВОЕ, Явление II Diskstore •B-tree – most popular disk- •B-tree balances INSERT, U •DELETEs can be slow
  11. 11. СУБД быстрая, настраивать надо уметь
  12. 12. B-tree: внутреннее устройство
  13. 13. LSM-tree: внутреннее устройство
  14. 14. LSM-tree: внутреннее устройство
  15. 15. LSM example: LevelDB
  16. 16. 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
  17. 17. PUT(37), PUT(16) Self-Balancing Tree Memory DiskWAL:
  18. 18. 16 37 Self-Balancing Tree Memory DiskWAL: 37, 16
  19. 19. 7 41 Self-Balancing Tree Memory 16 37 Sorted String Table DiskWAL: 41, 7, 37, 16
  20. 20. Memory 7 37 Disk 7 16 37 41WAL: 41, 7, 28, 16
  21. 21. 10 28 Memory 7 37 Disk 7 16 37 41WAL: 10, 28, 41, 7, 37, 16
  22. 22. Memory 10 28 Disk 7 16 37 41WAL: 10, 28, 41, 7, 37, 16
  23. 23. 2 47 Memory 10 28 Disk 7 16 37 41WAL: 47, 2, 10, 28, 41, 7, 37, 16
  24. 24. Memory 2 28 Disk 2 10 28 41 2 7 10 16 28 37 41 47WAL: 47, 2, 10, 28, 41, 7, 37, 16
  25. 25. 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
  26. 26. 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
  27. 27. 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
  28. 28. 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
  29. 29. 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
  30. 30. 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
  31. 31. 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
  32. 32. 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,
  33. 33. 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,
  34. 34. 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,
  35. 35. LSM-tree: применение● Данные с разной степенью актуальности – Ленты сообщений – Стена в соцсети – Чаты – События● Сегрегация данных – Данные в LSM space, индекс в MEMORY space
  36. 36. Эпилог● Tarantool/Box - *fast* in-memory database● Идеального способа хранения данных на диске не существует● Плохих способов реализовано предостаточно● LSM-деревья оптимальны для часто меняющихся данных● in-memory + disk-store в одном продукте = возможность тонко подстроиться под нужды конкретной задачи
  37. 37. ?
  38. 38. Действующие лицаDmitry Simonenko – клиенты, библиотеки Lua, билды● Dmitry E. Oboukhov, – Perl monger, главный тролль● Roman Tsisyk, – алгоритмы,● Konstantin Osipov – продавец-кассир● … а также актёры ведущих московских театров
  39. 39. Tarantool 1.5:хранение данных на диске

×