Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Антон Коновалов – «RoaringBitmap: что это такое...
Search
Ozon Tech
September 22, 2023
Technology
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Антон Коновалов – «RoaringBitmap: что это такое и как мы это используем»
Ozon Tech
September 22, 2023
More Decks by Ozon Tech
See All by Ozon Tech
Анастасия Писнова, «Текст как проект»
ozontech
0
75
Светлана Каюшина, Автоматизируем документирование и внедряем ИИ
ozontech
0
87
Павел Костромитин, «Что случилось у UXW T-Банка в 2024 »
ozontech
0
160
Сергей Горшенин, «Конвертация данных Ozon»
ozontech
0
84
Юрий Гуреев, «Интеграция 1С с внешними системами. Проблемы и их решения»
ozontech
0
110
Артём Нургалиев, «Кэш на кэш: как ускоряли автобиддеры»
ozontech
0
74
Анна Мария Попова (Х5 Tech) – Фантастический техпис: может ли опыт создания художественных книг помочь в написании документации
ozontech
0
260
Александр Мачулин (Gramax) – Справочник фантастических тварей из Docs as Code
ozontech
0
280
Мария Смирнова – Дзен и искусство работы с документацией: как использовать принципы буддизма в работе техписа
ozontech
0
210
Other Decks in Technology
See All in Technology
AI Coding Agent時代のcdk-nagガードレール 〜組織ルールを強制CIで守り抜く設計の挑戦〜
mhrtech
3
460
「最後に責任を取るのはチーム」— 人間のPRレビューを最小化してアップデートしたメンタルモデル
jnishime_dresscode
0
970
AIコード生成×サプライチェーン攻撃 — PHPが直面する“二重の信頼問題
shinyasaita
0
330
Amplify Gen2でbackend.tsにCDKを定義する/しない事によるCDKの挙動の違いとユースケース
smt7174
1
450
全員がリーダーである世界へ キリマンジャロ登頂とシェアド・リーダー
jinwatanabe
0
110
探索・可視化・自動化を一本化 Amazon Quickでデータ活用スピードを上げる方法
koheiyoshikawa
0
130
インフラと開発の垣根を超えていき!〜元AWSインフラエンジニアがAWS開発で奮闘している話〜
hatahata021
3
310
ファミコンでPHPを動かす / PHP on the Famicom
tomzoh
2
530
ruby.wasmとPicoRuby.wasmに対応した仮想DOMライブラリを作ってる話 #kaigieffect_kaigi
sue445
PRO
0
160
ガバナンスの「ちょうどいい落とし所」を探れ!開発スピードを妨げない運用判断の勘所 / SRE NEXT 2026
genda
1
270
Multicaで30個のミニプロジェクトをAIエージェント運用して見えてきたこと
eiei114
0
540
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
3
440
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
135
10k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1k
Design in an AI World
tapps
1
260
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Automating Front-end Workflow
addyosmani
1370
210k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
Faster Mobile Websites
deanohume
310
32k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.7k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Designing Powerful Visuals for Engaging Learning
tmiket
1
450
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.4k
Transcript
Ozon Tech 2023 RoaringBitmap: что это такое и как мы
это используем Антон Коновалов, руководитель отдела «Сегменты и триггерные коммуникации»
Что такое битмапы 1
Какие свойства? Где используют? Bitmap, bitset, bit-array 3 Index 0
1 2 3 4 5 6 7 . . . N Bitmap 0 1 0 1 0 0 1 . . . 1 N существует в этом наборе 2 не существует в этом наборе
4 Почему это быстро? Храня наборы целых чисел в таком
представлении, bitmap могут использовать преимущества чрезвычайно быстрых инструкций CPU • bitwise-AND • bitwise-OR • SIMD
Маски 5
При решении каких задач мы используем bitmap в отделе «Сегменты
и триггерные коммуникации»? 2
Построение сегментов и сегментирование Сегменты 7
Визуализация сегментов Сегменты 8
Конструктор рассылок по аудиториям и аналитика по результатам Коммуникации 9
Конструктор рассылок по аудиториям и аналитика по результатам Коммуникации 10
Как написать свой маленький Bitset на Gо? 11
RoaringBitmap 3
Сжатые Bitmap. Могут быть в сотни раз быстрее RoaringBitmap 13
0х0000 0х0001 0х0001 0 62 124 186 248 310 … 61 938 [0,99] [101,99] [300,99] 1 0 1 0 1 0 … 0 16-bit values + pointers to container 1000 sorted 16-bit values (2000 B) 216 bits (8kB) 3 х 2 B = 6 B Three pairs of 16-bit values, indicating intervals [0,99], [101, 200], [300,399]; pairs are sorted for fast random access array container (1000 values) run container (3 runs) bitset container (215 values)
На сегменте 100_000_000 пользователей Посчитаем размер 14 Bitset 1. Структура
хранения: []uint64 2. Размер сета: 100_000_000 / 64 = 1_562_500 3. 1_562_500 * 8 bytes = 12.5Mb RoaringBitmap 1. Зависит от случая, посмотрим в коде J
[email protected]
Спасибо за внимание Антон Коновалов, руководитель отдела «Сегменты и
триггерные коммуникации»