Vivace Bitmap
๋นํธ๋งต์ด๋?
์ฌ๊ธฐ์ ๋นํธ๋งต์ ์ธ๋ฑ์ค์ ํ ์ข ๋ฅ์ ๋๋ค. ๊ทธ๋ํฝ์ค ์๊ฐํ๊ณ ๋ค์ด์ค์ จ๋ค๋ฉด ๋ค๋ก๊ฐ๊ธฐ ๋๋ฅด์๋ฉด ๋ฉ๋๋ค.
๊ธฐ๋ณธ ๊ฐ๋
๋นํธ๋งต์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ๋ฑ์ฑ ๊ธฐ์ ์ ํ ํํ์ ๋๋ค. ํน์ ์นผ๋ผ์ ๊ฐ์ ๋นํธ ๋ฐฐ์ด์ด๋ ๋ฒกํฐ์ ํ ์์๋ ํํ๋ก ํํํ์ฌ, ๊ฐ ๋นํธ๊ฐ ํด๋น ์นผ๋ผ์ ํน์ ๊ฐ์ด ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ ๋๋ค. ๊ทธ๋์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํํ๋ ๊ฐ row์ ๋ํด ๋นํธ ์ธ๋ฑ์ค๋ฅผ ํ ๋นํ๊ณ ์กด์ฌ ์ฌ๋ถ๋ฅผ 0๊ณผ 1๋ก ํํํ๋ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฑ๋ณ ์นผ๋ผ์ด ์๋ ํ ์ด๋ธ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค. ์ด ํ ์ด๋ธ์ 5๊ฐ์ row๊ฐ ์๊ณ , ์ฑ๋ณ ์นผ๋ผ์ ๊ฐ์ด ๋ค์๊ณผ ๊ฐ๋ค๊ณ ํฉ์๋ค:
- ๋จ์ฑ
- ์ฌ์ฑ
- ๋จ์ฑ
- ์ฌ์ฑ
- ๊ธฐํ
์ด ๊ฒฝ์ฐ, ์ฑ๋ณ ์นผ๋ผ์ ๋ํ ๋นํธ๋งต ์ธ๋ฑ์ค๋ ๋ค์๊ณผ ๊ฐ์ด ํํ๋ ์ ์์ต๋๋ค:
- ๋จ์ฑ: 10100
- ์ฌ์ฑ: 01010
- ๊ธฐํ: 00001
๊ทธ๋์ ์ง์ง ์ด๋๋ค๊ฐ ์ฐ๋๋ฉด
๊ทธ๋์ ๋จ์ํ ์ ๊ฑธ ๋ํ๋ด๊ธฐ ์ํ ๊ฒ์ด ์๋๋ผ๊ณ ๋ค๋ค ์๊ฐํ ๊ฒ์ ๋๋ค. ๋นํธ๋งต ์ธ๋ฑ์ค๋ฅผ ์ ๋๋ก ์ฌ์ฉํด๋ณด๊ธฐ ์ํด ๋ค์ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํด๋ด ์๋ค.
1CREATE TABLE IF NOT EXISTS Users (
2 id INT PRIMARY KEY,
3 name VARCHAR(100),
4 active BOOLEAN,
5 sex BOOLEAN,
6 age INT
7);
์ด ํ ์ด๋ธ์ 1,000,000๊ฐ์ row๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ค๊ณ ํฉ์๋ค.
1SELECT * FROM Users WHERE active = TRUE AND SEX = TRUE;
์ด ์ฟผ๋ฆฌ๋ active์ sex ์นผ๋ผ์ด ๋ชจ๋ TRUE์ธ row๋ฅผ ์ฐพ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ ์นผ๋ผ์ด TRUE์ธ ์กฐ๊ฑด์ ์ฑ๋ฆฝํ๋ row๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ผ๋ก bit and ์ฐ์ฐ์ ํ์ฉํ ์ ์์ ๊ฒ์ ๋๋ค.
- active ์นผ๋ผ์ ๋ํ ๋นํธ๋งต ์ธ๋ฑ์ค๊ฐ
1100110011...
(1,000,000๊ฐ ๋นํธ ๋ฐฐ์ด)์ด ๋ฏธ๋ฆฌ ์ธ๋ฑ์ฑ ๋์ด ์๊ณ , - sex ์นผ๋ผ์ ๋ํ ๋นํธ๋งต ์ธ๋ฑ์ค๊ฐ
1010101010...
(1,000,000๊ฐ ๋นํธ ๋ฐฐ์ด)์ด ๋ฏธ๋ฆฌ ์ธ๋ฑ์ฑ ๋์ด ์๋ค๊ณ ํฉ์๋ค.
๊ทธ๋ฌ๋ฉด ๋ ๋นํธ๋งต ์ธ๋ฑ์ค์ ๋ํด bit and ์ฐ์ฐ์ ์ํํ์ฌ, ๋ ์นผ๋ผ์ด ๋ชจ๋ TRUE์ธ row๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์์ต๋๋ค. ๋จ์ ๋นํธ ์ฐ์ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ธ๋ฑ์ค ์ค์บ๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ฒ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ ๊ฒ์ ๋๋ค.
ํธ๋ ์ด๋ ์คํ
๋นํธ๋งต ์ธ๋ฑ์ค๋ ๋งค์ฐ ํจ์จ์ ์ผ ์ ์์ง๋ง, ๋ช ๊ฐ์ง ํธ๋ ์ด๋ ์คํ๊ฐ ์์ต๋๋ค. ๋ค๋ฅธ ๋จ์ ์ด ๋ง์ง๋ง ์ง๊ธ์ ํ๋๋ง ์ง๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
๋ฐ๋ก ๋นํธ๋งต ์ธ๋ฑ์ค๋ ๋ฎ์ ์นด๋๋๋ฆฌํฐ(์ฆ, ์นผ๋ผ์ ๊ฐ๋ฅํ ๊ฐ์ ์๊ฐ ์ ์ ๊ฒฝ์ฐ)์ ๋ ์ ํฉํฉ๋๋ค. ๋์ ์นด๋๋๋ฆฌํฐ์ ์นผ๋ผ์ ๋นํธ๋งต ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋นํธ๋งต์ด ๋งค์ฐ ์ปค์ง ์ ์์ต๋๋ค.
๋์ ์นด๋๋๋ฆฌํฐ์ ์นผ๋ผ์ ๋นํธ๋งต ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด, ๊ฐ ๊ณ ์ ๊ฐ์ ๋ํด ๋ณ๋์ ๋นํธ๋งต์ ์์ฑํด์ผ ํ๋ฏ๋ก, ์ ์ฅ ๊ณต๊ฐ์ด ๋ง์ด ํ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ง์ฝ ์นผ๋ผ์ 1,000,000๊ฐ์ ๊ณ ์ ๊ฐ์ด ์๋ค๋ฉด, 1,000,000๊ฐ์ ๋นํธ๋งต์ ์์ฑํด์ผ ํ๋ฏ๋ก, ์ด๋ ๋งค์ฐ ๋นํจ์จ์ ์ผ ์ ์์ต๋๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋
๋์ ์นด๋๋๋ฆฌํฐ์์ ์ค๋ ๋นํธ๋งต์ ๋์ฒดํ์ฌ Roaring Bitmap์ด๋ผ๋ ๊ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. Roaring Bitmap์ ์ฌ๋ฌ๊ฐ์ง ํน์ฑ์ด ์์ง๋ง, ๊ฐ์ฅ ํฐ ๊ธฐ๋ฐ ์ฒ ํ๊ณผ ํน์ฑ์ ๋ฐ์ดํฐ์ ๋ฐ๋์ ๋ฐ๋ผ ๊ฐ์ฅ ์ ํฉํ ์ ์ฅ ๋ฐฉ์์ ๋์ ์ผ๋ก ์ ํํ์ฌ ์์ถ๋ฅ ๊ณผ ์ฐ์ฐ ์๋ ๋ชจ๋ ๊ทน๋ํํ๋ ๊ฒ
์
๋๋ค.
Roaring Bitmap์ ๊ธฐ๋ณธ ๊ฐ๋
2๋จ๊ณ ์ธ๋ฑ์ฑ
Roaring Bitmap์ ์ ์ ํ๋๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ๋จผ์ ๋ค์ 2๋จ๊ณ๋ฅผ ๊ฑฐ์นฉ๋๋ค. ๋ง์ด 2๋จ๊ณ ์ธ๋ฑ์ฑ์ด์ง, ๊ทธ๋ฅ 2์ฐจ์ ๋ฐฐ์ด์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
- ์์ 16๋นํธ ์ถ์ถ: ์ ์์ ์์ 16๋นํธ๋ฅผ ์ถ์ถํ์ฌ, ์ด๋ฅผ ์ธ๋ฑ์ค๋ก ์ฌ์ฉํฉ๋๋ค. ์ด 65536๋งํผ์ ๊ธธ์ด๋ฅผ ๊ฐ์ง 2์ฐจ์ ๋ฐฐ์ด ์ค ๋ฐ๊นฅ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๊ฐ ๋๋ ๊ฒ์ ๋๋ค. ์ด ๋ฐฐ์ด์ ํ์ ํ ์ปจํ ์ด๋์ ์ฃผ์๋ฅผ ์ ์ฅํฉ๋๋ค.
- ํ์ 16๋นํธ ์ถ์ถ: ์ ์์ ํ์ 16๋นํธ๋ฅผ ์ถ์ถํ์ฌ, ์ด๋ฅผ ์ปจํ ์ด๋ ๋ด์์์ ์์น๋ก ์ฌ์ฉํฉ๋๋ค.
์ปจํ ์ด๋
์ด ์ปจํ ์ด๋๋ ๋ฐฉ๊ธ ๋น์ ํ๋ ๋๋ก 2์ฐจ์ ๋ฐฐ์ด ์ค ์์ชฝ ๋ฐฐ์ด์ ํด๋นํฉ๋๋ค. ํ์ง๋ง ์์ 16๋นํธ์ ๊ทธ๊ฒ๊ณผ๋ ๋ค๋ฅด๊ฒ, ์ด ์ปจํ ์ด๋๋ ๋ด๋ถ ๋ฐ์ดํฐ๊ฐ ์ผ๋ง๋ ์๋์ ๋ฐ๋ผ ๋ด๋ถ ๊ตฌ์กฐ๊ฐ ๋ฌ๋ผ์ง๋๋ค. Roaring Bitmap์ ๋ค์ 3๊ฐ์ง ์ปจํ ์ด๋๋ฅผ ์ง์ํฉ๋๋ค.
- Array Container: ์ด ์ปจํ ์ด๋๋ ๋ด๋ถ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก, 4096๊ฐ ์ดํ์ ์์๋ฅผ ์ ์ฅํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ์ปจํ ์ด๋๋ ๋จ์ํ ์ ๋ ฌ๋ ์ ์ ๋ฐฐ์ด๋ก ๊ตฌํ๋์ด ์์ต๋๋ค. ์ด์ง ํ์ ํ์ฌ ์์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
- Bitmap Container: ์ด ์ปจํ ์ด๋๋ ๋ด๋ถ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ๋ง์ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก, 4096๊ฐ ์ด๊ณผ์ ์์๋ฅผ ์ ์ฅํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ์ปจํ ์ด๋๋ 65536๋นํธ(8192๋ฐ์ดํธ)์ ๋นํธ๋งต์ผ๋ก ๊ตฌํ๋์ด ์์ต๋๋ค. ๊ฐ ๋นํธ๋ ํด๋น ์์น์ ์ ์๊ฐ ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ ๋๋ค.
- Run Container: ์ด ์ปจํ ์ด๋๋ ์ฐ์๋ ์ ์ ๋ฒ์๋ฅผ ์ ์ฅํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, 1, 2, 3, 4, 5์ ๊ฐ์ ์ฐ์๋ ์ ์๋ค์ ์ ์ฅํ ๋ ํจ์จ์ ์ ๋๋ค. ์ด ์ปจํ ์ด๋๋ (์์ ๊ฐ, ๊ธธ์ด) ์์ ๋ฆฌ์คํธ๋ก ๊ตฌํ๋์ด ์์ต๋๋ค. ๋ง์ฝ ๋ค ์์ผ๋ฉด? ๊ทธ๋ฅ ์ฒ์๋ถํฐ ๋๊น์ง ๋ค ์๋ค๋ ๋ป์ด๋, (0, 65536) ํ๋๋ง ์ ์ฅํ๋ฉด ๋ฉ๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ Roaring Bitmap์ด ๋งค์ฐ ํจ์จ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ , ๋ค์ํ ๋ฐ์ดํฐ ๋ฐ๋์ ๋ํด ์ต์ ์ ์ฑ๋ฅ์ ์ ๊ณตํ ์ ์๊ฒ ํฉ๋๋ค.
Roaring Bitmap์ ๊ธฐ๋ฅ
๊ธฐ๋ณธ ๊ธฐ๋ฅ
Roaring Bitmap์ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ์ฝ์ : ์๋ก์ด ์ ์๋ฅผ ๋นํธ๋งต์ ์ถ๊ฐํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์ ์ ํ ์ปจํ ์ด๋๋ฅผ ์ ํํ๊ฑฐ๋, ํ์์ ๋ฐ๋ผ ์ปจํ ์ด๋๋ฅผ ๋ณํํ ์ ์์ต๋๋ค.
- ์ญ์ : ๊ธฐ์กด ์ ์๋ฅผ ๋นํธ๋งต์์ ์ ๊ฑฐํฉ๋๋ค. ์ด ๊ณผ์ ์์๋ ์ปจํ ์ด๋์ ์ํ์ ๋ฐ๋ผ ์ ์ ํ ์ฒ๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ง๋๋ค.
- ๊ฒ์: ํน์ ์ ์๊ฐ ๋นํธ๋งต์ ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค. ์ด ๊ณผ์ ์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ํ๋ฉ๋๋ค.
์งํฉ ์ฐ์ฐ
Roaring Bitmap์ ๋ํ ๋ค์๊ณผ ๊ฐ์ ์งํฉ ์ฐ์ฐ์ ์ง์ํฉ๋๋ค.
- ํฉ์งํฉ (Union): ๋ ๋นํธ๋งต์ ๋ชจ๋ ์์๋ฅผ ํฌํจํ๋ ์๋ก์ด ๋นํธ๋งต์ ์์ฑํฉ๋๋ค.
- ๊ต์งํฉ (Intersection): ๋ ๋นํธ๋งต์ ๋ชจ๋ ์กด์ฌํ๋ ์์๋ง์ ํฌํจํ๋ ์๋ก์ด ๋นํธ๋งต์ ์์ฑํฉ๋๋ค.
- ๋์นญ ์ฐจ์งํฉ (Symmetric Difference): ๋ ๋นํธ๋งต ์ค ํ๋์๋ง ์กด์ฌํ๋ ์์๋ฅผ ํฌํจํ๋ ์๋ก์ด ๋นํธ๋งต์ ์์ฑํฉ๋๋ค.
์ด๋ฌํ ์ฐ์ฐ๋ค์ ๋นํธ๋งต์ ์ปจํ ์ด๋ ์ ํ์ ๋ฐ๋ผ ์ต์ ํ๋์ด ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ํ๋ฉ๋๋ค.
Go ์ธ์ด์์
Go ์ธ์ด์์๋ github.com/RoaringBitmap/roaring
ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ Roaring Bitmap์ ์ฝ๊ฒ ํ์ฉํ ์ ์์ต๋๋ค. ์ด ํจํค์ง๋ Roaring Bitmap์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, Go ์ธ์ด์ ํน์ฑ์ ๋ง๊ฒ ์ต์ ํ๋์ด ์์ต๋๋ค.
์ค์น
1go get github.com/RoaringBitmap/roaring/v2
์ฌ์ฉ ์์
1package main
2
3import (
4 "log"
5
6 "github.com/RoaringBitmap/roaring/v2"
7)
8
9func main() {
10 b1 := roaring.BitmapOf(1, 2, 3, 4) // Inizializza con 1, 2, 3, 4
11 b2 := roaring.BitmapOf(2, 4, 6, 8, 12) // Inizializza con 2, 4, 6, 8, 12
12
13 b1.Add(5) // Aggiunge 5
14 b2.Add(10) // Aggiunge 10
15
16 b2.Remove(12) // Rimuove 12
17
18 and := roaring.FastAnd(b1, b2)
19 or := roaring.FastOr(b1, b2)
20
21 // Le operazioni sul bitmap modificano l'originale, quindi usa una copia
22 xor := b1.Clone()
23 xor.Xor(b2)
24
25 log.Printf("and result: %v", and.ToArray())
26 log.Printf("or result: %v", or.ToArray())
27 log.Printf("xor result: %v", xor.ToArray())
28}
12025/09/08 22:16:27 and result: [2 4]
22025/09/08 22:16:27 or result: [1 2 3 4 5 6 8 10]
32025/09/08 22:16:27 xor result: [1 3 5 6 8 10]
์ ์์ ์ฝ๋์์ ๋์ค์ง ์์ ์ฃผ์ ๊ธฐ๋ฅ๋ค๋ก
Contains(x uint32) bool
: ํน์ ๊ฐ์ด ๋นํธ๋งต์ ์กด์ฌํ๋์ง ํ์ธGetCardinality() uint64
: ๋นํธ๋งต์ ํฌํจ๋ ์์์ ๊ฐ์ ๋ฐํRank(x uint32) uint64
: ํน์ ๊ฐ ์ดํ์ ์์ ๊ฐ์ ๋ฐํToBytes() ([]byte, error)
: ๋นํธ๋งต์ ๋ฐ์ดํธ ์ฌ๋ผ์ด์ค๋ก ์ง๋ ฌํFromBytes(data []byte) error
: ๋ฐ์ดํธ ์ฌ๋ผ์ด์ค์์ ๋นํธ ๋งต ๋ณต์Clone() *Bitmap
: ๋นํธ๋งต์ ๋ณต์ ๋ณธ ์์ฑClear()
: ๋นํธ๋งต ์ด๊ธฐํNextValue(x uint32) int64
: x๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๋ค์ ์์ ๋ฐํPreviousValue(x uint32) int64
: x๋ณด๋ค ์๊ฑฐ๋Maximum() uint32
: ๋นํธ๋งต์์ ๊ฐ์ฅ ํฐ ์์ ๋ฐํMinimum() uint32
: ๋นํธ๋งต์์ ๊ฐ์ฅ ์์ ์์ ๋ฐํ
์ด๋ฐ ๊ธฐ๋ฅ๋ค์ด ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ธ์.
์ฐธ๊ณ ๋ก roaring ํจํค์ง๋ ๋ด๋ถ์ uint32 ๋ฟ๋ง ์๋๋ผ uint64๋ฅผ ์ง์ํ๋ ํจํค์ง๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค. ๊ฑฐ์ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํจ์ผ๋ก ๋ฐ๋ก ๊ต์ฒดํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
1package main
2
3import (
4 "log"
5
6 "github.com/RoaringBitmap/roaring/v2/roaring64"
7)
8
9func main() {
10 b1 := roaring64.BitmapOf(1, 2, 3, 4) // Inizializza con 1, 2, 3, 4
11 b2 := roaring64.BitmapOf(2, 4, 6, 8, 12) // Inizializza con 2, 4, 6, 8, 12
12
13 b1.Add(5) // Aggiunge 5
14 b2.Add(10) // Aggiunge 10
15
16 b2.Remove(12) // Rimuove 12
17
18 and := roaring64.FastAnd(b1, b2)
19 or := roaring64.FastOr(b1, b2)
20
21 // Le operazioni sul bitmap modificano l'originale, quindi usa una copia
22 xor := b1.Clone()
23 xor.Xor(b2)
24
25 log.Printf("and result: %v", and.ToArray())
26 log.Printf("or result: %v", or.ToArray())
27 log.Printf("xor result: %v", xor.ToArray())
28}
๋ง์น๋ฉฐ
Roaring Bitmap์ ๋์ ์นด๋๋๋ฆฌํฐ์ ์ ์ ์งํฉ์ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ณ ์กฐ์ํ ์ ์๋ ๊ฐ๋ ฅํ ๋๊ตฌ์
๋๋ค. Go ์ธ์ด์์ github.com/RoaringBitmap/roaring
ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ฉด, Roaring Bitmap์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ํ์ฉํ ์ ์์ต๋๋ค. ์ด ํจํค์ง๋ ๋ค์ํ ์ปจํ
์ด๋ ์ ํ๊ณผ ์ต์ ํ๋ ์ฐ์ฐ์ ํตํด, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ์ฑ๋ฅ์ ๊ทน๋ํํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ฑ, ๋ก๊ทธ ๋ถ์, ํต๊ณ ๊ณ์ฐ ๋ฑ ๋ค์ํ ๋ถ์ผ์์ Roaring Bitmap์ ํ์ฉํ์ฌ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
Roaring Bitmap์ ํนํ ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์์ ๋์ ์ฑ๋ฅ์ ๋ฐํํ๋ฉฐ, diverse applicazioni เคฎเฅเค เคเคชเคฏเฅเคเฅ เคนเฅ เคธเคเคคเคพ เคนเฅเฅค Go ์ธ์ด์ ๊ฐ๊ฒฐํ๊ณ ํจ์จ์ ์ธ ๋ฌธ๋ฒ๊ณผ ๊ฒฐํฉํ์ฌ, Roaring Bitmap์ ๊ฐ๋ฐ์๋ค์๊ฒ ๊ฐ๋ ฅํ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์์ผ๋ก๋ Roaring Bitmap์ ๋ฐ์ ๊ณผ ํจ๊ป, ๋ ๋ง์ ๊ธฐ๋ฅ๊ณผ ์ต์ ํ๊ฐ ์ด๋ฃจ์ด์ง ๊ฒ์ผ๋ก ๊ธฐ๋๋ฉ๋๋ค.
์ ์ด๊ฑธ ์ ํ๋๊ตฌ์? ์๊ณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ ํ๊ทธ ๋ณ ์ธ๋ฑ์ฑ๊ณผ ๋น ๋ฅธ ํฉ์งํฉ ์ฐ์ฐ์ ์ํด์์.