ααΆαααααΆα
αααα»αααΆαααααααααΆαααΆααααααααΆααΆααΆα’ααααααααα
αααα»αααααα·ααΈα GopherCon Russia 2019 αα
ααΈαααα»αααΌααααΌ αα·αααΆααΆααΆαα»ααααΈαα
α―αα·α
αα
ααααα»ααα½ααα
Nizhny Novgorod α ααΎααααα»ααα·ααΆαα’αααΈααααααααααααααΈ - ααααααΆαα·α
ααΆα B-tree ααα»αααααα·ααα½αα±ααα
αΆααα’αΆαααααααα·α
ααΆααααααα ααΆαα
ααααααα
ααΎαααΉααα·αα·αααααΎαααΆααΎαα·αα·αααααααααΈααααΎαααΆααααααααααΆ αα ααααααααΆαααααΎαααΆα αα ααααααααΆα’αΆαααααααΆαααααααααααααααααα α αΎααααα»αααααΈααΆαααααΆααΏαααΆααα½αααΆααααΆααα ααΌαααΎα DBMSs ααααααα·αααα½αααΆαααααΆααα·αα·αααααααααΈαααΈααα½α α αΎαα αααααααΆααΆααααααααααααΎααα αααα»α Go α α αΎα "αααααΆαααααα’αα" ααΎαααΉαααααΎαααααΆααααααααααααα½α ααΆααααα ααΎααααΈαααααΎαααΌαααααΆααα·ααααααα―ααααααΏααα ααααααΆαααααα½αααααααΎαα
αααα»ααα·αααΆαααααΉαααΆααααΆαααααααααα»αααΉαααΆααααααααα αα·ααα½αα±ααα
αΆααα’αΆαααααααααααΆααα’αααα αα
!
ααα ααααΈααααΆα
αα½ααααΈβα’αααβααΆααα’ααααααΆ! ααααααααΆααα½αααααΆα α αΎαααΎαααΆααα’ααααααΆααΏαα ααααΆααα αααααααΆααααα’ααΎααααΈαα·ααΆαα’αααΈααααΉααααΈαααααααααααΌαααααΆααα·αααααααα½αα±αααα»αααααα? αα»αααΆαααα αααα»αααΉαααΆαααΌααααααααΈαααΈαα½ααα ααΈααα αα·αααΈαααα π
ααΏααααααααααΆααα’αααααα
ααΈααα αααΆαααΆαααααΊαααααααααααααααΆα α αΎαααΎααα·αααΆααααα
αααΎαααα ααΌα
ααααααΌαα
αΆααααααΎαα
ααααααααααα»αααΉααα·ααΆαα’αααΈααΏαααΌα
ααΆααααααα
- ααΎα’αααΈαα ααΆααααααααα;
- α’αααΈβαα βααΆβαααααααααβαααααΈ;
- αααααααααααΆααααΌαααΆαααααααΎ αα·ααααααααααααΆαα·αααααΌαααΆαααααΎ αα·αα ααα»α’αααΈ;
- ααΆαα’αα»ααααααΆαααααα αααα»α Go αα·αααΆαααααΌαα·α αα½α ααΆαα½αα’αααα ααααα;
- ααΆαααααα·α ααΆαααααα·α ααα»ααααααΆαα’αα»ααααααααααααααα·αααΆαα αααΎααα αααα»α Go assembler;
- "αααα αΆ" ααααααααααααααααΈαααΈα;
- ααΆαα’αα»αααααααααΆαααααΆααα
ααΌα ααααααΎαααααααααααΊααΆα’αααΈ?
αααααααααααΊααΆαα
ααΆαααααααααα·ααααααααΆα
ααααα‘αααααααΎααααααΆ αα·αααααΎαα
αα
α»ααααααααΆαααααααααΎαα·ααααααα
ααααα ααΆααααΌαααΆαααααΎααΎααααΈαααααΎαααααΏαααΆααααααααα αααααααΆααα·αα·αααα ααΆααααααααααΉααααααΌαα±ααααααααΆαααα·ααααααααΆαααααα»α (ααααΎαααΆαα α
ααΆααΆαααααααααααα) α αΎαααααΎαααΆααααααΆαααΆααααα»αααααΆααααααα½ααααααααΆαααΈααα’αααα ααα»ααααααΌαααααΆααα·ααααααααΆααααααΆαααα»ααα·αααααααααΆαα
αααΎα α αΎαααΆααααα»αααααΆαααΈααα’αααααΊααΊααααα ααΆαα§ααααααα· ααΎαααΉαααα½αααΆαααααΆααΈα α¬ααααα½αα
αααααΊααΆαααααΆααααααααα»αααααααΆα αααααααα ααα subtleties αα·αααΆααααααΌα ααα»αααααααααΆααααΈαααααΉαααΎαααΆααα·αααααα αα·αααΆαααααΆαααααΆαααΆα αααΎαααααααααααααααΌαααααΆααα·αααααα αααα»αααΆαααααααααα»αααΆααα·ααΆαααΆααΆααα·ααΈααΆαααααααααΎααααΆαααααΆαααΌααααΌααΆααα½αα ααα½αααΎααααΈαααααΎααα·αα·ααααααΌαααααΆααα·ααααααα
αα·ααΈααΆαααααααααΌαααΊααΆαααααααααα αααααααααΆαααΆααΆαα»αααα ααααααα
ααααα αααααααααα
ααΆαααααααΌα
αα
ααΆααααααΆααΎαααααΎαααααααααααααΎααααααααΎαααΎααααααα α§ααΆα ααααα½αα’αΆα ααΆαααα’αααααααααααΆαααα αααα»αααΌααααα’ααααααααΆααααα’ααααΌα ααααααααΆααααααααα αααα ααΆαααααΆαααααααααααααΆα ααααα·αααΎα’αααααααΌαααΆααααααΆαα α’ααααααα ααααΆααααααααα½αααΆαα αααα»ααααα’ααααααα·ααΆαααΆ "αααααΆαα" ααΆααΆααα½αααααα·ααΆαααΆ "ααΌααΈ" ααααα?
αα·ααΈααΆαααααααΈααΈαααΊααααΎαααΎαααΆαα»αααα
ααααΆαααααΆααα¬αααα»αααααΆαα»α ααΎαβααααΎβααΆβαααα»αβαααααΈβαααααΆ α¬βαααααααααβαααα
αααΆαα ααΆαααααΎααααΆαααααααΈ hash ααΊααααααααααΆαα
ααΉαα§ααΆα ααααα»α ααα»αααααααα½αα±αααααα’αααα½α α’αααααΆααααα’ααααΌα
αααααΆαα»α
α»αααααααα
αααα»αααΌααααα’αααα
αα·ααΈααΆαααααααΈααΈααΊααΎααααΈαα»αααααΆαααααααΌαααΆααααααΆααααΆααααααααα ααΎαααααΎααΆαααααααΎααααα Bloom α¬ααααα cuckoo α α’αααααΈαα½ααααααα
ααααΎαααααΆαα ααααα½αααααααααα’αααααΈααΆααααααααα
αα·ααΈααΆαααααα
α»ααααααααΊααααΎααααΆααααΆαααααααααααααααααααΉαααααΎααααααα±ααααΎαα αααβααΆβα’αααΈβαααβααΎαβααααΎβαααα»αβαα·αα·ααααβαααααΈβαααΈαα ααΆα/α
αΆα αααααααΎαα½αααΆ αα½αααΆαααΎαααααΌαααααααΆαααα·αα·ααααααΆααααΌα ααα»ααααααΎαααααΎααΆαααΆαααΆαααααα·αααααΆααααααα
ααΌα ααααααα»αααΆααα·ααΆα αααααΆααααααα·αα·ααααααΌαααααΆααα·ααααααααΊααααα αα·ααααααααα αααααΆααααααααααα½αα αααααΆααααααΆ αααααααααΎαα’αΆα ααααΎαα·ααΈααΆαααααααΆα αααΎααααα»αααααααα½αα ααααα·αααΎααΎαααααΌαααΆααααααΎαααααΏαααΆααααααααααΆααααα αααΎα α¬ααααα·αααΎααΎαααααΌαααΆααααααααααααααααααααααααΆαααααααααααα’αΆα ααααΎααΆαα
ααααααααααα»αααΉααα·ααΆαα’αααΈαα·ααΈααΆααααααααααααααΆαααα·α αααα»αααααΆααααα - ααααααααααααααΈαααΈαα
ααΎβαααα»αβααΆβααααΆβααΎααααΈβαα·ααΆαβααΎβαααααΆαααβααα?
αααα»αααααΎααΆαααΆα’αααααΉαααΆααααα»ααα
Badoo (αααα ααααΆα’αααααααΆααααα·αααααααααααααααααΎα Bumble)α ααΎαααΆαα’αααααααΎααααΆααα
αααΎαααΆα 400 ααΆαααΆαααα
αα»ααα·ααα·ααααα αα·ααα»αααΆαααΆα
αααΎααααααααΎαααΎαααΆαααααΌααααααααα’αααα»ααααααΆαααα½αααα ααΎαααααΎααΌα
ααααααααααΎααααΆααααααααΆαααααα½α αα½αααΆααααααααααααααααΈαααΈαα
ααΌα ααααααΎααααααααααααααΈαααΈαααΊααΆα’αααΈ?
Bitmap indexes ααΌα
ααααααααααΆααααα αΆα ααααΎ bitmap α¬ bitsets ααΎααααΈα’αα»αααααα·αα·αααααααααααα ααΆααα·αααααΆαααααααααααααααΈ αα·αα·αααααααααΆαααΌαααΆααα½α α¬α
αααΎααααααααΆαα±ααα’αααααΆαααΆαα½α (ααΌα
ααΆααα»ααα) αα·ααααααααααααααα· α¬αααΆαααΆααααααααααααΆ (α’αΆαα» ααααααααααα) αα·ααααα½ααααααααΆααααααααΎααααα·ααααα·ααΆααααΈα (AND, OR, NOT ) ααΎααααΈααααΎααααα½ααααααααα
ααΎαααααΌαααΆαααααααΆααααΆ ααααααααααααααΈαααΈαααΊαααααα»α αα·αααΆαααααα·αααααΆααααα»ααααααΆααααααΈαααααΆαααΆααααααααααααα½ααααα
αΌαααααΆααΌααααα½ααα
ααΌααΆαααα½ααααααααΆαααΆα
αααΎα (αα·αααΆ "αααααααα" α¬ "ααααΆαααΆαα’αΆααΆα ααα·ααΆα α" αααααΉαα’αααΈαα½αααΌα
ααΆ "α
ααααΆαααΈαααααΆαααΈαααα»α")α ααα»ααααβαααα»αβααΉαβαααα αΆαβαααβαααααβααΆβαα½αβααΆβααααΎαααΆαβααα’βαααααΆααβαα½αβαα cardinality αααααβααβαααα
ααΌααααα‘ααααΎαα§ααΆα αααααΆαααααααα»αααααααααααααααααΈαααΈαα
αααααααΆααΎαααΆααααααΈαααααΈαααααΆααα
ααΈαααα»ααααΌααααΌαααααΆααααααααααααααα·αααααΈαααΌα
ααα:
- αα αα·αααααααΎααααααααΈ;
- ααΆαααααααα αααααααα―ααα;
- ααΆα veranda (ααΆαααΆαααααΎα);
- α’αααα’αΆα ααααα» (ααα½αααααΆαααααα»α);
- αααααααααααΆααα’ααααα½α (vegan friendly);
- αααα (αααα) α
α
αΌααααααα±αααααααΈαααααΆαααΈαα½ααααΌααααααααΆαααααα
αΆααααααΎαααΈ 0 α αΎααααα
ααα’αααα
αα
αΆααααααΆαα 6 bitmap (αα½ααααααΆααααααααααΈαα½αα)α αααααΆααβαα ααΎαβααΉαβαααα
αΌαβαααααΈβαααΈαβααΆααααα α’αΆαααααβααΎβααΆααΎβαααααΈαααααΆαβααΆαβαααααααααααααα·βαααβα¬βα’ααα ααααα·αααΎαααααΈαααααΆα 4 ααΆα veranda αααααα 4 αα
αααα»ααααααΈ "ααΆα veranda" ααΉαααααΌαααΆαααααααα
1 (ααααα·αααΎαα·αααΆα veranda αααααΆαααααα
0) α
α₯α‘αΌααααααΎαααΆααα·αα·ααααααΌαααΆαααΆαααααααα»ααααα’αΆα
ααααΎαα
ααΆα α αΎαααΎαα’αΆα
ααααΎααΆααΎααααΈααααΎααααα½αααΌα
ααΆα
- βαααα αΆααααα»αααΌααααααΈαααααΆαααααααααα·αααααααΆαααα½αβ;
- "αααα αΆααααα»αααΌααααααΈαααααΆααααααΆααααααααααΆαα½α veranda αααα’αααα’αΆα ααααα»ααΆαα"
αααΆααααα
? αααααΎαα ααααΎααααΌαααΊααΆααααααΆααα α’αααΈβαααβααΎαβααααΌαβααααΎβααΊβααβαααααΈ "α’αααβαα½αβααΆβαα·ααα" α αΎαβααααααααΆαβααΆβαα
βααΆβαααααΈβαααααΈαααααΆαβαααβαααΈαβααααΌαβααΆαβααΆααααααΆαα
ααααΎααΈααΈαααΊαααα»αααααΆαααααα·α
α ααΎαααααΌαααααΎ NOT bitmap αα
ααΎαααααΈ "αααα" ααΎααααΈααα½αααΆααααααΈαααααΈαααααΆααααααΆαααααααα αααααΆαααα αα·αααΆααΆαα½αααΉα "ααΎαααα»αα’αΆα
ααααα»ααΆα" αα·αααααααααΆαα½αααΉααααααΈ "ααΆα veranda" α αααααΈβαααΈαβααααααβααΉαβααΆαβαααααΈβααααΉαααααΆαβαααβαααααβααΆαβααααααβαα·αα·α
ααααβααααβααΎαβααΆααα’ααα αααα»αα§ααΆα αααααα αααααααΆααααααΆαααααΈαααααΆα Yunost ααα»αααααα
ααΆαααααΉααααΈααΆα
αααΎαααΆααααααα ααα»αααααα»αααΆαααα ααΎαααΉαααΎαααΌααααα»ααααααΆααααααα
ααΎααααααααααααααΈαααΈαααααΌαααΆαααααΎαα α―ααΆ?
ααααα·αααΎα’αααααααΎαα·αα·αααα Google bitmap ααα 90% ααα
ααααΎαααΉαααΆαααααα
ααΉα Oracle DB ααΆααααααααΆααα½αα¬ααααααααα ααα»αααα DBMSs αααααααααααα ααααΆααΆααααααΏααααααΆααααααααααααα? αα·αβααααΆααβααα
α
αΌαααΎαααααααΆαααααααΈααααααααααααΆαααα
MySQL αα·αβααΆααβααΆααααβαα·αα·ααααβαααααΈβαα ααα»ααααβααΆαβααααΎβααααΎβααααααβαααααΎαβααα (
PostgreSQL αα·αβααΆααααβαα·αα·ααααβαααααΈβαααΈαβαα ααα»ααααβααααΎβαααααΈβαααΈαβααΆαααα αα·αβααααα·ααααα·ααΆαβαααΈα ααΎααααΈβαααα αΌαβααααααβαααααααβααΆαβαα·αα·ααααβαααααβαααα
Tarantool ααΆααα·αα·αααα bitset αα·αααΆααααααΆααααααααααΆαααααα ααΎαα½αααΆα
Redis ααΆα bitfields ααΆαααα
MongoDB αα·αβααΆααβααΆααααβαα·αα·ααααβαααααΈβαααΈαβαα
βα‘αΎαβαα ααα»ααααβααβααΆαβααααΎβαααβααααΎβααΆβαααααΎαβαααβααααΌαβααΆαβαααααα
Elasticsearch ααααΎαααααΈαααΈααα
ααΆααααα»α
- ααα»ααααα’ααααα·αααΆαααααΈααΆααααα αΆααααα½ααα αααα»αααααααααααΎα: Pilosa α αααααΊααΆααΌαααααΆααα·ααααααααααΈααααα·αααΆααααααααΆαααααΆαααααααα αααα»α Go α ααΆβααΆαβααβαα·αα·ααααβαααααΈβαααΈαβααα»ααααα α αΎαβααα’ααβααΎβα’αααΈβαααααβαααΆαβαα βααΎβαα½αααΆα ααΎαααΉααα·ααΆαα’αααΈααΆααααα·α αααααααα
ααΆαα’αα»αααααα αααα»α Go
ααα»ααααβα ααα»α’αααΈβααΆαβααΆβαα·αα·ααααβαααααΈβαααΈαβααααβααααΎβαααααα? αα»αααΉαααααΎααααα½αααα αααα»αα
αααααα αΆαα’αααααΈααααα’αα»αααααα·αα·ααααααΌαααΆαααΆαααααααα»ααα
αααα»α Go α
αααααΈαααΈαααΊααααΆααααααΆααααααααα·ααααααααα»αααααα αα
αααα»α Go ααΌαααααΎαααΈαα
ααα·ααααααΆααααΆααααα
ααΎαβααΆαβαααααΈβαααΈαβαα½αβαααααΆααβααααααβαααααΈαααααΆαβαα½α α αΎαβαααΈαβααΈαα½ααβαααα»αβαααααΈβαααΈαβαααα αΆαβααΆβααΎβαααααΈαααααΆαβααΆααααΆααβααΆαβαααααααααααααα·βαααβα¬βα’ααα
ααΎαααΉαααααΌαααΆααα»αααΆααααα½αααΈαα αα½αααΉαααααΌαααΆαααααΎααΎααααΈαααααααΌαααΆααααααΈααααααΎαααΆαα½αααΉααα·ααααααα
αααααα α
ααααα ααα»ααααααΆαα½αααΉαααααΌααΆαααΈααΈααααΆααααΆααααααααααΈαααααΆαααΆααααααααααααααα·ααΈαα½ααα ααΆα§ααΆα ααα αααα»αααΏααΆααΆααααααΈαααααΆααα·α
αα½α
ααΆαααα
ααΈαααα»αααΌααααΌ αααα’ααααα·αα’αΆα
ααααα»ααΆα α αΎαααΆα αΆααααΌα
ααΆαααα»αααΆαααα αα 20% ααααααΉαααααΆαααΊαααααααααααΆααα’ααααα½αα
αα»αααΆαααΈααΈαααΉααααααααααΌαααΆααααααΈαα
ααΆαααααΈαααααΈαααααΆαα
ααΎααααΈααααΎααααα½α "αααα αΆααααα»αααΌααααααΈαααααΆααααααΆααααααααααααααΆαααΈααααΆ αα·αα’αΆα
ααααΎααΆαααααα»αααΆα" ααΎαααααΌαααΆαααααα·ααααα·ααΆααααΈαααΈαα αα·αααα αα·α AND α
ααΎαβα’αΆα βααααα½αβααΌαβααααβααΎαβααααα·α βαααβααααΎβααααα·ααααα·ααβαααβαααα»αααααΆαβααΆαβαααβα αΎαβαα·αβααααΎα
ααΎαααΆααα»αααΆααααααΆααααααα·ααααα·ααΆαααΈαα½ααα αα½αααααΆααααΈαααααααΆααα
ααα·αααααΆαα»αααααααΌαααααΆααΈααααΆαααα
αΌαααααΆααΆαα½αααααα·ααααα·ααΆαααααα·α
α αΎαααΆααααααααα
αΌααα
αααα»αα
ααα·αααααααα
α αΎαα₯α‘αΌαααα ααΎαα’αΆα
ααααΎαααααΈ αα·ααα»αααΆαααααααΎα ααΎααααΈααααΎααααα½ααααααααα
ααΆαα’αα»ααααααΊαα·ααααααααααα αααααΈααΆαα»αααΆαααΊααΆααααααΆαα α αΎαααΎααααααααααΆααααΆαα
αααΎααααααΆααα·ααααααααααα·αααΌαααααααααααΈααΆαααααααααα»αααΆαααααΌαααΆαα α
α
αααααΆααααΈααααΎ profileing ααααα·α
ααΆαα½α pprof αααα»αααΆαααααααααΆααααΎαααΆ Go compiler ααΆααααΆααααααΎαααααα·αααααΆαααααΆαααα ααα»ααααααααΆααααααΆααααΆααα αα»αααΆα inlining α
ααΆααα·αααΊααΆαααααα·ααΈα
ααααα Go ααΆαααΆααααααααΆα
αααΆαααααΆααα
ααααααααα·ααα»ααααααααααΆααααααα α αΎαααα·ααααααΆαααΆα
αα’α ααααΆαα
αααααα»αααΆααααα»ααα½ααααααΆαααααα·ααα»αααααααα
ααα»ααααβαααα»αβαα·αβααααΆα
βαα α αΎαβαααα»αβα’αΆα
βαααβα’αααβα
αααααβααΆαβαααβααΆαβααααΎ goto αααα½αβα±ααβααΆαβααααα·ααα»αβααΌα
βαααα»αβααααβααα’βα
α αΎαααΌα
αααα’αααααΆαααΎα α₯α‘αΌααααα’αααα
αααααααΉαααααααα»αααΆαααααααΎααααααΈαααΆα! ααΆαααααα ααΎααααααααΆααααα αα 2 ααΈααααΌαα·ααΆααΈα αα·αα’αΆαααααβαα!
ααΆαααααααΈααΈαααΊααΆααααα½ααααα»αααΆαααΎαααΆααΎα’αααααΎααααΆααα·ααααααΌαααααααααααΆαααα‘αΎαα α’αααα
αααααααΆαααααααααΆααα·αα·αααααΎαααααααααααααααΆαααααΆααα
ααΆααααα»αααααα·ααα»ααααα
αααα»αααααααΎαα ααΆααα·αααΊααΆ Go ααΊααΆααΆααΆαααααΆααα»ααααα·ααΆα α’αααα
αααααααααΆα
ααΆα’αααα’αααΆαααΈαααααααα»α (ααΈααααα) ααΆαααα ααα»ααααααΆα αααααΆααααΈααΆαααΆααα’αα, αααααΆααααααΉαααΆαααααααΆαααααΉααααΈααααΆαααΎαα‘αΎαααα’αααΈαααααα α
ααΆ buffer overflow α
ααΌαααΆααΆαααα’αααα
αααααα‘αΎααα·αααααααα αΆαααΆααΆα
ααα·αααΆααα’ααααΆαααα αααΌα
ααααΆα ααΎαα’αΆα
ααααΎααΌα
αααααΆααααααααααααΆααααα½ααα·αα·αααααΆαααααα½ααα
ααΎααα»αααΆαααααααΎαα
αααααΎαααΌα
ααα α’αααα
αααααααΈαααΆαααΉαααααααΆααααα½ααα·αα·ααα α αΎαααΎααααααααΆα 500 ααΆααΌαα·ααΆααΈαααα
α ααααααΆααα
ααΆααΆααααααΎαααΆαα ααΎαααΆααααααααααααΆαα’αα»αααααα½αα ααα½αα ααααΈααΆαα’αα»ααααααααΆααααααααααΎα ααα»ααααααααααααααα·αααΆα’αΆαααααααΆαααααααΆααααα’αΆα ααααΎαα ααΆαααΆαα½ααααααααΉααα αα α»ααααααα
α’αααΈβαααβααΎαβααααΎβααΊβααααα·ααααα·ααΆαβαααΈαβααΌαααααΆα α αΎαβααααααααβααααΎαααΆαβααααβααΎαβααααΎαααΆαβααΆβαααΆαβααΆαβααααα·αααααΆαα ααα»ααααααΆα’αα»αα ααΎα "α α·ααα αΉα" ααααΎαααΆαααααααΎαααΆαα½αααΉααααααααΌα αααααΆαααΆαα αα»αααΆαααααααΎαααααΎααααα·ααααα·ααΆαααΎααΌαααααΆαααααααα ααΎαβα’αΆα βααααααβααΌαβααααβααΎαβαααΆαβααΆαβαααα½αβααΎααααΈβααααΎβααΆαβααΆαα½αβααααΆαα 8-byte αααβααααΎ UInt64 slices α
ααΌα
αααα’αααα’αΆα
ααΎαααΎα ααΆαααααΆααααααΌαααΌα
αα½ααααααΆααααααΎαααααΏααααααα·ααΈααααααΎαααααΆαααΈααααααααααΎαααα αααΆα
αα
ααα½αααααΆαααΈααα ααΆαααα½αααΆαα’αΆα
αα·ααΆαααΆαααΆααΆααΈααα’αααα
ααΆαα’αα»αααααα αααα»αα§αααααααα‘αΎα
ααα»ααααααααα·ααααααΆααΈαααα
ααααα α§αααααααααΎαααΆαααααααΎαα’αΆα
ααααΎααΆαααΆαα½αααααΆαα 16, 32 αα·αααΌααααΈαα 64 ααα ααααα·ααααα·ααΆα "ααΌααααΌααΆα" ααααααααααΌαααΆαααα α
ααΆ single instruction multiple data (SIMD; one instruction, many data) α αΎαααααΎαααΆαααααΆααααααααααΌαααΌα
ααααααΆααααΎααααα·ααααα·ααΆαααααααααααΌαααΆαααα α
ααΆ vectorization α
ααΆα’αα»αα αααααα·ααΈα ααααα Go ααΊαα ααααΆαααΈααΆαααα’α₯αααα ααααααα·α αααα αα αα α»ααααααααα αααααααΆααααα½ααααααΎααααΈ vectorize ααΌα Go ααΊααααΌααα αα·αααΆααααααα·ααααα·ααΆαααΆαααααααααααααααααΎ Go assembler α
Go assembler ααΊααΆααααα
αααααα α’ααααααα ααααΆααΉαα αΎαααΆ ααΆααΆαα½αααααα»αααααΆ ααΊααΆα’αααΈαα½ααααααααΌαααΆαααααΆαααααΆαααααΆαααα
ααΉαααααΆαααααααααααα»αααααΌααααααα’ααααααα»αααααα ααα»ααααααααα·ααααααΆααααΈαα
αααα»α Go αααααα αααααα·ααΈααα‘αΎα Go ααΊααΌα
ααΆ IRL (ααΆααΆααααΆαααααα·αααααα) α¬ααΆααΆααααα·ααααααα ααΆααΆαααα·ααΆα―αααΆαααα Rob Pike ααΆααααααααΆαααααααααα’ααα
αΆααα
ααΎαααΈααα Go ααααΎαααααα Plan 9 αα·αααααααΆ ααααα»αααΈαααααα AT&T αα·α Intel αααααα½αααααΆααΌαα
α
ααΆααΆααα»ααααα·ααΆααααα»αααΆααα·ααΆαααΆααΆαααααα Go assembler ααααααα·ααααααΆααΆααααααΆααααα»ααααααα
ααα»ααααααΆααααΆαααα’ ααΆαα§αααααααααα·ααααααα
ααα½αααΈαααααα½αααΎααααα»αααΆαααααα Go assembler: PeachPy αα·α avo α α§αααααααααΎααααΆααααΆααααΈααααααΎα Go assembler ααΈααΌαααααα·αααααααααααααααααα»α Python αα·α Go αααααααΆα
α§αααααααααΎααααΆααααΆααααααα½αααααα½αα’αααΈαααΌα
ααΆααΆαα
α»ααααααααΆααααα
αα ααΆααααααααααα·ααα»α αα·αααΆααΌαα
ααααΎα±ααααααΎαααΆαααααΆαα
αΌααα
αααα»ααα·αααααααααα·ααΈαα½αααααα»αααααΆαα
αααα»α Go α
ααΎαααΉαααααΎ avo ααΌα
αααααααααα·ααΈααααααΎαααΉαααααΆαααΆαααααα·ααΈ Go ααααααΆα
αααααΊααΆα’αααΈαααα§ααΆα αααααΆαααααααα»ααααααααα·ααΈ avo ααΎααα
ααΌα
α ααΎαβααΆαβα’αα»αααα main() αααβαααααβαααα»αβαααα½αβααΆβααΌαβαα»αααΆα Add() α’ααααααβααβααΆαβααααααβαααβααΈαα ααΆααα»αααΆααααα½ααα
ααΈααα ααΎααααΈααα½αααΆααααΆαααΆααααααααΆαααααα αα·αααα½αααΆαααΆαα
α»ααααααααααΎαααΆααα½ααααα₯ααα·ααααα αα·αααααααα ααααα·ααααα·ααΆααααααα½αααααΆαααΈαα½ααααΆααα»αααΆααααααααΌαααααΆαα
ααΎ avo ααΌα
αααααΆαααΎααα
αααα»α ADDQ α ααΈαααα»αααΎαααΎααα»αααΆααααα½ααααααΆαααααααΆαα»ααααααααααααα
ααΆααααααΆαα α
αα
αααααΎα ααΎαααΉαααααΎαααΆααααααα·ααΈαα
ααΎ avo α αΎαααΆαααααα α―αααΆαααΈαααΉαααααΌαααΆααααααΎαα
- add.s ααΆαα½αααΉααααααΌααααααααα αααα»α Go assembler;
- stub.go ααΆαα½αβααΉαβααααααΆβαα»αααΆαβααΎααααΈβααααΆααβαα·ααβααΆααααΈαα αα αα·αβααα‘αΎαα
α₯α‘αΌααααααΎαααΆαααΎαααΌαα’αααΈααα avo ααααΎ αα·ααααα ααΌαααΎααα»αααΆαααααααΎαα αααα»αααΆαα’αα»ααααααΆαααααα scalar αα·α vector (SIMD) αααα»αααΆαα
ααΌααααα‘ααααΎαααααααΆαααααααΆαααΆαα»ααα·αα
ααΌα
αααα»αα§ααΆα ααααα»α ααΎααααα»αααααΎαα»αααΆαα
α»αααααααααααααααΌαα
αααα₯ααα·ααααα αα·αααααΉαααααΌα ααΎααα·αα
αΆαααΆα
αααααΆα’α»α αααα·α αα·αααα ααααααΆααα’αΆαα»ααααααααααα α’αΆαααΌααααΎα’αααΈαααΆααα’ααααααααααΆααααΎαα
ααΎαααααΆααααααΎααααΆα αα·α Goto (α¬ααα) ααΎααααΈαααααα’ααααΎαααΆα αα·ααααααααααααα·ααΈ Go compiler ααα»ααααα₯α‘αΌααααααΎααααα»αααααΎααΆααΆααααΈααααΌαα α
ααα»α
αααααΊααΆ ααααααΊααΆαααα·αααααα·ααααααα αα
αααα»αααΆααα½αααααα»αααααΆ ααΎαααΆαααααααΆααααααΆ αα·ααααααα»αααααα
αααααΌαααααα
ααααα½αααααααΆααααααΆαα αα·αα’αΆα
αααααΆαα ααΎαααααΎααααΆααααΆαααααα·ααα»αααΆαα½αααααΆα αα·αααα αααα·ααααααααΌα
αα½αααΈα
ααα·αααΈαααααααΎα αααααα½αααΆααΆαα½αααααα·ααααα·ααΆαααααα·α
(α αΎααα·αααααααα»αααααΈααα) α αΎααααααΆααααααΆαααααααααα
αααα»αα
ααα·αααααααα ααΆααα’ααα
αααααΆα’αααΈααααααααΌαααα‘αΎαα
α»ααααααααΎααα
α ααΎααα·αα
αΆαααΆα
αααααΆα’α»α αααα·α αα·αααα α (ααααα·α
ααΆααααααα) α¬ααΆαααΆαααΆαα
α»αααααααααααΆαααααΎ (ααααα·α
ααΆααααααα α)α
ααααα·αααΎααΎαααααααααααααΎαααΆαααααΆαα’αα»ααααααΆααΆαα½αααααα»αααααΆααΆαα½αααΉαααααΎαααΆαααααΆαα’αα»ααααααα’αααα»ααα
αααα»α Go ααΎαααΉαααΎαααΆααΆααΌα
ααααΆα α αΎααααααααΌαααΆαααααΉααα»αα αααΆαααΆαα·α ααΎααα·αααΆαααααΎα’αααΈαα·αααααααα ααΎαααααΆααααααα·αα‘αΎααα·αααΌαα’αααΈαααα’αααα
ααααα Go ααΉαααααΎα
ααΆα’αα»αα ααΎααα·αα’αΆα αααααα’αααα αααααα±αααααα αΌααα»αααΆαααααααΎαααααααααααΆααΆααΆαα½αααααα»αααααΆααΆαααα Go compiler αα αα α»αααααααα·αααΆααα»αααΆααααααααα αααααΈααΆααΆαααΆαααααΎαα»αα±ααααααααααΆαα½αααααααααα
αααβααΆβααΌαα ααα»βαααβααΆβαα·αβα’αΆα βααα½αβααΆαβα’αααααααααααβααΆαα½αβααΈβαα»αααΆαβααΌα βαβαααα»αβααΆααΆβααα‘αΎαβααα ααΎαααααΌαααααααα»αααΆαααα α¬ααααΎαααα ααααα·ααα·ααααΆ/αααΈαααααΈ α¬ααααααΆααΆααα‘αΎαα
α₯α‘αΌαααα ααΌααααα‘ααααΎαααααααα·α
ααααααα»αααΆαααααααΎαα
αααααΆααα§ααΆα αααααα αααα»αααΆααααααα
α
α·αααααααΎ AVX2 ααΌα
ααααααΎαααΉαααααΎααααα·ααααα·ααΆααααααααΎαααΆαααΎααααΆαα 32 ααα αα
ααΆααααααααααΌαααΊαααααααα
ααΉαααααααΆαααααααΆαα ααΆααααα»ααααΆαααΆαααααα ααααΎαα»αααΆαα
α»ααααααα
ααααααααααα₯ααα·αααααααα
ααΆαα
αααααααα·ααα½αααΊααΆααααα·ααααα·ααΆαααα·α
αααααΆααααααΌααααΌααΆαααααΎααΆαα
α»ααααααααααΌααΆααα·αααα αα
αααα»αααααΈααααααΆαα 32-byte ααΆαααααααΊααΆααΆαα
α»ααααααααααα»αααααααα Y. αααααΆααΌαα ααα»αααα’αααααΎααα»αααΆα YMM() αα
αααα»αααΌαα ααααα·αααΎαααα»ααααα»αααααΎ AVX-512 ααΆαα½αααΉαααααΆαα 64 αααΈα ααααα»αααααααΉαααΆ Z α
ααΆαα
αααααααα·αααΈααΈαααΊααΆ αααα»αααΆααααααα
α
α·αααααααΎααΆααααααΎαααααα·αααααΆααα½αα α
ααΆ loop unrolling αααααΆααααααΆααααΎααααα·ααααα·ααΆαααααα·ααα»αα
ααα½αααααΆαααΈααααα αα»ααααααααα
ααΆαα
αΆααααααΎαααααααα·ααα»αα ααΆααααααΎαααααα·αααααΆααααααΆαααααααα
ααα½αααΆααΆαα
αααα»αααΌα α αΎαααααΌαααΆαααααααααα
ααα½αααααΆαα
α»ααααααα₯ααα·ααααααααααΆαα
α
α»ααααΆαααΆα
ααααααΆααααααα? ααΆαβααα’αΆαβααΆαα! ααΎααααααα
ααΆαααΆααααααΎαααααΏααααα αα XNUMX αααααααΉααααααααααΆα Go ααα’αααα»αα αα½αα’ααα
αΆααα’αΆααααααααααα?
ααα»ααααααΌααααΈααααΆαα’αα»αααααααααα’αΆα
ααααΌαααΆααααααΏααααααααΎ AVX-512, prefetching α¬ JIT (just-in-time compiler) αααααΆαααααααα·ααΈαααααααααααα½αα ααα»ααααααααα·αααΆαααααΆααααααααΆαααααΆαααΆαααααΆα
ααααα‘αααα½αα
αααα αΆααΆαα½αααααααααααααααΈαααΈα
α₯α‘αΌαααα ααΎαααΆαααΎααα½α
α αΎαααΌαααΆαα’αα»ααααααααΆαααααααα·αα·αααααααααΈαααα»α Go αα·αααα·ααααααααΆαααα·αααΆαα
αααΎαααΆααα»ααα
αααα»αααΆααΆαα½αααααα»αααααΆ ααΈαααα»αααΌααα·ααΆαα’αααΈααΌαα ααα»ααααα·αα·αααααααααΈααααΌαααΆαααααΎααααΆααααααααΆααα
α―αααΆαα
αΆααααα·ααΆαα’αααΈαααα αΆααΈααΆαα½αααααααααααααααΈ ααα»ααααα―αααΆαααααΈααΆαααα α αΎααααα»αααααααααΆααΆαααααΆααααααααααα αΎαα ααΎαβααΉαβαα·αβα
α»αβαααα
βαααα»αβαααα αΆβααΈαα½ααβαααβαα ααα»ααααβααΉαβααΎαβαα
βααΎβαααα αΆβααΆααβαααβαααβααααα·α
ααααα·αα
αααα αΆαα cardinality αααααα
ααΌα
αααα ααΎαβααααΌαβααΆαβααβααααΆααβααΆβαααααααααβαααααΈβαααΈαβααΊβααααααβαααααΆααβααβααΆαβαααβααΆαβααααα·αβααΆαβααα»ααααα αααβααΊβαααααβαα·α
βαα½α
(α§ααΆα ααα ααα α¬βαααβααααα) α αΎαβααΌαα ααα»βααΊβααααΆαβααααααΆβααβααΆαβαααβααα (αα½α αααΈααααα»ααα½αααααα) αα
αααα»αααααΈαα cardinality ααααα ααΆααΉααααααααααααααα
αααΎαααα α αΎαααΎαααΈααααα
ααα ααααααααα bitmap ααΆαααααααΉαααααΌαααΆαααααααααΆαααααΆα (ααααααΆαα) α
αααααααααΎαα’αΆα
ααααΎααααΆααααααααααΆ ααΌα
ααΆαααααααΆααααααΎαααααΎααΎααααΈααααΆαα±αααααα ααα»ααααααΆααΊααΆααΆαααααααααααα½ααααααααΆαααΆααααα αΆαααααααααΆααααααΌαα’αααΈααααααααΆαα αααα»αααααααααα»ααααΆααααααααααααααααααα α’ααααα·ααααΆααΆααααα αα·αα’αααααααΆαααααΆαααΆααααααΎαααΌααααα½ααααααααΆαααΆααααα αΆαααα½αα
ααα½ααααααααΆαααααααΈαααΈαα α’αααααααααααα
αααααααααα½αααααΊααΆ αα·αα
αΆαααΆα
αααααα½ααααααΈαααΈα ααΎααααΈα’αα»ααααααααα·ααααα·ααΆααααΈααα ααΎαα’αΆα
α’αα»ααααααααα·ααααα·ααΆααααΈααααααααΆαααα
ααΎαααααΈαααΈααααααΆααααα αΆααα
ααααΈαααα αα·ααΈααΆαααααααΌαααΆααααΆαα
αΆααααααΎαααα
α
αα ααΌα
ααΆαααααΈαααΈαααααααα»ααααα αΉαα αα½ααααααα»ααααααααΆαααααΆααααΎααααΆαααΈαααααααααΆαααααΆαααααααΈαααΈα - αααααΈαααΈααααα½αα―α α’αΆαα αα·αα’αααΈαααα α
ααΆααααΎαααΆααααΈα - αα·ααα»αααααΆααααΆααα½αααΆααΎααααΈαααααΎαααααα·αααααΆα αα·αααΆαααααααααΆαααααΎααααΆααα’αααα
αα
αΆαα
α’αααα’αΆα
ααααααααααααΈαααΈαααααααα»ααααα αΉααα
αααα»ααααααα·ααΈααααα·αααααα»αα ααΆαααΆαα’αα»αααααα½αα
ααα½ααααα½α
α αΎααααααΆααααΆααΆαααααα·ααΈααΆα
αααΎα αα½αααΆααααΆαα’αα»ααααα
αααΎαααΆαααΈαααααΆαα Go α
αα·ααΈααΆααααααα½ααααααααααααα’αΆα
αα½αααΎααααααααΆαααΆαα½αααΉα cardinality αααααααααΌαααΆαααα α
ααΆ binning α αααααααΆα’αααααΆαααΆααααααααΆαα±ααααααααααααααα»αααα ααααααααΊααΆαααα’αααααααΉα ααα»ααααααα»αααααΎααα·ααα·αααΈααΆαααααα αααααΆααααΎααα·αααΆαααΆααα»ααααααααααΆαααΆααααααα 185,2 αααααΈαααααα αα·α 185,3 αααααΈααααααααα
ααΆααααααΆααΎαα’αΆα ααΆαααααααααααααααααΆαα ααΆαααα»ααααα»ααααααα 1 αααααΈααααααα
α αΎαααααα·αααΎααΎαααΉααααααΆααΆαααα»ααααα·α ααΆαααααααααΈααΆα 50 αααααΈαααααα αα·ααααααααΆα 250 αααααΈααααααααα ααΎαα’αΆα ααααααααΆαααΆααααααΆαα’ααααααΆααααααΆααααααααααα ααΆααΆααα½ααααααΆαααααααααα αα 200 α
ααΆααΆααα·αααΆαα ααααα·αααΎα αΆαααΆα α ααΎαα’αΆα ααααΎααΆααααααααααααα ααααααααα
αααα αΆααααα·ααααααΌααααααα
αααα αΆαααααΆααααΆαα½αααααααααααααααΈαααΈαααΊααΆααΆαααααΎαα αα α»ααααααααΆααα½αααΆα’αΆα ααΆααααααααααααΆααα
ααΌαααααΆααα·ααααααααααΌαααα’αΆα
ααααΎαα
αα
α»ααααααααΆααα·αααααα αααααααααα½αααΆαααααααααααααααα»αααααααααα·ααααααα ααΎαααααΌαααΆαα
αΆαααα ααΎααααΈαααααΆααααα αΆααΆαα½αααΉαααΆαα
αΌαααααΎαα·αααααααααα»ααααααααΆαααααΆ α¬αααα αΆα
αααααααααααααααα α αΎααααααααααααΆααααααα½α ααΆααααα αΆαα½α - ααααααααααααΆ αα
ααααααααααααααααΆαααΆα§αααααα
αααα αΆβαααβα’αΆα
βααααΌαβααΆαβαααααααΆαβα¬βαααβααΆαβαααβααΆαβααααΎβααΆαβααααα α¬βααααΎβαα·αα·ααααβααααα
Sharding ααΊααΆααΏαααΆαααα αα·αααααΈα α’αααα’αΆα ααααααα·αα·αααααααααΈαααΈα ααΌα αααα’αααα ααααΆααα·ααααααααααααααα αααα½αα±αααααααα½α α’αααααΉαααα½αααΆαααααΌα αααΆα αααΎα α αΎαααΌα αααααααα αΆααααΆααααααααααααααααΆαααααα
αα·ααΈααΈααΈαααΎααααΈαααααααΆααααα αΆααΊααααΌαααααΎαα·αα·ααααααααα α’αααα’αΆα ααΆαα αααΆααα αααααα½ααααα·αα·αααααααα’αααααααΎαααααΆααααΆαααααααα α¬α’αΆα αα·ααα½αα αααΆαααααα’αααααααΎαααααΆααααΆαααααα α¬ααααΎαα αα α»ααααααααΆαα α αΎααααααααα»αααα‘α»ααααααΆααααΆαααα½α (α§ααΆα ααα ααΆαα 100 ms α¬ 500 ms) α’ααααααα½ααα½αααΆ α αΎαααααΌααα½αααΆα ααΆααΆααα·αααΆαα αα·ααΈααΆααααααααααΊα’αΆα α’αα»ααααααΆααααααα»αααααΈααααααααα·ααΈααααα’αααα’αΆα αααααααΆαααααααααααααααααααΊαααααα·α ααα»αααααα
αα·ααΈααΆαααααααΆααααΈααααα’αΆα ααααΌαααΆαααααΎαααα»ααααααααΆαααααΆα α’αααα’αΆα ααΆαααααααααααααααααααΆααααααα
αααα½ααααα»αααααΆαααΆα
αααα αΆα α»ααααααααΆαα½αααααααααααααααΈαααΈαααΊααΆ ααΎαααααΌαααΆαααααααΆααααΆααΆαα·αααααα’αααααΆαααααααααααα½αααααααα»αααααΆαααΆαααααα ααΌα ααΆαααα½ααα·ααΆαααΆαααΆααΎαα
ααΆααΆααα·αααΆαα ααααα·αααΎα’ααααα·αα’αααΈααΆ ααααα·ααααα·ααΆααααΈαααΌα
ααΆ AND, OR ααΆααΎα ααΊαα·ααααααα·αααααα»ααααααΆαααααα½α "αααα αΆααααα»αααΌααααααΆααΆαααΆαα½αααΉααααααααααααααΈ 200 αα
300 αα»ααααΆααααα»ααα½ααααα"
αααααααααΆααααααααα αα·αααααΆαααααΆααααΆααΉαααΆααΆαααα½ααααααααααααααΆαααααααααααΆαααα»ααααΆαααΈαα½αα α αΎααααα
αΌαααΆααΆαα½αααααα·ααααα·ααΆα OR ααααα·α
α
αααααααααΆαααα’ααΆαααααα·α
ααΊααααΌαααααΎααΆαααΆααααΆαααα»αα α§ααΆα ααααααα»ααααα»α 50 αα»ααααΆαα αααααΉααααααΎαααααΏαααααΎαααΆαααααααΎα 50 ααα
ααα»αααααααα αΆααααααΌαααΆααααααααΆααααΆαααΆααααα½ααααααααΎαα·αααααΆααααααΆααααααΎαααΆαα·ααααααααΆααααααααααααΎαααα αα
αααα»αα―αααΆααα·ααααΆααΆααααα ααΆααααΌαααΆαα α
ααΆ αααααΈαααΈααααααΆαα’αα·αααΌααα½αα
αα
αααα»αααΆαααααΆαααα ααΎααα·αααααΆααααααααααα½ααααΈααααααΆααααααααα½αα
ααα½α (α§ααΆα ααα 200) ααα»ααααααααααααααααα αα·αα’αααΈαααααααααΆααααααααΆααααα 200 αα·ααααααααΆααααα ααΌα
ααααΆαααααΆαα 300: 300 αα·ααααααααΆααααα αβαα
αααααααΎααααΆαααα ααΎαα’αΆα
ααααΎααααα½ααααααααααααααααααααααααααΆαααααααααααααααΉαααααΈαααααα»αααααα ααααΌα ααΎαααΉαααα½αααΆααααααΈαααααΆααΆααααααααααααΆαααααααα·α
ααΆα α¬ 300 αα»ααααΆα α αΎααααααΆααααααΎαααΉαααα
ααααΈααΆ αααααααααααααααα·α
ααΆα α¬ 199 αα»ααααΆαα αα½α
ααΆααα
α’αααβααΉαβααααΆααβααα’αΎα ααα»ααααβααΌααααΈβααβααΌαα·ααΆαααααβααβα’αΆα
βααααΎβααααΆααβαα·αα·ααααβαααααΈβαααΈαα αααα·α
ααΊααααΎααααΆαααααΈααΆααααααααααααα»ααα·αααΌα’αααααααααα’αααααΆαα½αααΉααα½αααααααΈααΆαααα α§ααΆα ααα S2 ααΈ Google α αα½αααααα½αααα’αΆα
ααααΆααααα»αααααααααΆαααααΆαααααααααααΈ α¬α
αααΎααααα’αΆα
ααΆαααααααΆαα αα·ααΈαααααΎαα’αΆα
ααααααααΌαα·ααΆαααααααααααΎααα
ααΆαααα½αααΆα
αααΎα βααΆαα
αααααβ (ααΆααααααΆαααααααΆααααα)α
αααααααααΆααα½α ααΆαα
αααα»ααααααΉαααΆαααα»αα αΆααα’αΆααααααα’αααααααα·α α αΎαα₯α‘αΌααααα’αααααΆαα§αααααααΆααααααααααα½ααααααααααα αααα»αααααΆααα’αΆαα»αααααα’αααα ααΎβα’αααβααααΆααβααααΌαβααααΎβααΏαβαααβααα α’αααβααΉαβααΉαβααΆβααααΌαβααΎαβαα·ααΈβααΆα
ααααααΆαααΆααααα αα·αααααααααααααΆαα»αααααααΆααααααααΆ ααΆαα’ααααααα α¬ααααΆαααΎααααΈαααααΎααα·αα·ααααααΌαααΆαααΈααααΌαα‘αΎαα ααΆβαα·αααβααΆαβααααΎβαααΈαααΈ ααΆβα§ααΆα ααα
ααΆααααΆαααα’ ααΆααααααααααΆααααααααααα½α
ααΆααααα
ααΆα
αααΎαααΎααααΈαα½αα’αααα
αααααΈβαααβαααα»αβαααα αΉα
ααΈαα½α ααΆααααααΆααααααΈααααααΈααααααα αΉαααΌα
ααααΆ ααααααα»αααΆααα·ααΆααα½α
α αΎαα ααΆααΆααα»αααΊαααα
αΆαααΆα
αααΆααα’αα αα·αααααα·ααααα·ααΆααααΈα αααα’αααααΉαααααΌαααααΎαα·αα·αααααααααΈαααΈαααααααα
ααΆα’αα»αα αα
αααααα ααααΆαααΆαα’αα»αααα Go ααΆαα½αααααΎ SIMD αααααΆααααααΆααΆαα’αα»αααα Go ααΆαααααα·αααααΆααα·α
ααΆαααΆαα’αα»αααα C ααΆα§ααΆα αααα
ααΈα‘αΌααΆ
ααα·ααααα½αααααααα’αΆα
αα½αα’αααααΆαααΊ Pilosa DBMS αααααΆααα·αααΆαααααααααααααααααΈαααΈαααα»αααααα αααβααΆβαααααβααααΆαβααααΈβαα½α ααα»ααααβααΆβααααβα
α·αααβαααα»αβααααΏαβααβα’ααα
αΆαααα
Pilosa ααααΎαααααΈαααΈαααααααα αΉααα
ααΆααααα»α α αΎααααααα±ααα’αααααΌααααααααΆααααα»αααΆαααααΎααααΆαααα½αααΆ ααααα½α αα·αααααααα’αααΈαααΆααα’ααααααααα»αααΆααα·ααΆαααΆαααΎα ααΆαααΆααααΆαααα»α αααααΈαααΈααααααΆαα’αα·αααΌααα½α αααα·αααααΆαααα
ααΌααααα‘ααααΎαα§ααΆα αααααααΆαααααΎααααΆαα Pilosa ααΎααααΈααααΎααααα½ααααα’αααααααΆααααααΆααα
α§ααΆα αααααΊααααααααΉαα’αααΈαααα’αααααΆαααΎαααΈαα»αα ααΎααααααΎααααΆαααΈαααααααα
ααΆαααααΆαααΈααα Pilosa αααααΎααα·αα·αααα αα·αααΆαα
αΆαααΆα
α αααααΆαααααααααααΆαααααααΎαααΆαα½αααΉααα·ααααααα
αααααααΆαα½αααΉαααααΌααΆαααΈααΈαα α αΎαααΈαααα»αααααα·ααααα·αααα½ααααααααΆααααααΆααα
αααααΆααααΈααα ααΎαααααΎαα·ααα
ααΎααΆα "αααα" αααααΆααααααααααααααααα (α¬ αα·αααΆ) ααΆαα½αααΆα "ααΆαααααΎ" αα·αααΆαα½αααΆα "ααα" α α αΎαα
α»ααααααααΎαααα½αααΆαααααααα
α»ααααααα
αααα»ααα·αααΆαααααΉαααΆαα
αααα’ααΆααααααααΈααΆααα»α αααααααααααααααααααΈαααααααΉααααα αΆααα
αααα»α DBMSs ααΌα
ααΆ MySQL αα·α PostgreSQL - bitmap indexes α
ααα ααααΈααααα·ααααΆα
ααΎαα·αααΆααααΆαααααα α’ααα»αα αααα»αααααΌααα·ααΆαααααΈαααΎαααααΆαααααΆα
αααΎα αααααΆααααααααΆααΆαααααα ααα»αααααααα»ααααααΉαααΆααΆααα·ααΆααααΆαααααΆααααααααα α αΎααααα ααααΆααΎαααΉαα
α·ααααααααα
αα·αα·αααα Bitmap ααΊααα’αααααααΌαααΉα ααΎαααααΈααΆα’ααααα·αααααΌαααΆαααΆα₯α‘αΌαααααααααα α’αα»ααααΆαα±αααα½αααΆααΆα§ααααααα½ααααααααααα αααα»ααααα’ααα§αααααααααα’αααα
ααΎαααΆαααΎααααα·α ααααΆαα’αα»αααααααααααααααΆαα Go αα·αα’αααΈααααα’αααα ααααα Go αα·αααΆαααααααααΆαααΆαααα’αα α‘αΎαα ααα»ααααααΆαα·αααΆααΆααααααααααααααΆααα’αααααααααααααα·ααΈ Go αααααααΌαααΎααααΈααΉαα
αααα αΎαααΆα’αααΈααααααα»αα
ααααααΆααα’αααα ααΌαα’ααα»α!
ααααα: www.habr.com