Mokhoa oa ho sebetsa ka litaba tsa likamano (Karolo ea 1)

Hey Habr! Ke fana ka tlhokomelo ea hau phetolelo ea sehlooho
"Nalane ea likamano e sebetsa joang".

Ha ho tluoa ho li-database tsa likamano ha ke khone ho thusa empa ke nahana hore ho na le ntho e haellang. Li sebelisoa hohle. Ho na le li-database tse ngata tse fapaneng tse fumanehang, ho tloha ho SQLite e nyane le e sebetsang ho isa ho Teradata e matla. Empa ho na le lingoliloeng tse 'maloa feela tse hlalosang hore na database e sebetsa joang. U ka ipatla u sebelisa "howdoesarelationaldatabasework" ho bona hore na ho na le liphetho tse fokolang hakae. Ho feta moo, lihlooho tsena li khutšoanyane. Haeba u batlana le litheknoloji tsa morao-rao tse buzzy (BigData, NoSQL kapa JavaScript), u tla fumana lingoloa tse tebileng tse hlalosang hore na li sebetsa joang.

Na li-database tsa likamano ke tsa khale haholo ebile lia tena hore li ka hlalosoa ka ntle ho lithuto tsa univesithi, lipampiri tsa lipatlisiso le libuka?

Mokhoa oa ho sebetsa ka litaba tsa likamano (Karolo ea 1)

Joaloka moqapi, ke hloile ho sebelisa ntho eo ke sa e utloisiseng. 'Me haeba li-database li sebelisitsoe lilemo tse fetang 40, ho tlameha ho ba le lebaka. Ho theosa le lilemo, ke qetile lihora tse makholo ho utloisisa mabokose ana a makatsang ao ke a sebelisang letsatsi le letsatsi. Relations Databases e thahasellisa haholo hobane ba e thehiloeng holim'a maikutlo a molemo le a ka sebelisoang hape. Haeba u thahasella ho utloisisa database, empa ha ho mohla u kileng ua ba le nako kapa tšekamelo ea ho hlahloba sehlooho sena se pharaletseng, u lokela ho natefeloa ke sengoloa sena.

Leha sehlooho sa sengoloa sena se hlakile, sepheo sa sengoloa sena ha se ho utloisisa mokhoa oa ho sebelisa database. Ka hona, o tlameha ho tseba ho ngola kopo e bonolo ea khokahano le lipotso tsa mantlha MOKHOA; ho seng joalo u ka 'na ua se ke ua utloisisa sehlooho sena. Ke eona feela ntho eo u lokelang ho e tseba, ke tla hlalosa tse ling.

Ke tla qala ka tse ling tsa motheo tsa mahlale a khomphutha, joalo ka ho rarahana ha nako ea li-algorithms (BigO). Kea tseba hore ba bang ba lōna ba hloile khopolo ena, empa ntle le eona u ke ke ua khona ho utloisisa lintho tse rarahaneng tse ka hare ho database. Kaha ena ke taba e kholo, Ke tla tsepamisa maikutlo ho seo ke nahanang hore se bohlokoa: kamoo database e sebetsang kateng SQL patlisiso. Ke tla tsebisa feela likhopolo tsa motheo tsa databasee le hore qetellong ea sengoloa u be le mohopolo oa se etsahalang tlas'a hood.

Kaha sena ke sengoloa se selelele le sa tekheniki se kenyelletsang li-algorithms tse ngata le meaho ea data, iphe nako ea ho e bala. Likhopolo tse ling li ka ba thata ho utloisisa; o ka di tlola mme o ntse o fumana mohopolo o akaretsang.

Bakeng sa tsebo e eketsehileng har'a lōna, sengoloa sena se arotsoe likarolo tse 3:

  • Kakaretso ea likarolo tsa database tsa boemo bo tlase le bo phahameng
  • Kakaretso ea Ts'ebetso ea Ntlafatso ea Lipotso
  • Kakaretso ea Tsamaiso ea Transaction le Buffer Pool

Khutlela ho lintho tsa motheo

Lilemong tse fetileng (ka har'a sehlopha sa linaleli se hole, se hole ...), bahlahisi ba ne ba tlameha ho tseba hantle palo ea ts'ebetso eo ba e ngotseng. Ba ne ba tseba li-algorithms tsa bona le lits'ebetso tsa data ka hlooho hobane ba ne ba sa khone ho senya CPU le mohopolo oa likhomphutha tsa bona tse liehang.

Karolong ena, ke tla u hopotsa tse ling tsa likhopolo tsena kaha li bohlokoa ho utloisisa database. Ke tla boela ke hlahise mohopolo index ea database.

O(1) vs O(n2)

Matsatsing ana, bahlahisi ba bangata ha ba tsotelle ho rarahana ha nako ea li-algorithms ... 'me ba nepile!

Empa ha o sebetsana le lintlha tse ngata (ha ke bue ka likete) kapa haeba u ntse u loana ka milliseconds, ho ba bohlokoa ho utloisisa khopolo ena. 'Me joalo ka ha u ka inahanela, li-database li tlameha ho sebetsana le maemo ka bobeli! Ha ke na ho etsa hore u qete nako e eketsehileng ho feta kamoo ho hlokahalang ho utloisisa ntlha. Sena se tla re thusa ho utloisisa mohopolo oa ntlafatso e thehiloeng ho litšenyehelo hamorao (ditjeho thehiloeng gogolo).

Mohopolo

Nako e rarahaneng ea algorithm sebelisoa ho bona hore na algorithm e tla nka nako e kae ho phethela palo e fanoeng ea data. Ho hlalosa ho rarahana hona, re sebelisa notation ea lipalo e kholo ea O. Notion ena e sebelisoa le ts'ebetso e hlalosang hore na algorithm e hloka ts'ebetso e kae bakeng sa palo e fanoeng.

Ka mohlala, ha ke re "algorithm ena e na le ho rarahana O(some_function())", ho bolela hore algorithm e hloka ts'ebetso ea some_function(a_certain_amount_of_data) ho sebetsana le palo e itseng ea data.

Kahoo Ha se bongata ba data bo bohlokoa**, ho seng joalo ** kamoo palo ea ts'ebetso e eketsehang ka ho eketseha ha molumo oa data. Ho rarahana ha nako ha ho fane ka palo e nepahetseng ea ts'ebetso, empa ke mokhoa o motle oa ho hakanya nako ea ts'ebetso.

Mokhoa oa ho sebetsa ka litaba tsa likamano (Karolo ea 1)

Ho graph ena u ka bona palo ea ts'ebetso khahlano le palo ea data e kentsoeng bakeng sa mefuta e fapaneng ea mathata a nako ea algorithm. Ke sebelisitse sekala sa logarithmic ho li bontša. Ka mantsoe a mang, palo ea data e eketseha ka potlako ho tloha ho 1 ho isa ho limilione tse likete tse 1. Re ka bona hore:

  • O (1) kapa ho rarahana ho sa khaotseng ho lula ho le teng (ho seng joalo ho ke ke ha bitsoa ho rarahana ho sa feleng).
  • O(kena(n)) e lula e le tlase esita le ka libilione tsa data.
  • Bothata bo boholo - O(n2), moo palo ea ts'ebetso e holang ka potlako.
  • Mathata a mang a mabeli a eketseha ka potlako.

mehlala

Ka palo e nyane ea data, phapang lipakeng tsa O(1) le O(n2) ha e na thuso. Mohlala, ha re re u na le algorithm e hlokang ho sebetsa likarolo tse 2000.

  • Algorithm ea O (1) e tla u jella ts'ebetso e le 'ngoe
  • Algorithm ea O(log(n)) e tla u jella lits'ebetso tse 7
  • Algorithm ea O(n) e tla u jella lits'ebetso tse 2
  • Algorithm ea O(n*log(n)) e tla u jella lits'ebetso tse 14
  • Algorithm ea O(n2) e tla u jella ts'ebetso ea 4

Phapang pakeng tsa O(1) le O(n2) e bonahala e le kholo (lits'ebetso tse limilione tse 4) empa u tla lahleheloa ke boholo ba 2 ms, e le nako ea ho panya mahlo. Ehlile, li-processor tsa sejoale-joale li ka sebetsa makholo a limilione a ts'ebetso motsotsoana. Ke ka lebaka leo ts'ebetso le ntlafatso e seng taba mererong e mengata ea IT.

Joalokaha ke boletse, ho ntse ho le bohlokoa ho tseba mohopolo ona ha o sebetsa ka bongata bo boholo ba data. Haeba lekhetlong lena algorithm e tlameha ho sebetsana le likarolo tse 1 (tse seng bokaalo bakeng sa database):

  • Algorithm ea O (1) e tla u jella ts'ebetso e le 'ngoe
  • Algorithm ea O(log(n)) e tla u jella lits'ebetso tse 14
  • Algorithm ea O(n) e tla u jella ts'ebetso ea 1
  • Algorithm ea O(n*log(n)) e tla u jella lits'ebetso tse 14.
  • Algorithm ea O(n2) e tla u jella ts'ebetso ea 1

Ha ke so etse lipalo, empa nka re ka algorithm ea O(n2) u na le nako ea ho noa kofi (esita le tse peli!). Haeba o eketsa 0 ho bophahamo ba data, o tla ba le nako ea ho robala.

Ha re keneng botebong

Bakeng sa boitsebiso:

  • Ponahalo e ntle ea tafole ea hash e fumana karolo ho O(1).
  • Ho batla sefate se leka-lekaneng ho hlahisa litholoana ho O(log(n)).
  • Ho batla sehlopha ho hlahisa liphetho ho O(n).
  • Li-algorithms tsa ho hlopha tse ntle ka ho fetisisa li na le mathata a O(n*log(n)).
  • Algorithm e mpe ea ho hlopha e na le ho rarahana O(n2).

Tlhokomeliso: Likarolong tse latelang re tla bona li-algorithms le libopeho tsa data.

Ho na le mefuta e 'maloa ea ho rarahana ha nako ea algorithm:

  • boemo ba maemo a tloaelehileng
  • boemo bo botle ka ho fetisisa
  • le boemo bo bobe ka ho fetisisa

Ho rarahana ha nako hangata ke boemo bo bobe ka ho fetisisa.

Ke ne ke bua feela ka ho rarahana ha nako ea algorithm, empa ho rarahana ho boetse ho sebetsa ho:

  • tšebeliso ea memori ea algorithm
  • disk I/O tshebediso algorithm

Ehlile, ho na le mathata a mabe ho feta n2, mohlala:

  • n4: ntho e mpe! Tse ling tsa li-algorithms tse boletsoeng li na le bothata bona.
  • 3n: sena se mpe le ho feta! E 'ngoe ea li-algorithms eo re tla e bona bohareng ba sengoloa sena e na le bothata bona ('me e hlile e sebelisoa litsing tse ngata tsa polokelo ea litaba).
  • factorial n: ha ho mohla o tla fumana sephetho sa hau leha o na le data e nyane.
  • nn: Haeba u kopana le bothata bona, u lokela ho ipotsa hore na ehlile ke karolo eo u e etsang ...

Tlhokomeliso: Ha kea u fa tlhaloso ea 'nete ea lebitso la O e kholo, maikutlo feela. U ka bala sehlooho sena ho Wikipedia bakeng sa tlhaloso ea sebele (ea asymptotic).

KopanyaSort

U etsa'ng ha u hloka ho hlophisa pokello? Eng? U bitsa mofuta () ts'ebetso ... Ho lokile, karabo e ntle ... Empa bakeng sa database, o tlameha ho utloisisa hore na mofuta ona () o sebetsa joang.

Ho na le li-algorithms tse 'maloa tse ntle tsa ho hlopha, kahoo ke tla tsepamisa maikutlo ho tsa bohlokoahali: kopanya mofuta. U kanna oa se utloisise hore na hobaneng ho hlophisa data ho le molemo hona joale, empa u lokela ho latela karolo ea ho ntlafatsa lipotso. Ho feta moo, ho utloisisa merge sort ho tla re thusa hamorao ho utloisisa ts'ebetso e tloaelehileng ea ho kopanya database e bitsoang tsamaea Kena (mokhatlo oa kopanelo).

Kopanya

Joalo ka li-algorithms tse ngata tse sebetsang, mofuta oa ho kopanya o ipapisitse le leqheka: ho kopanya mefuta e 2 e hlophisitsoeng ea boholo ba N/2 ho ea ho N-element e hlophisitsoeng e bitsa feela ts'ebetso ea N. Ts'ebetso ena e bitsoa ho kopanya.

Ha re bone hore na sena se bolela eng ka mohlala o bonolo:

Mokhoa oa ho sebetsa ka litaba tsa likamano (Karolo ea 1)

Palo ena e bonts'a hore ho theha sehlopha sa ho qetela se hlophisitsoeng sa 8-element, o hloka feela ho pheta-pheta hanngoe holim'a likarolo tse 2 4-element. Kaha likarolo tse peli tsa 4-element li se li hlophisoa:

  • 1) o bapisa likarolo tse peli tsa hona joale ka lihlopha tse peli (qalong ea hona joale = pele)
  • 2) ebe u nka e nyane ho e kenya ka har'a likarolo tse 8
  • 3) 'me u fetele ho karolo e latelang ho sehlopha moo u nkile karolo e nyane haholo
  • 'me u phete 1,2,3 ho fihlela u fihla karolong ea ho qetela ea e' ngoe ea lihlopha.
  • Ebe u nka likarolo tse setseng tsa sehlopha se seng ho li kenya ka har'a likarolo tse 8.

Sena se sebetsa hobane likarolo tse peli tsa likarolo tse 4 li hlophisoa, kahoo ha ua tlameha ho "khutlela morao" ka lihlopha tseo.

Kaha joale re utloisisa leqheka, mona ke pseudocode ea ka ea ho kopanya:

array mergeSort(array a)
   if(length(a)==1)
      return a[0];
   end if

   //recursive calls
   [left_array right_array] := split_into_2_equally_sized_arrays(a);
   array new_left_array := mergeSort(left_array);
   array new_right_array := mergeSort(right_array);

   //merging the 2 small ordered arrays into a big one
   array result := merge(new_left_array,new_right_array);
   return result;

Kopanya mofuta o senya bothata ka mathata a manyane ebe o fumana liphetho tsa mathata a manyane ho fumana sephetho sa bothata ba mantlha (hlokomela: mofuta ona oa algorithm o bitsoa arola le ho hlola). Haeba u sa utloisise algorithm ena, u se ke oa tšoenyeha; Ke ne ke sa e utloisise lekhetlo la pele ha ke e bona. Haeba e ka u thusa, ke bona algorithm ena e le algorithm ea mekhahlelo e 'meli:

  • Karolo ea karohano, moo sehlopha se arotsoeng ka lihlopha tse nyane
  • Mokhahlelo oa ho hlopha ke moo lihlopha tse nyenyane li kopanngoang (ho sebelisoa bonngoe) ho etsa sehlopha se seholoanyane.

Karolo ea karohano

Mokhoa oa ho sebetsa ka litaba tsa likamano (Karolo ea 1)

Mokhahlelong oa karohano, sehlopha se arotsoe ka lihlopha tse kopaneng ka mehato e 3. Nomoro e hlophisitsoeng ea mehato ke log(N) (ho tloha N=8, log(N) = 3).

Ke tseba see joang?

Ke bohlale! Ka lentsoe - lipalo. Khopolo ke hore mohato o mong le o mong o arola boholo ba sehlopha sa pele ka 2. Palo ea mehato ke palo ea makhetlo ao u ka arolang sehlopha sa pele ho tse peli. Ena ke tlhaloso e nepahetseng ea logarithm (base 2).

Mokhahlelo oa ho hlopha

Mokhoa oa ho sebetsa ka litaba tsa likamano (Karolo ea 1)

Mokhahlelong oa ho hlopha, o qala ka lihlopha tse kopaneng (eleng ntho e le 'ngoe). Nakong ea mohato o mong le o mong o sebelisa ts'ebetso e mengata ea ho kopanya 'me litšenyehelo tsohle ke N = 8 ts'ebetso:

  • Mokhahlelong oa pele o na le likhokahano tse 4 tse jang lits'ebetso tse 2 ka ngoe
  • Mohato oa bobeli o na le likhokahano tse 2 tse jang lits'ebetso tse 4 ka ngoe
  • Mohato oa boraro o na le 1 kopanyo e bitsang 8 opereishene

Kaha ho na le mehato ea log(N), kakaretso ea litšenyehelo N * log(N) ts'ebetso.

Melemo ea ho kopanya mofuta

Ke hobane'ng ha algorithm ee e le matla hakaale?

Hobane:

  • U ka e fetola ho fokotsa mohopolo oa mohopolo e le hore u se ke oa theha lihlopha tse ncha empa u fetole ka ho toba lenane la ho kenya.

Tlhokomeliso: mofuta ona oa algorithm o bitsoa in-sebaka (ho hlopha ntle le mohopolo o eketsehileng).

  • U ka e fetola hore e sebelise sebaka sa disk le mohopolo o monyenyane ka nako e le 'ngoe ntle le ho kenya disk ea bohlokoa I / O holimo. Morero ke ho kenya mohopolong feela likarolo tse ntseng li sebetsoa. Sena se bohlokoa ha o hloka ho hlophisa tafole ea li-gigabyte tse ngata ka buffer ea memori ea 100-megabyte feela.

Tlhokomeliso: mofuta ona oa algorithm o bitsoa ho hlopha kantle.

  • U ka e fetola hore e sebetse ka mekhoa e mengata / likhoele / li-server.

Ka mohlala, mofuta o kopantsoeng oa ho kopanya ke e 'ngoe ea likarolo tsa bohlokoa Hadoop (e leng sebopeho sa data e kholo).

  • Algorithm ena e ka fetola lead hore e be khauta (ka 'nete!).

Algorithm ena ea ho hlopha e sebelisoa libakeng tse ngata (haeba e se kaofela), empa ha se eona feela. Haeba u batla ho tseba haholoanyane, u ka bala sena mosebetsi oa ho etsa lipatlisiso, e buang ka melemo le likotsi tsa li-algorithms tse tloaelehileng tsa ho hlopha database.

Array, Sefate le Hash Tafole

Kaha joale re utloisisa mohopolo oa ho rarahana ha nako le ho hlophisa, ke lokela ho u joetsa ka libopeho tse 3 tsa data. Sena ke sa bohlokoa hobane ba ke motheo oa datha tsa sejoale-joale. Ke tla boela ke hlahise mohopolo index ea database.

Array

Sehlopha sa mahlakore a mabeli ke sebopeho se bonolo ka ho fetisisa sa data. Tafole e ka nkoa e le lethathamo. Ka mohlala:

Mokhoa oa ho sebetsa ka litaba tsa likamano (Karolo ea 1)

Sehlopha sena sa 2-dimensional ke tafole e nang le mela le litšiea:

  • Mohala o mong le o mong o emela mokhatlo
  • Likholomo li boloka thepa e hlalosang mokhatlo.
  • Kholomo e 'ngoe le e 'ngoe e boloka data ea mofuta o itseng (palo e felletseng, khoele, letsatsi...).

Sena se loketse ho boloka le ho bona data ka mahlo, leha ho le joalo, ha o hloka ho fumana boleng bo itseng, sena ha sea lokela.

Mohlala, haeba u ne u batla ho fumana bashanyana bohle ba sebetsang UK, u tla hloka ho sheba mola o mong le o mong ho bona hore na mola oo ke oa UK. E tla u lefella li-transactionskae N - palo ea mela, e seng mpe, empa na ho ka ba le tsela e potlakileng? Joale ke nako ea hore re tloaelane le lifate.

Tlhokomeliso: Lipolokelo tse ngata tsa sejoale-joale li fana ka li-arrays tse atolositsoeng bakeng sa ho boloka litafole ka mokhoa o atlehileng: litafole tse hlophisitsoeng hantle le li-index-organizedtables. Empa sena ha se fetole bothata ba ho fumana kapele boemo bo itseng sehlopheng sa litšiea.

Sefate sa database le index

Sefate sa ho batla sa binary ke sefate sa binary se nang le thepa e khethehileng, senotlolo sebakeng se seng le se seng se tlameha ho ba:

  • e kholo ho feta linotlolo tsohle tse bolokiloeng ka lehlakoreng le letšehali
  • ka tlase ho linotlolo tsohle tse bolokiloeng ka har'a subtree e nepahetseng

A re bone hore na sena se bolela eng ka pono

Boemo

Mokhoa oa ho sebetsa ka litaba tsa likamano (Karolo ea 1)

Sefate sena se na le N = 15 elements. Ha re re ke batla 208:

  • Ke qala motso oo senotlolo sa oona e leng 136. Ho tloha 136<208, ke sheba subtree e nepahetseng ea node 136.
  • 398>208 ka hona ke shebile ka letsohong le letšehali la node 398
  • 250>208 ka hona ke shebile ka letsohong le letšehali la node 250
  • 200<208, ka hona ke shebile subtree e nepahetseng ea node 200. Empa 200 ha e na subtree e nepahetseng, boleng ha bo yo (hobane haeba e le teng, e tla ba ka har'a subtree e nepahetseng ea 200).

Joale ha re re ke batla 40

  • Ke qala ho motso oo senotlolo sa oona e leng 136. Ho tloha 136> 40, ke sheba ka lehlakoreng le letšehali la node 136.
  • 80> 40, ka hona ke shebile ka lehlakoreng le letšehali la node 80
  • 40= 40, node e teng. Ke fumana ID ea mola kahare ho node (e sa bonts'itsoeng setšoantšong) ebe ke sheba tafoleng bakeng sa ID ea mola o fanoeng.
  • Ho tseba mola oa ID ho nthusa hore ke tsebe hantle hore na data e hokae tafoleng, kahoo nka e fumana hang-hang.

Qetellong, lipatlisiso ka bobeli li tla ntefisetsa palo ea maemo ka har'a sefate. Haeba u bala karolo e mabapi le ho kopanya mofuta ka hloko, u lokela ho bona hore ho na le maemo a log(N). Hoa etsahala, letlapa la litšenyehelo tsa ho batla(N), ha e mpe!

A re khutleleng bothateng ba rona

Empa taba ena ke ntho e sa utloahaleng, kahoo ha re khutleleng bothateng ba rona. Ho e-na le palo e bonolo, nahana ka khoele e emelang naha ea motho e mong tafoleng e fetileng. Ha re re u na le sefate se nang le sebaka sa "naha" (kholomo ea 3) ea tafole:

  • Haeba u batla ho tseba hore na ke mang ea sebetsang UK
  • u sheba sefate ho fumana node e emelang Great Britain
  • ka hare ho "UKnode" u tla fumana sebaka sa lirekoto tsa basebetsi ba UK.

Patlisiso ena e tla bitsa lits'ebetso tsa log(N) sebakeng sa lits'ebetso tsa N haeba u sebelisa sehlopha ka kotloloho. Seo u sa tsoa se hlahisa e ne e le index ea database.

O ka aha sefate sa index bakeng sa sehlopha sefe kapa sefe sa masimo (khoele, nomoro, mela e 2, nomoro le khoele, letsatsi...) ha feela u na le ts'ebetso ea ho bapisa linotlolo (ke hore lihlopha tsa masimo) hore u tsebe ho seta. laela har'a linotlolo (e leng boemo bakeng sa mefuta efe kapa efe ea motheo sebakeng sa polokelo ea litaba).

B+TreeIndex

Le hoja sefate sena se sebetsa hantle bakeng sa ho fumana boleng bo itseng, ho na le bothata ba BIG ha u hloka fumana likarolo tse ngata lipakeng tsa litekanyetso tse peli. Sena se tla bitsa O(N) hobane o tla tlameha ho sheba node e 'ngoe le e' ngoe sefateng ebe o sheba hore na e lipakeng tsa litekanyetso tsena tse peli (mohlala, ka tsela e laetsoeng ea sefate). Ho feta moo, ts'ebetso ena ha e na disk I / O botsoalle kaha u tlameha ho bala sefate kaofela. Re hloka ho fumana mokhoa oa ho sebetsa hantle kopo ea sebaka. Ho rarolla bothata bona, li-database tsa sejoale-joale li sebelisa mofuta o fetotsoeng oa sefate se fetileng se bitsoang B + Tree. Sefate sa B+Sefate:

  • feela li-node tse tlase (makhasi) boloka tlhahisoleseding (sebaka sa mela lethathamong le amanang le lona)
  • libaka tse ling kaofela li teng mona bakeng sa tsela ho node e nepahetseng nakong ya ho batla.

Mokhoa oa ho sebetsa ka litaba tsa likamano (Karolo ea 1)

Joalokaha u bona, ho na le li-node tse ngata mona (habeli). Ha e le hantle, u na le li-node tse eketsehileng, "li-node tsa liqeto", tse tla u thusa ho fumana node e nepahetseng (e bolokang sebaka sa mela e tafoleng e amanang). Empa bothata ba ho batla bo ntse bo le O(log(N)) (ho na le boemo bo le bong feela). Phapang e kholo ke hore li-node tse maemong a tlase li hokahane le bahlahlami ba bona.

Ka Sefate sena sa B +, haeba u batla litekanyetso pakeng tsa 40 le 100:

  • U hloka feela ho batla 40 (kapa boleng bo haufi ka mor'a 40 haeba 40 e le sieo) joalo ka ha u entse ka sefate se fetileng.
  • Ebe u bokella majalefa a 40 u sebelisa likhokahano tsa mojalefa ka kotloloho ho fihlela u fihla ho 100.

Ha re re u fumane bahlahlami ba M mme sefate se na le li-N nodes. Ho fumana node e itseng ea litšenyehelo tsa log (N) joalo ka sefate se fetileng. Empa hang ha o fumana node ena, o tla fumana bahlahlami ba M ho ts'ebetso ea M ka litšupiso ho bahlahlami ba bona. Patlo ena e bitsa feela M+log(N) ts'ebetso ha e bapisoa le ts'ebetso ea N sefateng se fetileng. Ho feta moo, ha ho hlokahale hore u bale sefate se feletseng (li-node tsa M + log (N) feela), e bolelang tšebeliso e fokolang ea disk. Haeba M e nyane (mohlala, mela e 200) le N e kholo (1 mela), ho tla ba le phapang e Khōlō.

Empa ho na le mathata a macha mona (hape!). Haeba u eketsa kapa u hlakola mola sebakeng sa polokelo ea litaba (ka hona ho index ea B+ Tree e amanang le eona):

  • o tlameha ho boloka taolo pakeng tsa li-node ka hare ho Sefate sa B +, ho seng joalo u ke ke ua khona ho fumana li-node ka har'a sefate se sa hlophisoang.
  • o tlameha ho boloka bonyane palo e ka khonehang ea maemo ho B+ Sefate, ho seng joalo nako ea ho rarahana ea O(log(N)) e fetoha O(N).

Ka mantsoe a mang, B + Tree e tlameha ho itlhophisa le ho leka-lekana. Ka lehlohonolo, sena se ka khoneha ka ts'ebetso e bohlale ea ho hlakola le ho kenya. Empa sena se tla ka litšenyehelo: ho kenya le ho hlakola sefateng sa B+ ho bitsa O(log(N)). Ke kahoo ba bang ba lona ba utloileng seo ho sebelisa li-index tse ngata haholo ha se mohopolo o motle. Ka 'nete, o ntse o fokotsa lebelo ka potlako kenya/ntlafatsa/hlakola mola tafolenghobane database e hloka ho nchafatsa li-index tsa tafole ho sebelisa ts'ebetso e turang ea O(log(N)) bakeng sa index ka' ngoe. Ho feta moo, ho eketsa li-index ho bolela mosebetsi o mongata bakeng sa molaoli oa khoebo (e tla hlalosoa qetellong ea sehlooho).

Bakeng sa lintlha tse ling, u ka bona sengoloa sa Wikipedia ho B+sefate. Haeba u batla mohlala oa ho kenya tšebetsong B + Tree sebakeng sa polokelo ea litaba, sheba Sengoloa sena и Sengoloa sena ho tsoa ho moqapi ea ka sehloohong oa MySQL. Ka bobeli ba shebana le kamoo InnoDB (enjene ea MySQL) e sebetsanang le li-index.

Tlhokomeliso: 'Mali o ile a mpolella hore, ka lebaka la ntlafatso ea boemo bo tlase, sefate sa B + se lokela ho leka-lekana ka ho feletseng.

Hashtable

Sebopeho sa rona sa ho qetela sa data ke tafole ea hash. Sena se thusa haholo ha o batla ho sheba boleng ka potlako. Ho feta moo, ho utloisisa tafole ea hash ho tla re thusa hamorao ho utloisisa ts'ebetso e tloaelehileng ea ho kopanya database e bitsoang hash join ( hash join). Sebopeho sena sa data se boetse se sebelisoa ke database ho boloka lintho tse ling tsa ka hare (mohlala. notlela tafole kapa letamo la buffer, re tla bona mehopolo ena ka bobeli hamorao).

Tafole ea hash ke sebopeho sa data se fumanang kapele ntho e ipapisitseng le senotlolo sa eona. Ho theha tafole ea hash o hloka ho hlalosa:

  • senotlolo bakeng sa lintlha tsa hau
  • mosebetsi oa hash bakeng sa linotlolo. Li-hashes tsa bohlokoa tse baloang li fana ka sebaka sa likarolo (tse bitsoang dikarolo ).
  • mosebetsi oa ho bapisa linotlolo. Ha u se u fumane karolo e nepahetseng, u tlameha ho fumana ntho eo u e batlang ka har'a karolo u sebelisa papiso ena.

Mohlala o bonolo

Ha re nke mohlala o hlakileng:

Mokhoa oa ho sebetsa ka litaba tsa likamano (Karolo ea 1)

Tafole ena ea hash e na le likarolo tse 10. Hobane ke botsoa, ​​ke ne ke tšoantšetsa likarolo tse 5 feela, empa kea tseba hore u bohlale, kahoo ke tla u fa setšoantšo sa tse ling tse 5 u le mong. Ke sebelisitse hash function modulo 10 ea senotlolo. Ka mantsoe a mang, ke boloka feela nomoro ea ho qetela ea senotlolo sa element ho fumana karolo ea eona:

  • haeba nomoro ea ho qetela ke 0, element e oela karolong ea 0,
  • haeba nomoro ea ho qetela ke 1, element e oela karolong ea 1,
  • haeba nomoro ea ho qetela ke 2, element e oela sebakeng sa 2,
  • ...

Mosebetsi oa papiso oo ke o sebelisitseng ke tekano lipakeng tsa linomoro tse peli.

Ha re re u batla ho fumana karolo ea 78:

  • Tafole ea hash e bala khoutu ea hash bakeng sa 78, e leng 8.
  • Tafole ea hash e sheba karolo ea 8, 'me ntho ea pele eo e e fumanang ke 78.
  • O khutlisetsa ntlha ea 78 ho uena
  • Ho batla ho bitsa feela ts'ebetso e 2 (e 'ngoe ke ho bala boleng ba hash' me e 'ngoe ke ho sheba ntho e ka hare ho karolo).

Joale ha re re u batla ho fumana karolo ea 59:

  • Tafole ea hash e bala khoutu ea hash bakeng sa 59, e leng 9.
  • Tafole ea hash e batlisisa karolong ea 9, ntho ea pele e fumanoeng ke 99. Ho tloha 99!=59, element 99 ha se ntho e nepahetseng.
  • Ho sebelisoa mohopolo o tšoanang, karolo ea bobeli (9), ea boraro (79), ..., ea ho qetela (29) e nkoa.
  • Karolo ha e fumanehe.
  • Ho batla ho jella lits'ebetso tse 7.

Mosebetsi o motle oa hash

Joalokaha u ka bona, ho itšetlehile ka boleng boo u bo batlang, litšenyehelo ha li tšoane!

Haeba joale ke fetola ts'ebetso ea hash modulo 1 ea senotlolo (ke hore, ho nka linomoro tse 000 tsa ho qetela), ho batla ha bobeli ho bitsa feela ts'ebetso e le 000 kaha ha ho na likarolo karolong ea 6. Phephetso ea 'nete ke ho fumana ts'ebetso e ntle ea hash e tla theha libakete tse nang le likarolo tse nyane haholo.

Mohlala oa ka, ho fumana mosebetsi o motle oa hash ho bonolo. Empa ona ke mohlala o bonolo, ho fumana ts'ebetso e ntle ea hash ho thata haholo ha senotlolo se le:

  • khoele (mohlala - sefane)
  • Mela e 2 (mohlala - sefane le lebitso la pele)
  • Mela e 2 le letsatsi (mohlala - sefane, lebitso la pele le letsatsi la tsoalo)
  • ...

Ka ts'ebetso e ntle ea hash, ho sheba tafole ea hash ho bitsa O(1).

Array vs tafole ea hash

Ke hobane'ng ha u sa sebelise array?

Hmm, potso e ntle.

  • Tafole ea hash e ka ba e kentsoe mohopolong hanyenyane, 'me likarolo tse setseng li ka sala ho disk.
  • Ka sehlopha u tlameha ho sebelisa sebaka se kopaneng mohopolong. Haeba u kenya tafole e kholo ho thata haholo ho fumana sebaka se lekaneng se tsoelang pele.
  • Bakeng sa tafole ea hash, o ka khetha senotlolo seo u se batlang (mohlala, naha le sefane sa motho).

Bakeng sa boitsebiso bo eketsehileng, u ka bala sehlooho se reng ka JavaHashMap, e leng ts'ebetsong e nepahetseng ea tafole ea hash; ha ho hlokahale hore u utloisise Java ho utloisisa mehopolo e boletsoeng sehloohong sena.

Source: www.habr.com

Eketsa ka tlhaloso