CUCKOO vs BLOOM filter, ó pheirspictíocht Gopher
San alt seo, tá mé ag iarraidh éifeacht scagaire cuach a chur i bhfeidhm agus a thástáil thar scagaire faoi bhláth. (Léigh an post roimhe seo ar Chord DHT, ag cur tábla hash dáilte i bhfeidhm i nGolang)

Réamhrá
Tá struchtúir sonraí dóchúla an-úsáideach, go háirithe nuair a bhíonn tacair mhóra sonraí á bpróiseáil. An chuid is mó de na hamanna, agus iad ag obair ar thaobh na sonraí de rudaí, ba mhaith le ceist shimplí “is é an rud nach bhfuil i láthair” a dhéanamh nó fiosrúchán “an rud atá ann cheana féin” a phróiseáil agus na sonraí fíor-ama á bpróiseáil. Abair gur mhaith leat ceisteanna a fhreagairt i bhfíor-am, cosúil le líon na n-éidí uathúla, na héadanna is minice, má tá ad seirbheáilte cheana féin d'úsáideoir, trí úsáid a bhaint as struchtúir sonraí dóchúla soláthraíonn siad bealach spáis-éifeachtach chun na ceisteanna seo a fhreagairt. Is é an cur chuige tipiciúil maidir le fiosrúcháin den sórt sin ná HashMap nó HashTable a úsáid, nó é a stóráil mar thaisce seachtrach (cosúil le redis), ach tá an fhadhb le tacair shonraí mhóra, ní féidir na struchtúir shimplí sonraí seo a chur i gcuimhne. Seo nuair a thagann struchtúir sonraí dóchúla i bhfeidhm mar gheall ar a gcuid buntáistí spáis agus ama.
Samplaí Úsáid cásanna
- Baineann Google Bigtable, Apache HBase agus Apache Cassandra, agus Postgresql úsáid as scagairí Bloom le háirithintí dioscaí a laghdú do shraitheanna nó colúin nach bhfuil ann. Cuireann seiceálacha costasacha ar dhioscaí go mór le feidhmíocht bunachar sonraí.
- Úsáideann Meánach scagairí Bloom le seiceáil an bhfuil earra molta cheana féin d'úsáideoir
- Úsáideann Ethereum scagairí Bloom chun logaí a aimsiú go tapa ar an Ethereum blockchain
- Úsáideadh brabhsálaí gréasáin Google Chrome chun scagaire Bloom a úsáid chun URLanna mailíseacha a aithint. Seiceáladh aon URL i dtús báire i gcoinne scagaire Bloom áitiúil, agus ní raibh seiceáil iomlán ar an URL a rinneadh (agus thug an t-úsáideoir rabhadh, má thug sé sin toradh dearfach ar ais) má sheol an scagaire Bloom toradh dearfach.
Cad atá i “gCuach”?
Tá scagairí faoi bhláth in a lán áiteanna chun ceisteanna den sórt sin a fhreagairt ar an ardán sonraí. Le déanaí, tháinig mé trasna ar an bpáipéar seo ar scagaire na Cuaiche a ghabh mo spéis. Deir an teideal féin, “Scagaire Cuckoo: Praiticiúil Níos Fearr ná Bloom”, mar sin shocraigh mé é a sheiceáil.

Feabhsaíonn scagairí cuach dearadh an scagaire bhláth trí scriosadh, trí chomhaireamh teoranta, agus trí dóchúlacht dhearfach bhréagach teorantach a thairiscint, agus castacht spáis den chineál céanna a choinneáil ag an am céanna. Baineann siad úsáid as hacaireacht na cuach chun imbhuailtí a réiteach agus go bunúsach is tábla hais cuach dlúth iad.
Tá scagairí cuach agus faoi bhláth úsáideach le haghaidh tástála ballraíochta socraithe nuair a bhíonn méid na sonraí bunaidh mór. Ní úsáideann an bheirt acu ach 7 giotán in aghaidh na hiontrála. Tá siad úsáideach freisin nuair is féidir oibríocht chostasach a sheachaint sula gcuirtear i gcrích í trí thástáil bhallraíochta socraithe. Mar shampla, sula bhfiosraítear bunachar sonraí, is féidir tástáil bhallraíochta socraithe a dhéanamh chun a fháil amach an bhfuil an réad inmhianaithe sa bhunachar sonraí fiú.
Algartam
Paraiméadair an Scagaire: 1. Dhá Fheidhm Hash: h1 agus h2 2. Eagar B le n buicéid. Is é B [i] a thabharfar ar an bhuicéad i-ú Ionchur: L, liosta de na heilimintí atá le cur isteach sa scagaire cuach. Algartam: Cé nach bhfuil L folamh: Lig x a bheith ar an gcéad mhír sa liosta L. Bain x as an liosta. Má tá B [h1 (x)] folamh: áit x i B [h1 (x)] Eile, Má tá B [h2 (x) folamh]: cuir x i B [h2 (x)] Eile: Bíodh y mar an eilimint i B [h2 (x)]. Cosc y go L cuir x i B [h2 (x)]
Cur i bhfeidhm
Is cosúil go bhfuil an cur i bhfeidhm simplí go leor, mar sin shocraigh mé air dul i ngleic leis agus comparáid a dhéanamh idir an éifeachtúlacht spáis / ama a chuirtear i gcomparáid le scagaire faoi bhláth. Is éard atá i gceist le scagaire na Cuaiche ná tábla haca Cuckoo a stórálann na ‘méarloirg’ a cuireadh isteach. Is teaghrán giotán é méarlorg earra a dhíorthaítear as hais na míre sin. Is éard atá i dtábla hash cuach ná raon buicéid ina ndéantar mír atá le cur isteach a mhapáil go dtí dhá bhuicéad fhéideartha bunaithe ar dhá fheidhm hash. Is féidir gach buicéad a chumrú chun líon athraitheach méarlorg a stóráil. De ghnáth, aithnítear scagaire Cuckoo de réir a mhéarloirg agus a mhéid buicéad. Mar shampla, is féidir le (2,4) siopaí scagaire Cuach 2 mhéarloirg fad giotán agus gach buicéad i dtábla haca na Cuaiche suas le 4 mhéarlorg a stóráil.
Cuir isteach
Algartam:
f = méarlorg (x); i1 = hash (x); i2 = i1 sh hash (f);
má tá iontráil folamh ag buicéad [i1] nó buicéad [i2] ansin cuir leis an bhuicéad sin; tuairisceán Arna dhéanamh;
Ní mór // míreanna atá ann cheana a athlonnú; i = roghnaigh i1 nó i2 go randamach; le haghaidh n = 0; n // Meastar go bhfuil Hashtable lán; tuairisceán Teip;Cód:
Cuardaigh
Algartam:
f = méarlorg (x); i1 = hash (x); i2 = i1 sh hash (f);má bhíonn buicéad [i1] nó buicéad [i2] ansin tuairisceán Fíor;ar ais Bréagach;Cód:
Scrios
Algartam:
f = méarlorg (x); i1 = hash (x); i2 = i1 sh hash (f);má bhíonn buicéad [i1] nó buicéad [i2] ansin bain cóip de f ón bhuicéad seo; tuairisceán Fíor;ar ais Bréagach;Cód:
Tástáil Feidhmíochta
Bainim úsáid as leabharlann Will Fitzgerald don tástáil ar Bloom filter. Is é 0.001 an chandam FPP (Dóchúlacht Bréagach Dearfach) a ghlactar le haghaidh scagaire na cuach
Coimpléascacht Spáis
Maidir leis an gcuach agus le scagairí faoi bhláth, déanann siad ar bhealach difriúil ag dóchúlachtaí dearfacha bréige éagsúla. Nuair a bhíonn an dóchúlacht dhearfach bréagach atá ag an scagaire níos lú ná 3% nó cothrom leis, tá níos lú giotán in aghaidh na hiontrála ag scagaire na cuach. Nuair a bhíonn sé níos airde, tá níos lú giotán in aghaidh na hiontrála sa scagaire faoi bhláth.
Coimpléascacht Ama
I hashú na cuach, is cosúil go bhfuil eilimint a chur isteach i bhfad níos measa ná O (1) sa chás is measa mar d'fhéadfadh go leor cásanna le linn imbhuailte, áit a gcaithfimid luach a bhaint chun spás a dhéanamh don luach reatha. Chomh maith leis sin, má tá timthriall ann caithfear an tábla iomlán a athshamhlú.
Mar thoradh ar anailís ama a dhéanamh ar an dá scagaire tá na torthaí seo a leanas:
Le linn an turgnaimh seo (ag cuimhneamh nach féidir mo chód a bharrfheabhsú go hiomlán), is cosúil go ndéanann scagairí Bloom go han-mhaith i gcoimpléasc spáis, rud a fhágann nach bhfuil mórán spáis ann do líon mór míreanna. Is cosúil go bhfeidhmíonn scagaire na cuach níos fearr nuair a chuirtear líon mór míreanna isteach, ach beagán níos moille i gcuardach (amanna cuardaigh) mar gheall ar a chur i bhfeidhm.
Tátal
Ní dhéanfainn taobh le scagaire le moladh, ní dóigh liom go bhfuil a gcásanna úsáide féin ag an mbeirt acu. Ní thacaíonn scagairí Bloom le scriosadh de bharr go bhfuil an t-amú ag cailliúint agus nach féidir teacht leis. Cé go réitíonn scagairí bloom an fhadhb sin, tá scagairí cuach úsáideach sa chás go dteastódh tú a scriosadh. Ar ndóigh, cuireann scagairí Cuach earráid ar fáil nuair a bhíonn an scagaire lán, agus tá buntáistí ag baint leis sin, ach i scagaire Bloom, níl aon smacht ar an acmhainn, ach déanann sé an t-eagar a athrú.
Cód
Tagairtí
- https://brilliant.org/wiki/cuckoo-filter/
- https://www.cs.cmu.edu/~dga/papers/cuckoo-conext2014.pdf
- https://en.wikipedia.org/wiki/Cuckoo_hashing
- https://blog.fastforwardlabs.com/2016/11/23/probabilistic-data-structure-showdown-cuckoo.html
P.S Má fhaigheann tú aon rud cearr leis na tástálacha / cur i bhfeidhm, bíodh leisce ort do mholadh / do thuairimí a fhágáil.