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
Index Compression Using Byte-Aligned ANS Coding...
Search
chie8842
April 15, 2018
Technology
0
800
Index Compression Using Byte-Aligned ANS Coding and Two-Dimensional Contexts
WSDM 2018 論文読み会の資料
https://atnd.org/events/95510
chie8842
April 15, 2018
Tweet
Share
More Decks by chie8842
See All by chie8842
MongoDB Atlas Search のご紹介
chie8842
2
1.3k
MongoDB Atlas Vectorsearchではじめる生成AIアプリ開発
chie8842
3
1.4k
AWS GlueとAWS Lake Formationではじめるデータマネジメント
chie8842
0
940
Distributed Processing in Python
chie8842
2
640
クックパッドにおける推薦(と検索)の取り組み
chie8842
21
7.9k
Understanding distributed processing in Python
chie8842
2
1.9k
Performance Tuning Tips of TensorFlow Inference
chie8842
1
720
クックパッドにおけるCloud AutoML事例
chie8842
9
7.8k
Cookpad_Internship_MLOps_Lecture_2018
chie8842
35
16k
Other Decks in Technology
See All in Technology
テストコード品質を高めるためにMutation Testingライブラリ・Strykerを実戦導入してみた話
ysknsid25
7
2.6k
Shopifyアプリ開発における Shopifyの機能活用
sonatard
4
250
【令和最新版】AWS Direct Connectと愉快なGWたちのおさらい
minorun365
PRO
5
750
SREによる隣接領域への越境とその先の信頼性
shonansurvivors
2
510
スクラムチームを立ち上げる〜チーム開発で得られたもの・得られなかったもの〜
ohnoeight
2
350
サイバーセキュリティと認知バイアス:対策の隙を埋める心理学的アプローチ
shumei_ito
0
380
Lambda10周年!Lambdaは何をもたらしたか
smt7174
2
110
Why App Signing Matters for Your Android Apps - Android Bangkok Conference 2024
akexorcist
0
120
ノーコードデータ分析ツールで体験する時系列データ分析超入門
negi111111
0
410
Why does continuous profiling matter to developers? #appdevelopercon
salaboy
0
180
New Relicを活用したSREの最初のステップ / NRUG OKINAWA VOL.3
isaoshimizu
2
580
エンジニア人生の拡張性を高める 「探索型キャリア設計」の提案
tenshoku_draft
1
120
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
The Language of Interfaces
destraynor
154
24k
Automating Front-end Workflow
addyosmani
1366
200k
How STYLIGHT went responsive
nonsquared
95
5.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
RailsConf 2023
tenderlove
29
900
Building Applications with DynamoDB
mza
90
6.1k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Fireside Chat
paigeccino
34
3k
Being A Developer After 40
akosma
86
590k
Building an army of robots
kneath
302
43k
Navigating Team Friction
lara
183
14k
Transcript
*OEFY$PNQSFTTJPO6TJOH#ZUF"MJHOFE"/4 $PEJOHBOE5XP%JNFOTJPOBM$POUFYU 84%.ಡΈձ $IJF)BZBTIJEB
Θͨ͠ͷ͠ΐ͏͔͍ $IJF)BZBTIJEB !DIJF ΫοΫύουɹػցֶशνʔϜ $POUSJCVUFUP"QBDIF4QBSL )BEPPQ FUD
ൃചͷ8&# %#13&44ͷ 1ZUIPOͱՊֶٕज़ܭࢉͷষ ॻ͍ͨɻ
"#453"$5 • #MPDLCBTFEJOWFSUFEJOEFYDPNQSFTTJPOͷ࣮ݧΛߦͬͨɻ • "TZNNFUSJD/VNFSBM4ZTUFNT "/4 ΤϯτϩϐʔίʔσΟϯ άʹରͯ͠ҎԼͷ֦ுΛߦ͏͜ͱʹΑΔվળ͕ಘΒΕͨɻ – ͭͷूύϥϝʔλʹΑΔ࣍ݩͷ݅ίϯςΩετʹΑͬͯɺγ
ϯϘϧͷΧςΰϥΠζΛߦ͏ɻ – #ZUFGSJFOEMZͳϚοϐϯάΛͬͯγϯϘϧΛ"/4ͷDPEFXPSE CVDLFUʹΘ͚Δ – ίϯςΩετϚʔδͷϓϩηεʹΑΓɺෳͷEJTUSJCVUJPOΛͭͱ Έͳ͞ΕΔɻ • ͜ͷख๏ʹΑΓɺJOUFSQʹΑΔΠϯσοΫεͷѹॖͷੑೳج ४Λ্ճͬͨɻ • ࣮ݧ(#ͷHPWίʔύεͱ৽͍͠χϡʔεهࣄΛ͍ɺ ΫΤϦධՁผͷCMPDLCBTFEͷख๏ͱൺֱͨ͠ɻ
*/530%6$5*0/ • *OWFSUFE సஔ ΠϯσοΫεςΩετσʔλʹର͢Δ ߴͳΫΤϦ࣮ߦͷॏཁͳߏͰ͋Δɻ term Posting list J1IPOF
Ϗοάσʔλ Χό ϝϩϯ posting ͦΕͧΕͷυΩϡϝϯτ*%ʹରͯ͠୯ޠͷग़ݱසϙδ γϣϯͷใ࣋ͭɻ ίϯύΫτͳQPTUJOHMJTUTʹɺCZUFBMJHOFEDPEFT XPSE BMJHOFEDPEFT CJOBSZQBDLFEΞϓϩʔν͕͋Δɻ
*/530%6$5*0/ • ϋϑϚϯූ߸ԽͷΑ͏ͳΤϯτϩϐʔϕʔεͷख๏ఏҊ͞Ε͍ͯ ͕ͨɺҎલ͋·ΓސΈΒΕΔ͜ͱ͕ͳ͔ͬͨɻલʹ+FSFL %VEB͕"/4ϝΧχζϜΛ։ൃͨ͜͠ͱʹΑΓɺΤϯτϩϐʔίʔ σΟϯά͕࠶ͼ͞ΕΔΑ͏ʹͳͬͨɻ • 7#ZUF 4JNQMF 1BDLFEͷख๏Λ༻͍ͯɺͦΕͧΕѹॖޮ͕վળ͞
Εͨɻ • 1BDLFE "/4ΞϓϩʔνͷఏҊ – ݻఆϒϩοΫͷγϯϘϧ͕ηϨΫλʹΑͬͯಛఆ͞Εͨ֬ͱؔ࿈ ͯ͠ූ߸Խ͞ΕΔɻ – 1BDLFE "/4Ξϓϩʔνͷհʹ͓͍ͯɺηϨΫλϒϩοΫͷ࠷্Ґ ͕ར༻͞ΕΔɻ – QBDLFEGSBNFPGSFGFSFODF 1'03 ϝΧχζϜͷΑ͏ͳར͕͋Δɻ – ΤϯτϩϐʔίʔσΟϯάͷϝϦοτ • ΤϯτϩϐʔίʔσΟϯάͷॊೈੑʹΑΓɺࣅ௨ͬͨූ߸ͷ֬ٴͼූ ߸ͷ໘Ͱѹॖޮ্͕͕ͬͨɻ – ϒϩοΫͷूʹ͓͍ͯ࣍ݩͷηϨΫλ͕ར༻Ͱ͖ͨɻ • γϯϘϧͷࣝผࢠ͔Β"/4ͷͱϚοϐϯάΛม͑ΔলϝϞϦͰ CZUFGSJFOEMZͳग़ྗ • σίʔυͷࡍͷϝϞϦ༻ྔΛݮ͢ΔͨΊͷ$POUFYU.FSHJOH
#"$,(306/%ɿ*OEFY$PNQSFTTJPO ˙$PNQSFTTJPO"QQSPBDI • طଘͷํࣜ – ౷తͳख๏ɹ&MJBTDPEFT – 7#ZUFͦͷมܗ – ϫʔυϕʔεͷγϯϓϧͳΞϓϩʔν
– *OUFSQNFDIBOJTN • εέʔϧͨ͠ͱ͖ʹྑ͍ѹॖޮ͕ಘΒΕ͕ͨɺEFDPEF͕ &MJBTΑΓ͔ͬͨɻ
ิɿ&MJBT(BNNB https://en.wikipedia.org/wiki/Elias_gamma_coding
ิɿ7#ZUF 1 0 0 0 0 0 1 0 value
End marker 1000000110000010 整数自体を符号化するのでなく、逐次差分を符号化する方法
#"$,(306/%ɿQBDLFEDPEFT ˙1BDLFE$PEFT • ݻఆͷQPTUJOHTʹର͢ΔQBDLFEDPEFT • ൺֱత࠷ۙͷٕज़ • ΩʔΞΠσΞɺϩʔΧϧͳҰ؏ੑΛར༻͢Δํ๏Ͱ͋ Δɻ •
ݻఆʢେʣͷϒϩοΫ͝ͱͷΛͭͷϢχο τͱͯ͠ॲཧ͢Δɻ • ྫ͑ɺ ͔ΒηϨΫλΛબͿ͜ͱͰɺ͋ΔΛ ͱ͍ͬͨॻ͖ํͰදͤΔɻ
#"$,(306/%ɿ1BUDIFE'SBNFPG3FGFSFODF 2 1 31 1 0 … 2 10 01
01 01 00 … 10 b=5 b’=2 1exception position3 • ϒϩοΫຖʹͦͷϒϩοΫͷͷ΄ͱΜͲΛද͢͜ͱ͕Ͱ͖ΔϏοτΛ ܾΊͯ Τϯίʔυ͢Δɻ • খ͍͞ϏοτͰදͤΔͨΊσʔλαΠζ͕খ͘͞ͳΔɻ • 1'03ͷมܗͰ͋Δ0QU1'03Ͱɺ࠷શମͷύοέʔδ͕͜Μͺ͘ͱʹͳ ΔΑ͏ʹηϨΫλΛબͿΑ͏ʹͳ͍ͬͯΔɻ b b’ metadata
#"$,(306/%ɿ7BSJBCMF-FOHUI#SPDLT • ՄมͷϒϩοΫʹύʔςΟγϣχϯάͨ͠߹ͷख๏ Λ0UUBWJBOPFUBM͕ఏҊ͍ͯ͠Δɻ • ಉҰͷσʔλ͕ग़ݱͨ͠ͱ͖ʹେ͖ͳΠϯϓοτϢχο τΛ࣋ͭηϨΫλετϨʔδΛঈ٫͢ΔΑ͏ʹγʔΫ͢ Δɻ͕ہॴతʹόʔετ͢Δ߹ʹ༗ޮͳํ๏Ͱ͋Δɻ
#"$,(306/%ɿ"TZNNFUSJD/VNFSBM 4ZTUFNTʢ"/4ʣ • +BSFL%VEBʹΑͬͯ։ൃ͞Εͨ৽͍͠Τϯτϩϐʔූ߸ Խํࣜ • ϋϑϚϯූ߸Խࢉज़ූ߸ͱಉׂ͡ΛՌͨ͢ɻ • ग़ݱසͷߴ͍γϯϘϧʹϏοτͷখ͍͞ූ߸ɺग़ݱ සͷ͍γϯϘϧʹϏοτͷେ͖͍ූ߸ΛׂΓͯ
Δɻ
"/4Λ༻͍ͨΠϯσοΫεѹॖͷྫ • γϯϘϧ1 2 3ͦΕͧΕग़ݱ֬ɺɺͱ͢Δ • ϋϑϚϯූ߸ԽͰɺ1͕̍Ϗοτɺ2ͱ3͕̎ϏοτͱͳΔɻ • "/4ූ߸ԽͰɺ.ݸͷཁૉͷ͕1ɺ͕2ɺ͕3ʹϥϕϦϯά͞Εɺ ͦͷΞϧϑΝϕοτ্ͷه߸ͷγʔέϯεɺରԠ͢ΔϑϨʔϜͷঢ়ଶͱ͠
ͯදݱ͞ΕΔɻ • ଞͷϑϨʔϜΛ࡞Δ߹ɺଞͷॱྻ͘͠.ΑΓେ͖͍Λ༻͢Δɻ • ϑϨʔϜͷූ߸ԽɺભҠؔ5 ɾ ɾ Λ༻͍ͯߦ͏ɻ5্ͷΧϥϜɺεςʔ τมͰΠϯσοΫεԽ͞ΕΔɻ • શମΛූ߸Խ͢Δ߹ɺεςʔτม͕େ͖͘ͳΔɻ • σίʔυ͢Δͱ͖ɺɹɹɹ͕ΘΕΔɻ
"/4Λ༻͍ͨΠϯσοΫεѹॖͷྫʢଓ͖ʣ • TFRVFODF2222222222ݸͷεςʔτΛ ࣋ͪɺϏοτͰද͞ΕΔɻϋϑϚϯූ߸Խͩͱ ϏοτͰ͋Δɻ • ରͯ͠ɺTRVFODF3333333333εςʔτ͕ ݸͱͳΓɺϏοτʹͳΔɻ • ͜ͷख๏ɺ4LFXͷ͋Δσʔλʹ༗ޮͰ͋Δɻ
39364 118096 ….
"/4$PNQBSFE • ϋϑϚϯූ߸ٴͼ"SJUINFUJDDPEJOHͱͷൺֱ – "/4ཧతͳූ߸Խ͕"SJUINFUSJDDPEJOHͱۙ͘ͳΔɻ – ߴ͍ग़ݱසͷγϯϘϧΛൃੜ͢ΔͨΊʹɺϏοτͷίʔυ͢ Βൃੜ͠ͳ͍͍ͯ͘߹͕͋ΔɻʢϋϑϚϯූ߸ͩͱৗʹϏο τҎ্͕ඞཁɻʣ –
"SJUINFUSJDDPEJOHΑΓ͘ɺߴʹઃܭ͞ΕͨϋϑϚϯූ ߸ͷ࣮ʹ͍ۙεϧʔϓοτϨʔτΛग़͢͜ͱ͕Ͱ͖Δɻ – "/4"SJUINFUJDDPEJOHͱҟͳΓ੩తϝΧχζϜͰ͋Γɺҟͳ ΔίϯςΩετͷͱͰγϯϘϧΛੜ͢Δ͜ͱ͕Ͱ͖ͳ͍ɻ ͨͩ͜͠ͷ͜ͱΠϯσοΫεѹॖʹӨڹ͠ͳ͍ɻ
"/4GPS*OEFY$PNQSFTTJPO • Ҏલͷݚڀ – "/4Λ̏ͭͷҟͳΔΠϯσοΫεѹॖํࣜͱΈ߹Θͤͨɻ – ಛʹ7#ZUFͱΈ߹ΘͤΔΞϓϩʔνΛQPTUJOHMJTUͷѹॖʹ༻ ͨ͠ɻ – σίʔυͷεϧʔϓοτগ͠Լ͢Δ͚ͩͰɺετϨʔδΛ
͔ͳΓઅͰ͖Δ͜ͱΛ֬ೝͨ͠ɻ • ࠓճͷख๏ɿʮ1BDLFE "/4ʯϝΧχζϜ – ʮͭͷύϥϝʔλʯΛ͏ – গͳ͍ϝϞϦ༻ྔͷίϯύΫτͳ࣮ – ίϯςΩετϚʔδ • ͜ΕΒͷख๏ͷ༗༻ੑΛ࣮ূ͢ΔͨΊʹɺͭͷେ͖ͳ ςΩετίϨΫγϣϯΛ༻ͯ͠ɺѹॖͷ༗ޮੑͱΫΤ Ϧͷεϧʔϓοτʹؔ͢Δৄࡉͳ࣮ݧ݁ՌΛఏڙ͢Δɻ
1BDLFE "/4 • ඪ४తͳ1BDLFEBSSBOHFNFOUͰɺίϯςΩετΛಛఆ ͢ΔηϨΫλ͕֤ϒϩοΫͷූ߸Խͷௐʹར༻͞ΕΔɻ • ූ߸Խεςοϓ͕όΠφϦίʔυΛ༻͢Δ߹ɺηϨ ΫλɺϒϩοΫͷ࠷େΛݟग़͠ɺόΠφϦͷେ͖ ͞Λܾఆ͢Δɻ •
࣍ʹɹɹɹɹͱͳΔΑ͏ͳୈͷɹΛٻΊΔɻैདྷͷ 1BDLFEߏͰɺM൪ͷίϯςΩετΛ༻ͯ͠ɹɹɹɹɹ ΛؚΉϖΠϩʔυ͕ੜ͞ΕΔɻ
*.1307&%1"$,&%$0.13&44*0/ 1BDLFE "/4 • 1BDLFE "/4ϝΧχζϜͰɺ͜ΕΒͷ͞·͟·ͳཁૉ͕ີ ʹ݁ͼ͔ͭͳ͍ɻ • ηϨΫλϒϩοΫͷ࠷େͱ͠ɺ"/4ϑϨʔϜϓʔϧ Λࣝผ͢Δɻ
• ֤ϑϨʔϜʹɺͷϙεςΟϯάΛॲཧ͢Δ࠷ॳͷύεத ʹ౷ܭΛੵ͠ɺ֬Λর߹͢ΔͨΊʹߏங͞Εͨҟ ͳΔγϯϘϧ֬ηοτΛؚΉɻ • γϯϘϧͷසਐͷόέοτʹੵ͞ΕɺͦͷΑ͏ͳ֤ όέοτͷͯ͢ͷγϯϘϧʢͨͱ͑ʣʹͳΔɻ • ྫ͑ɺʜ ʜͱʜ֬Ͱ͋ΔͱԾఆ ͞ΕΔɻ • ͕͠γʔέϯεɹͷ൪ͷγϯϘϧ͕ϒϩοΫͷηο τͱͯ͠ූ߸Խ͞Ε͍ͯΔͳΒɺͱಉ͡ϒϩοΫͷ γϯϘϧʹΘͨΔ࠷େਐ͔Βܭࢉ͞ΕͨηϨΫλͰ͋Δɻ
5XP%JNFOUJPOBM$POUFYUT • ίϯςΩετΛ֦ு͢Δ͜ͱͰɺηϨΫλΛ֨ೲ͢Δί ετ૿Ճ͢Δ͕ɺਖ਼֬ʹλʔήοτͷ֬Λ༻ ͢Δ͜ͱ͕Ͱ͖Δ • ίϯςΩετͷՃํ๏ͱͯ͠ɺҎԼ͕ڍ͛ΒΕΔ – ̎ͷྦྷʹΑΓηϨΫλϕΫτϧΛऔಘ͢Δ –
όέοτ͕খ͘͞ͳΔΑ͏ʹରͷఈΛมߋ͢Δ • ্ͨͩ͠ه྆ํڞϒϩοΫͷ࠷େʹΑܾͬͯ·ͬ ͯ͠·͏ͷͰɺΤϯτϩϐʔίʔσΟϯάͷརΛ׆͔ ͤͳ͍
5XP%JNFOUJPOBM$POUFYUT • ࣍ݩͷηϨΫλΛར༻͍ͨ͠ɻ – ୈҰ࣍ݩ͕ϒϩοΫͷ࠷େɺୈೋ࣍ݩ͕ϒϩοΫͷ࠷খͱ ͢Δɻ • ͜ͷ্ݶΑΓେ͖͍ɺԼݶΑΓখ͍͞ྫ֎ͱͯ͠ ѻ͏͜ͱ͕Ͱ͖Δɻ –
ϒϩοΫͷதԝΛར༻͢Δ͜ͱͰ͖Δɻ
5XP%JNFOUJPOBM$POUFYUT • ࣍ݩ͔Βೋ࣍ݩͷίϯςΩετʹΓସ͑ͨ߹ͷ༷ࢠɻ
3FEVDJOHUIF'SBNFTJ[F • 1BDLFE "/4Ͱɺσίʔυʹ༻͞ΕΔςʔϒϧͷ ҡ࣋ίετ͕͔͔Δͱ͍͏σϝϦοτ͕͋Δɻ • "/4ΛγϯϘϧͷਐͷൣғͰ༻͠ɺ"/4ετϦʔ ϜͱิॿϏοτετϦʔϜΛฒྻʹॲཧ͢Δ͜ͱͰΛ ࠶ߏ͢Δͱ͍͏खஈ͕͋Δɻ •
͜ͷ߹ՃͷΞϥΠϝϯτʹΑΔίετ͕͔͔Δ ͜ͷͨΊɺ1'030QU1'03Ͱར༻͞ΕΔྫ֎Λఆٛ͠ ͯγϯϘϧͱ"/4λʔήοτͷؒͷϚοϐϯάΛఆٛ ͢Δɻ • ͜ΕʹΑΓѹॖͷ༗ޮੑΛߴΊΔ͜ͱ͕Ͱ͖Δɻ
1BDLFE "/4ͷσίʔυ
$POUFYU.FSHJOH • ίϯςΩετΛՃ͢ΔͱɺηϨΫλ͕ՃϏοτΛඞ ཁͱ͢ΔͨΊɺίϯςΩετ͕ଟ͗͢Δͱޮ͕ѱ͘ͳ ΔՄೳੑ͕͋ΔɻίϯςΩετ͕ͷྦྷͰ͋Δ͜ͱ Λอূ͢Δ͖ɻ • ίϯςΩετͷϖΞΛϚʔδ͢Δ͜ͱͰɺ୯Ұͷίϯς Ωετʹஔ͖͑ΔҊɻ γϯϘϧT͕ίϯςΩετB্ͰOB
T ճൃੜ͢Δͱ͢Δͱɺ τʔλϧͷPDDVSSFODF ΤϯτϩϐʔίʔσΟϯάՄೳͰɺͦͷίϯςΩετ ͷτʔλϧίετ
&YQFSJNFOUT &YQFSJNFOUBM$POUFYU • ࣍ݩͷηϨΫλΛར༻ͨ͠ࡍͷOFXTHBQͷ֬ͷ ਤ
γϯϘϧग़ݱසʹجͮ͘ѹॖ༗ޮੑ
.FBTVSFE*NQSPWFNFOU
࣮ߦ࣌ؒɺϝϞϦ༻ྔɺΫΤϦεϧʔϓοτ • *OUFSQΑΓΫΤϦϨεϙϯε͕ૣ͘ɺѹॖ࠷ྑ ͍ͱ͍͏݁Ռ͕ಘΒΕͨɻ
$0/$-64*0/4"/%'6563&803, ˙$PODMVTJPOT • 1BDLFE "/4ϝΧχζϜʹΑΓɺͭͷҟͳΔख๏Λվળͨ͠ɻ – ࣍ݩίϯςΩετ – ࠷্ҐόΠτϚοϐϯά –
ίϯςΩετϚʔδϯά • લͷ*OUFSQͷϕϯνϚʔΫʹউͬͨɻ • 1BDLFE "/4ͷ࣮0QU1'03&'PQUʹൺͯΫΤϦεϐʔ υʹ͓͍ͯྼ͍ͬͯΔ͕ɺ"/4ʹ·ͩվળͷ༨͕͋Δɻ • ͢Ͱʹ΄ͱΜͲͷQPTUJOHT͕খ͍͞αΠζʹූ߸ԽͰ͖Δ͜ͱΛ֬ ೝͨ͠ɻ ˙'VUVSFXPSL • ෳͷঢ়ଶΛฒߦͯ͠෮߸͢ΔͨΊʹ֦ு͞Εͨ෮߸Խςʔϒϧ͓ Αͼ4*.%ػߏΛ༻͢Δͱɺ෮߸ԽΛഒҎ্ʹ૿Ճͤ͞ΔՄ ೳੑ͕͋Δɻ • ՄมϒϩοΫͷ༻ • ΫΤϦͷ౷ܭใΛར༻ͯ͠ҟͳΔѹॖϝΧχζϜΛมߋ͢Δ