Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa

folasaga

Na ou tuuina atu lenei lipoti i le Igilisi i le GopherCon Russia 2019 konafesi i Moscow ma le gagana Rusia i se feiloaiga i Nizhny Novgorod. O loʻo matou talanoa e uiga i se faʻasinomaga bitmap - e le masani ai nai lo le B-laau, ae e le itiiti ifo le manaia. Fetufaaiga pueina lauga i le konafesi i le gagana Peretania ma tusitusiga i le gagana Rusia.

O le a tatou vaʻavaʻai pe faʻafefea ona galue le faʻasologa o le bitmap, pe a sili atu, pe a sili atu le leaga nai lo isi faʻamatalaga, ma o a tulaga e sili atu le vave nai lo i latou; Se'i o tatou va'ai po'o fea DBMS ta'uta'ua ua iai fa'ailoga fa'asinomaga; Tatou taumafai e tusi a tatou lava tusi ile Go. Ma "mo le suamalie" o le a matou faʻaogaina faletusi ua saunia e fai ai a matou lava faʻamaumauga faʻapitoa faʻapitoa.

Ou te matua faʻamoemoe o aʻu galuega o le a aoga ma manaia mo oe. Alu!

Faatomuaga


http://bit.ly/bitmapindexes
https://github.com/mkevac/gopherconrussia2019

Talofa uma! Ua ta le ono i le afiafi ma ua matou matua vaivai uma lava. Taimi sili e talanoa ai e uiga i le manaia o faʻamatalaga faʻamaumauga o faʻamaumauga, saʻo? Aua e te popole, o le a ou maua ni laina se lua o le source code iinei ma iina. 🙂

E tuuese uma tausuaga, o le lipoti e tumu i faamatalaga, ma e le tele so matou taimi. Ia tatou amata la.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O le asō o le a ou talanoa e uiga i mea nei:

  • o a faasino igoa;
  • o le a le fa'asinomaga o fa'asologa;
  • o fea e fa'aoga ai ma o fea e LE fa'aogaina ai ma aisea;
  • faʻatinoga faigofie ile Alu ma sina tauiviga ma le faʻapipiʻi;
  • e itiiti ifo le faigofie, ae sili atu ona aoga le faʻatinoga i Go assembler;
  • “faafitauli” o fa'ailoga o fa'afanua bitmap;
  • faatinoga o iai nei.

O a la faasino igoa?

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa

O le fa'asinomaga ose fa'asologa o fa'amaumauga tu'ufa'atasi matou te tausia ma fa'afouina fa'aopoopo i fa'amaumauga autu. E faʻaaogaina e faʻavave ai le sailiga. A aunoa ma fa'asino igoa, o le su'esu'ega e mana'omia ai le fa'aogaina atoa o fa'amaumauga (se fa'agasologa e ta'ua o le su'esu'ega atoa), ma o lenei fa'agasologa e iai le lavelave o le algorithmic linear. Ae o fa'amaumauga e masani ona aofia ai le tele o fa'amaumauga ma le lavelave laina e telegese tele. O le mea lelei, tatou te maua se logarithmic pe tumau.

O se autu lavelave tele lenei, tumu i faʻamatalaga ma fefaʻatauaʻiga, ae a maeʻa ona vaʻavaʻai i le tele o tausaga o le atinaʻeina o faʻamaumauga ma suʻesuʻega, ou te naunau e fai atu e naʻo ni nai auala faʻaoga lautele e fatuina ai faʻamaumauga faʻamaumauga.

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa

O le auala muamua o le faʻaitiitiga faʻaitiitiga o le avanoa suʻesuʻe, vaevae le avanoa suʻesuʻe i ni vaega laiti.

E masani ona matou faia lenei mea e faʻaaoga ai ituaiga laau eseese. O se faʻataʻitaʻiga o se pusa tele o mea i totonu o lau kapoti o loʻo i ai pusa laiti o mea e vaevaeina i autu eseese. Afai e te mana'omia ni mea, atonu e te su'eina i totonu o se pusa e fai mai ai "Materials" nai lo le tasi e fai mai "Kuki," sa'o?

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa

O le auala lona lua o le filifili vave lea o le elemene manaʻomia poʻo le vaega o elemene. Matou te faia lenei mea i faʻafanua hash poʻo faʻasologa faʻasolosolo. O le fa'aogaina o fa'afanua hash e talitutusa lava ma le fa'ata'ita'iga muamua, ae nai lo se atigipusa o atigipusa, o lo'o i ai sau pusa tama'i pusa o mea mulimuli i totonu o lau kapoti.

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa

O le auala lona tolu o le faʻaumatiaina lea o le manaʻoga mo suʻesuʻega. Matou te faia lenei mea e faʻaaoga ai le Bloom filters poʻo le cuckoo filters. O mea muamua e tu'u vave mai se tali, e sefe ai oe mai le su'eina.

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa

O le auala mulimuli o le faʻaaogaina atoatoa o le malosi uma o loʻo tuʻuina mai e meafaigaluega faʻaonaponei ia i tatou. O le mea tonu lava lea tatou te faia i fa'asinomaga bitmap. Ioe, pe a faʻaaogaina i nisi taimi tatou te manaʻomia le suʻeina o le faʻasinomaga atoa, ae tatou te faia lelei tele.

E pei ona ou fai atu, o le autu o faʻamaumauga faʻamaumauga e tele ma tumu i fetuunaiga. O lona uiga o nisi taimi e mafai ona tatou faʻaogaina le tele o auala i le taimi e tasi: pe a manaʻomia le faʻavavevaveina o le suʻesuʻega e sili atu, pe afai tatou te manaʻomia le faʻaogaina o ituaiga suʻesuʻega uma.

O le asō o le a ou talanoa e uiga i le sili ona lauiloa o nei mea - bitmap indexes.

O ai a'u e tautala i lenei autu?

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa

Ou te galue o se taʻitaʻi o le 'au i Badoo (atonu e te masani i le isi a matou oloa, Bumble). Ua uma ona i ai le sili atu i le 400 miliona tagata faʻaoga i le lalolagi atoa ma le tele o foliga e filifilia ai le fetaui sili mo i latou. Matou te faia lenei mea i le faʻaaogaina o auaunaga faʻapitoa, e aofia ai faʻasino igoa o bitmap.

O le a la le fa'asinomaga bitmap?

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Bitmap indexes, e pei ona taʻu mai e le igoa, faʻaoga bitmaps poʻo bitsets e faʻatino ai se faʻasino igoa. Mai le va'aiga a le manulele, o lenei fa'asinomaga e aofia ai se tasi po'o le sili atu o mataitusi fa'atusa e fai ma sui o so'o se fa'alapotopotoga (e pei o tagata) ma a latou mea totino po'o fa'amaufa'ailoga (tausaga, lanu mata, ma isi), ma se algorithm e fa'aaoga ai ni fa'agaioiga laiti (MA, PO, LEAI. ) e tali le su'esu'ega.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Ua taʻu mai ia i matou e sili ona fetaui ma faʻatino faʻamatalaga bitmap mo mataupu o loʻo i ai suʻesuʻega e tuʻufaʻatasia fesili i le tele o koluma cardinality maualalo (mafaufau "lanu mata" poʻo le "tulaga faʻaipoipo" faʻatusatusa i se mea e pei o le "mamao mai le taulaga"). Ae o le a ou faʻaalia mulimuli ane latou te galulue lelei mo koluma maualuga maualuga foi.

Se'i o tatou va'ai i le fa'ata'ita'iga sili ona faigofie o le fa'asinomaga o fa'asologa o ata.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Vaai faalemafaufau o loʻo i ai sau lisi o faleaiga a Moscow ma mea faʻapitoa e pei o nei:

  • latalata i le metro;
  • o lo'o i ai le paka ta'avale;
  • ei ai le veranda (e iai le terrace);
  • e mafai ona e fa'aagaga se laulau (talia fa'aagaga);
  • talafeagai mo vegetarians (vegan friendly);
  • taugata (taugata).

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Tatou tu'uina atu i fale'aiga ta'itasi se numera fa'asologa e amata mai i le 0 ma tu'u le manatua mo 6 bitmaps (tasi mo uiga ta'itasi). O le a matou fa'atumuina nei bitmaps e fa'atatau i le fale'aiga e iai lea meatotino pe leai. Afai o le faleaiga 4 o loʻo i ai se faʻaoga, ona faʻapipiʻi lea o le numera 4 i le "i ai se veranda" bitmap i le 1 (afai e leai se veranda, ona 0 lea).
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O lea la ua i ai le fa'asinomaga o le bitmap sili ona faigofie, ma e mafai ona tatou fa'aogaina e tali ai fesili e pei o:

  • “Faaali mai ia te a'u faleaiga e fiafia i mea'ai”;
  • “Faaali mai ia te a’u ni faleaiga taugofie ma se veranda e mafai ona e fa’aagaga ai se laulau.”

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
E faapefea? Se'i tatou va'ai. O le talosaga muamua e matua faigofie lava. Pau lava le mea e tatau ona tatou faia o le ave lea o le “vegetarian friendly” bitmap ma liliu i se lisi o fale'aiga o lo'o fa'ailoa mai ai.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O le talosaga lona lua e fai si lavelave. Matou te manaʻomia le faʻaogaina o le NOT bitmap i luga o le "taugata" bitmap e maua ai se lisi o faleaiga taugofie, ona faʻatasi ai lea ma le "E mafai ona ou tusi se laulau" bitmap ma MA le taunuuga i le "o loʻo i ai se veranda" bitmap. O le fa'ai'uga o le bitmap o le a iai se lisi o fa'alapotopotoga e ausia uma a tatou ta'iala. I lenei faʻataʻitaʻiga, e naʻo le Yunost faleaiga.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
E tele a'oa'oga o lo'o aofia ai, ae 'aua le popole, o le a tatou va'ai i le tulafono i se taimi vave.

O fea o lo'o fa'aogaina ai fa'asino igoa o bitmap?

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Afai e te Google bitmap index, 90% o tali o le a fesoʻotaʻi ma Oracle DB i se tasi auala poʻo se isi. Ae atonu e lagolagoina foi e isi DBMS se mea manaia, saʻo? Pe lava.

Sei o tatou agai i le lisi o tagata masalomia autu.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
MySQL e leʻi lagolagoina faʻailoga bitmap, ae o loʻo i ai se Fautuaga e fautuaina ai le faʻaopoopoina o lenei filifiliga (https://dev.mysql.com/worklog/task/?id=1524).

E le lagolagoina e le PostgreSQL fa'asino igoa o bitmap, ae fa'aaoga mataitusi faigofie ma fa'agaioiga laiti e tu'ufa'atasia ai su'esu'ega i le tele o isi fa'asino igoa.

Tarantool o loʻo i ai faʻasino igoa ma lagolagoina suʻesuʻega faigofie i luga oi latou.

O Redis e iai ni fa'ailoga faigofie (https://redis.io/commands/bitfield) e aunoa ma le tomai e suʻe ai.

MongoDB e leʻi lagolagoina faʻasino igoa o bitmap, ae o loʻo i ai foi se Fautuaga e fautua mai ai e faʻaopoopo lenei filifiliga. https://jira.mongodb.org/browse/SERVER-1723

Elasticsearch fa'aoga bitmaps i totonu (https://www.elastic.co/blog/frame-of-reference-and-roaring-bitmaps).

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa

  • Ae ua sau se tuaoi fou i lo matou fale: Pilosa. Ole fa'amaumauga fou lea e le'i feso'ota'i na tusia ile Go. O lo'o i ai na'o fa'asinomaga bitmap ma fa'avae mea uma i luga. O le a tatou talanoa i ai i se taimi mulimuli ane.

Fa'atinoga i Go

Ae aiseā e seasea faʻaaogaina ai faʻamatalaga bitmap? A'o le'i taliina lenei fesili, ou te fia fa'aali atu ia te oe pe fa'apefea ona fa'atino se fa'ailoga fa'ailoga faigofie tele i le Go.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Bitmaps e na'o ni vaega o fa'amaumauga. I le Go, tatou fa'aoga fasi byte mo lea.

E tasi le matou bitmap mo le tasi faleaiga uiga, ma o fasi fanua taitasi i le bitmap o loʻo faʻaalia ai pe i ai i se faleaiga faapitoa lenei meatotino pe leai.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Matou te manaʻomia ni galuega fesoasoani se lua. O le tasi o le a faʻaaogaina e faʻatumu ai a tatou bitmaps i faʻamatalaga faʻafuaseʻi. Fa'afuase'i, ae fa'atasi ai ma se fa'ailoga e iai mea totino ta'itasi ile fale'aiga. Mo se faʻataʻitaʻiga, ou te talitonu o loʻo i ai ni nai faleaiga i Moscow e le mafai ona e faʻapolopolo se laulau, ma e foliga mai ia te aʻu e tusa ma le 20% o faʻalapotopotoga e talafeagai mo vegetarians.

O le galuega lona lua o le a liua ai le bitmap i se lisi o faleaiga.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Ina ia tali le fesili "Faaali mai ia te aʻu faleaiga taugofie o loʻo i ai se patio ma mafai ona faʻasao," matou te manaʻomia ni gaioiga se lua: LEAI ma le MA.

E mafai ona fa'afaigofie la tatou fa'ailoga e ala i le fa'aogaina o le fa'aoga sili atu ona lavelave MA LE LEO.

E i ai a matou galuega mo nei gaioiga taitasi. O i latou uma e alu i fasi pepa, ave elemene tutusa mai taʻitasi, tuʻufaʻatasia i latou i sina gaioiga ma tuʻu le taunuʻuga i le fasi pepa.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Ma o lea e mafai ona tatou faʻaogaina a tatou bitmaps ma galuega e tali ai le suʻesuʻega.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
E le maualuga tele le fa'atinoga, e ui lava ina faigofie tele galuega ma fa'asaoina le tele o tupe e ala i le le toe fa'afo'iina o se vaega fou i taimi uma e vala'au ai le galuega.

Ina ua uma ona fai sina faʻamatalaga faʻatasi ma le pprof, na ou matauina o le Go compiler o loʻo misi se tasi e sili ona faigofie ae taua tele: faʻaogaina o galuega.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O le mea moni o le Go compiler e matua fefe lava i matasele e alu i fasi pepa, ma e matua'i musu e fa'aogaina galuega o lo'o i ai ni matasele.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Ae ou te le fefe ma e mafai ona ou faavalea le tagata faʻapipiʻi e ala i le faʻaaogaina o le goto nai lo se matasele, pei o aso tuai.

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa

Ma, e pei ona mafai ona e vaʻaia, o le taimi nei o le a faʻapipiʻi fiafia le tagata faʻapipiʻi a tatou galuega! O le iʻuga, matou te mafaia ona faʻasaoina pe a ma le 2 microseconds. E leai se leaga!

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa

E faigofie ona va'ai le fagu lona lua pe a e va'ava'ai toto'a ile fa'aputuga fa'atasi. Na fa'aopoopoina e le tagata tu'ufa'atasia se siaki tuaoi i totonu lava o le matou matasele sili ona manaia. O le mea moni o le Go o se gagana saogalemu, e fefe le tagata faʻapipiʻi ona o aʻu finauga e tolu (tolu fasi pepa) e eseese le lapopoa. A uma mea uma, ona i ai lea o se faʻataʻitaʻiga e mafai ona tupu ai se mea e taʻua o le buffer overflow.

Se'i o tatou fa'amautinoa atu i le tagata fa'apipi'i e ala i le fa'aali atu o fasi pepa uma e tutusa le lapo'a. E mafai ona tatou faia lenei mea e ala i le faʻaopoopoina o se siaki faigofie i le amataga o la tatou galuega.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
I le vaʻaia o lenei mea, o le tuʻufaʻatasiga e faʻamalo fiafia le siaki, ma matou faʻamutaina se isi 500 nanoseconds.

Pa'u tetele

Lelei, na mafai ona matou faʻaogaina nisi faʻatinoga mai la matou faʻatinoga faigofie, ae o lenei taunuuga e sili atu le leaga nai lo mea e mafai i meafaigaluega o loʻo iai nei.

Pau lava le mea matou te faia o faʻagaioiga faʻapitoa, ma o matou tagata faʻapipiʻi e faʻatino lelei. Ae, o le mea e leaga ai, matou te "fafaga" la matou gaosiga i ni vaega laiti o galuega. O a matou galuega e fa'atino galuega i luga o le byte-by-byte fa'avae. E faigofie lava ona matou faʻaogaina la matou code e galulue ai i pusi 8-byte e faʻaaoga ai fasi UInt64.

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa

E pei ona e va'aia, o lenei suiga la'ititi na fa'avalu taimi na fa'avavevave ai le tatou polokalame e ala i le fa'ateleina o le aofa'i i le valu taimi. O le mauaina e mafai ona faapea e laina.

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa

Fa'atinoga i assembler

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Ae e le o le iuga lea. E mafai ona galulue a matou masini faʻatasi ma pusi o le 16, 32 ma e oʻo lava i le 64 paita. O ia gaioiga "lautele" e taʻua o faʻamatalaga e tasi e tele faʻamatalaga (SIMD; tasi faʻatonuga, tele faʻamaumauga), ma o le faagasologa o le suiga o le code ina ia faʻaaogaina ia gaioiga e taʻua o le vectorization.

Ae paga lea, o le Go compiler e mamao mai le lelei i le vectorization. I le taimi nei, na o le pau lava le auala e faʻaogaina ai le Go code o le ave ma tuʻu nei gaioiga ma le lima e faʻaaoga ai le Go assembler.

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa

Go assembler o se manu ese. Atonu e te iloa o le gagana fa'apotopotoga o se mea e matua'i feso'ota'i ma le fausaga o le komepiuta o lo'o e tusi ai, ae e le o le tulaga lena i Go. O le Go assembler e sili atu ona pei o se IRL (gagana fa'atusa) po'o le gagana vaeluaga: e toetoe lava a tuto'atasi tulaga. Na faia e Rob Pike se faatinoga sili ona lelei lipoti i lenei autu i ni nai tausaga ua mavae i GopherCon i Denver.

E le gata i lea, e faʻaaogaina e Go se Fuafuaga 9 e le masani ai, e ese mai le AT&T ma le Intel masani e talia.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
E saogalemu le fai atu o le tusitusi Go assembler i lima e le o se mea e sili ona malie.

Ae, o le mea e lelei ai, ua i ai ni meafaigaluega maualuga se lua e fesoasoani ia i matou e tusi ai Go assembler: PeachPy ma avo. O fa'aoga uma e lua e fa'atupuina ai le Go assembler mai le tulaga maualuga o lo'o tusia i le Python ma le Go, i le faasologa.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O nei mea aoga e faʻafaigofie mea e pei o le resitalaina o le vaevaega, tusitusi faʻamau, ma masani ona faʻafaigofie le faʻagasologa o le ulufale atu i le lalolagi o polokalame faʻapotopotoga i Go.

O le a matou fa'aogaina le avo, o lea e toetoe lava a avea a matou polokalame ma polokalame masani a Go.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O le fa'ata'ita'iga sili lea ona faigofie o se polokalame avou. E i ai la matou galuega autu (), lea e faʻamatalaina i totonu ia te ia le Add() galuega, o lona uiga o le faʻaopoopoina o numera lua. O lo'o i ai galuega fesoasoani iinei e maua ai fa'amaufa'ailoga i le igoa ma maua se tasi o tusi resitala e leai se totogi ma talafeagai. O fa'agaioiga ta'itasi e iai le galuega fa'atatau ile avo, e pei ona va'aia ile ADDQ. Mulimuli ane, matou te vaʻai i se fesoasoani fesoasoani mo le teuina o le tau e maua.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
E ala i le valaʻau i le alu faʻatupu, o le a matou faʻatinoina le polokalame i luga o le avo ma o se taunuuga, e lua faila o le a gaosia:

  • add.s faʻatasi ai ma le faʻailoga e maua i le Go assembler;
  • stub.go ma ulutala galuega e faʻafesoʻotaʻi ai lalolagi e lua: Alu ma assembler.

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O lea la ua tatou va'ai i mea e fai e avou ma fa'afefea, se'i o tatou va'ai i a tatou galuega. Na ou faʻatinoina uma scalar ma vector (SIMD) versions o galuega.

Se'i tatou va'ai muamua i fa'aliliuga scalar.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
E pei o le faʻataʻitaʻiga muamua, o loʻo matou talosagaina se tusi resitala faʻapitoa e leai se totogi ma aoga, matou te le manaʻomia le faʻatulagaina o offsets ma lapopoa mo finauga. e faia e avo ia mea uma mo i tatou.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Sa masani ona matou faʻaogaina igoa ma goto (poʻo oso) e faʻaleleia ai le faʻatinoga ma faʻasese le Go compiler, ae o lea ua matou faia mai le amataga. O le manatu o le taamilosaga o se manatu maualuga maualuga. I le assembler, e na'o matou igoa ma osooso.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O le tulafono o lo'o totoe e tatau ona masani ma malamalama. Matou te faʻataʻitaʻiina se matasele ma faʻailoga ma oso, ave se fasi faʻamaumauga mai a matou fasi pepa e lua, tuʻufaʻatasia i latou i sina gaioiga (AE LEAI i lenei tulaga) ona tuʻu lea o le iʻuga i totonu o le fasi pepa. O mea uma.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O le mea lea e foliga mai ai le code assembler mulimuli. Matou te le tau fa'atatauina fa'asili ma lapopo'a (fa'ailoga i le lanu meamata) pe siaki tusi resitala na fa'aaogaina (fa'ailoga i le mumu).
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Afai tatou te faʻatusatusa le faʻatinoga o le faʻatinoga o le gagana faʻapotopotoga ma le faʻatinoga o le faʻatinoga sili ona lelei i Go, o le a tatou vaʻaia e tutusa. Ma o lenei ua faamoemoeina. A uma, matou te leʻi faia se mea faʻapitoa - naʻo matou toe faia le mea e fai e le Go compiler.

O le mea e leaga ai, e le mafai ona matou faʻamalosia le tagata faʻapipiʻi e faʻapipiʻi a matou galuega o loʻo tusia i le gagana faʻapotopotoga. O le Go compiler i le taimi nei e le o iai se uiga faʻapea, e ui lava o loʻo i ai se talosaga e faʻaopoopo mo sina taimi.

O le mea lea e le mafai ai ona maua soʻo se faʻamanuiaga mai galuega laiti i le gagana faʻapotopotoga. Matou te manaʻomia le tusiaina o galuega tetele, pe faʻaaoga le numera math/bits fou, poʻo le pasi le gagana assembler.

Se'i o tatou va'ava'ai i le fa'asologa o le vector oa tatou galuega.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Mo lenei faʻataʻitaʻiga, na ou filifili e faʻaaoga le AVX2, o lea o le a matou faʻaogaina gaioiga e faʻaogaina i luga o 32-byte pusi. O le fausaga o le code e talitutusa lava ma le scalar version: faʻapipiʻiina o tapulaʻa, talosaga mo se resitala faʻasoa saoloto, ma isi.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O se tasi o fa'afouga o le fa'aogaina o fa'agaioiga ve'e lautele fa'apitoa fa'apitoa resitara lautele. I le tulaga o pusi 32-byte, o resitara nei o loʻo faʻapipiʻiina i le Y. O le mea lea e te vaʻai ai i le YMM () galuega i le code. Afai o loʻo ou faʻaogaina le AVX-512 ma pusi 64-bit, o le prefix o le Z.

O le fa'afouga lona lua na ou filifili ai e fa'aoga se fa'ata'ita'iga e ta'ua o le fa'alatalafu fa'aalatalafu, o lona uiga o le faia ma le lima fa'agaoioiga e valu a'o le'i oso i le amataga o le matasele. O lenei faʻataʻitaʻiga e faʻaitiitia ai le numera o lala i totonu o le code, ma faʻatapulaʻaina i le numera o tusi resitala e maua fua.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Ia, ae faapefea le faatinoga? E aulelei o ia! Na matou ausia se saoasaoa e tusa ma le fitu taimi faʻatusatusa i le Go solution sili. Matagofie, sa'o?
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Ae e oʻo lava i lenei faʻatinoga e mafai ona faʻavaveina e ala i le faʻaaogaina o le AVX-512, prefetching poʻo se JIT (naʻo-i-taimi tuʻufaʻatasia) mo le faʻatulagaina o fesili. Ae e mautinoa lava o se autu lea mo se lipoti ese.

Fa'afitauli i fa'asinomaga bitmap

O lea la ua uma ona tatou vaʻavaʻai i se faʻatinoga faigofie o se faʻailoga bitmap i Go ma se mea e sili atu ona aoga i le gagana faʻapotopotoga, seʻi o tatou talanoa mulimuli pe aisea e seasea faʻaaogaina ai faʻamatalaga bitmap.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O pepa tuai o loʻo taʻua ai ni faʻafitauli se tolu i faʻamatalaga bitmap, ae o pepa fou ma ou te finau e le o toe talafeagai. O le a tatou le maulu loloto i nei faafitauli taitasi, ae o le a tatou tilotilo i ai i se tulaga papa'u.

O le faʻafitauli o le maualuga o le cardinality

O lea la, ua taʻu mai ia i matou o faʻamatalaga bitmap e talafeagai mo fanua e maualalo le cardinality, o lona uiga, oi latou e itiiti ni tau (mo se faʻataʻitaʻiga, itupa poʻo lanu mata), ma o le mafuaʻaga o le faʻatusa masani o ia fanua (tasi. bit i le tau) i le tulaga o le cardinality maualuga, o le a tele naua avanoa ma, e le gata i lea, o nei bitmap indexes o le a le lelei (seasea) faʻatumu.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O nisi taimi e mafai ona tatou faʻaaogaina se faʻatusa ese, e pei o le tulaga masani tatou te faʻaaogaina e sui ai numera. Ae o le oʻo mai o algorithms compression na suia mea uma. I le tele o tausaga ua tuanaʻi, ua maua mai e saienitisi ma tagata suʻesuʻe se numera tele o algorithms compression mo bitmaps. O lo latou aoga tele o le leai lea o se mea e mana'omia e fa'amalo ai bitmaps e fa'atino ai galuega fa'atino - e mafai ona tatou fa'atino sa'o fa'agaioiga i luga o ata fa'apipi'i.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Talu ai nei, ua amata ona aliali mai auala faʻapipiʻi, e pei o bitmaps gogo. Latou te fa'aogaina i le taimi lava e tasi ni fa'aaliga eseese se tolu mo bitmaps - bitmaps lava ia, arrays ma mea e ta'ua o bit run - ma paleni i le va oi latou e fa'ateleina ai le fa'atinoga ma fa'aitiitia le taumafaina o mafaufauga.

E mafai ona e mauaina ni ata fa'agogo i fa'aoga sili ona ta'uta'ua. O loʻo i ai se numera tele o faʻatinoga mo le tele o gagana polokalame, e aofia ai le sili atu ma le tolu faʻatinoga mo Go.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O le isi auala e mafai ona fesoasoani ia i tatou e feagai ma le maualuga o le cardinality e taʻua o le binning. Vaai faalemafaufau e iai sau fanua e fa'atusalia ai le maualuga o se tagata. O le maualuga o se numera opeopea, ae tatou tagata e le mafaufau i ai i lena auala. Mo matou e leai se eseesega i le va o le maualuga 185,2 cm ma le 185,3 cm.

E foliga mai e mafai ona tatou faʻavasega tutusa tutusa i vaega i totonu ole 1 cm.

Ma afai tatou te iloa foi e toaitiiti tagata e pupuu nai lo le 50 cm ma maualuga atu nai lo le 250 cm, ona mafai lea ona tatou liliuina se fanua ma le cardinality e le gata i totonu o se fanua ma se cardinality e tusa ma le 200 tau.

Ioe, pe a manaʻomia, e mafai ona tatou faia se faʻaopoopoga faʻaopoopo mulimuli ane.

Fa'afitauli Maualuga Maualuga

O le isi fa'afitauli i fa'ailoga bitmap o le fa'afouina lea e mafai ona taugata tele.

O fa'amaumauga e tatau ona mafai ona fa'afou fa'amaumauga a'o ono fia selau isi fesili o lo'o su'eina fa'amaumauga. Matou te manaʻomia loka e aloese ai mai faʻafitauli i le faʻaogaina faʻatasi o faʻamatalaga poʻo isi faʻafitauli faʻasoa. Ma o le mea e tasi le loka tele, o loʻo i ai se faʻafitauli - loka finauga, pe a avea lenei loka ma se fagu.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O lenei faʻafitauli e mafai ona foia pe faʻafefeteina e ala i le faʻaogaina o le sharding poʻo le faʻaogaina o faʻamatalaga faʻasologa.

Sharding o se mea faigofie ma lauiloa. E mafai ona e fa'asoa se fa'asinomaga bitmap e pei ona e faia i isi fa'amatalaga. Nai lo o le tasi loka tele, o le ae maua se faaputuga o tamai loka ma faapea ona aveese ai le loka finauga.

O le auala lona lua e foia ai le faʻafitauli o le faʻaaogaina lea o faʻamatalaga faʻasologa. E mafai ona i ai sau kopi se tasi o le faasino igoa e te fa'aogaina mo le su'esu'eina po'o le faitau, ma le tasi e te fa'aaogaina mo le tusitusi po'o le fa'afouina. Ma e tasi i se vaitaimi patino (mo se faʻataʻitaʻiga, tasi i le 100 ms poʻo le 500 ms) e te faʻaluaina ma fesuiaʻi. O le mea moni, o lenei faiga e na'o le fa'aogaina i tulaga e mafai ai e lau talosaga ona fa'atautaia se fa'asinomaga su'esu'e laititi.

O nei auala e lua e mafai ona fa'aoga i le taimi e tasi: e mafai ona e maua se fa'ailoga fa'avasegaina.

Fesili e sili atu ona lavelave

O le fa'afitauli mulimuli i fa'asinomaga bitmap o lo'o ta'u mai ia i matou e le'o fetaui lelei mo ituaiga fa'alavelave lavelave o fesili, e pei o fesili fa'avaitaimi.

Ioe, afai e te mafaufau i ai, o gaioiga laiti e pei o AND, OR, ma isi. e le fetaui lelei mo fesili a la "Faaali mai ia te aʻu faletalimalo ma le tau o potu mai le 200 i le 300 tala i le po."
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O se vaifofo fa'atauva'a ma sili ona le atamai o le ave lea o fa'ai'uga mo tau talā ta'itasi ma tu'ufa'atasia i se fa'agaioiga OR.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O se fofo e sili atu ona lelei o le fa'aogaina lea o le fa'avasegaga. Mo se faʻataʻitaʻiga, i vaega o le 50 tala. O lenei mea o le a faatelevaveina ai le matou faagasologa i le 50 taimi.

Ae o le faʻafitauli e faigofie foi ona foia e ala i le faʻaaogaina o se vaaiga na faia faapitoa mo lenei ituaiga o talosaga. I pepa fa'asaienisi e ta'ua o fa'asologa o fa'ailoga bitmaps.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
I lenei faʻataʻitaʻiga, matou te le naʻo le setiina o se mea e tasi mo se tau (mo se faʻataʻitaʻiga, 200), ae seti lenei tau ma mea uma e maualuga atu. 200 ma luga atu. E tutusa mo 300: 300 ma luga atu. Ma faapena atu ai lava.

I le fa'aogaina o lenei fa'atusa, e mafai ona tatou taliina lea ituaiga o su'esu'ega e ala i le fa'asolosolo fa'alua o le fa'asino. Muamua, o le a matou maua se lisi o faletalimalo e maualalo le tau o le potu poʻo le $300, ona matou aveese lea mai i latou e maualalo le tau o le potu pe $199. Sauni.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O le a e ofo, ae e oʻo lava i geoqueries e mafai ona faʻaogaina faʻasino igoa bitmap. O le togafiti o le fa'aogaina lea o se fa'atusa fa'atusa o lo'o si'omia ai lau fa'amaopoopo ma se fa'atusa fa'atusa. Mo se faʻataʻitaʻiga, S2 mai Google. O le ata e tatau ona mafai ona faʻatusalia i foliga o ni laina felavasaʻi se tolu pe sili atu e mafai ona faanumera. O le auala lea e mafai ai ona tatou liliu a tatou geoquery i ni fesili "i luga o le va" (i luga o nei laina faanumera).

Sauni fofo

Ou te faʻamoemoe ou te fiafia ia te oe ma o loʻo i ai nei se isi meafaigaluega aoga i lau auupega. Afai e te manaʻomia le faia o se mea faʻapenei, o le a e iloa le auala e te vaʻai ai.

Ae ui i lea, e le o tagata uma e maua le taimi, onosaʻi, poʻo ni punaoa e fatu ai faʻamatalaga bitmap mai le sasa. Aemaise lava e sili atu le maualuga, faʻaaogaina SIMD, mo se faʻataʻitaʻiga.

O le mea e laki ai, o lo'o i ai le tele o fofo ua saunia e fesoasoani ia te oe.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa

Bitmaps gogo

Muamua, o loʻo i ai le potutusi bitmaps tutusa lea ua uma ona ou talanoa i ai. O lo'o i ai mea uma e mana'omia ma fa'agaoioiga e te mana'omia e fai ai se fa'asinomaga uma o le bitmap.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O le mea e leaga ai, i le taimi nei, e leai se tasi o faʻatinoga Go e faʻaaogaina le SIMD, o lona uiga o faʻatinoga Go e itiiti ifo le faʻatinoina nai lo C faʻatinoga, mo se faʻataʻitaʻiga.

Pilosa

O le isi oloa e mafai ona fesoasoani ia te oe o le Pilosa DBMS, lea, o le mea moni, e naʻo faʻamatalaga faʻasologa o ata. O se fofo fou lenei, ae o le manumalo i loto i le saoasaoa tele.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
E fa'aaoga e Pilosa ia bitmaps i totonu ma tu'uina atu ia te oe le tomai e fa'aoga ai, fa'afaigofie ma fa'amatala mea uma na ou talanoa i ai i luga: fa'avasegaina, fa'asologa o va'aiga bitmaps, le manatu o se fanua, ma isi.

Se'i va'ai vave i se fa'ata'ita'iga o le fa'aogaina o Pilosa e tali ai se fesili ua e masani ai.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
O le faʻataʻitaʻiga e talitutusa lava ma le mea na e vaʻaia muamua. Matou te fatuina se tagata faʻatau i le Pilosa server, fatuina se faasino igoa ma fanua talafeagai, ona faʻatumu lea o matou fanua i faʻamatalaga faʻafuaseʻi ma faʻalavelave ma, mulimuli ane, faʻatino le fesili masani.

A maeʻa lena, matou te faʻaogaina le NOT i luga o le fanua "taugata", ona faʻafesoʻotaʻi lea o le iʻuga (poʻo le MA) ma le "terrace" fanua ma faʻatasi ai ma le "faʻasao" fanua. Ma le mea mulimuli, tatou te maua le iuga mulimuli.
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Ou te faʻamoemoe tele i le lumanaʻi o le a faʻaalia foi lenei ituaiga faʻailoga fou i DBMS pei o MySQL ma PostgreSQL - bitmap indexes .
Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa

iʻuga

Bitmap fa'asino igoa ile Alu: su'esu'e ile saoasaoa
Afai e te le'i moe, fa'afetai. Sa tatau ona ou talanoa puupuu i le tele o mataupu ona o le utiuti o le taimi, ae ou te faamoemoe sa aoga le lauga ma atonu foi e faaosofia ai.

Bitmap index e lelei ona iloa, tusa lava pe e te le manaʻomia i le taimi nei. Tuu i latou e avea ma se isi meafaigaluega i lau pusa meafaigaluega.

Ua matou va'ava'ai i togafiti fa'atinoga eseese mo Go ma mea e le'o lelei ona taulimaina e le Go compiler. Ae e matua aoga lava mo Go programmer uma e iloa.

Na o le pau lena o le mea sa ou manao e ta'u atu ia te oe. Fa'afetai!

puna: www.habr.com

Faaopoopo i ai se faamatalaga