Astaamaha naqshadaynta qaabka xogta ee NoSQL

Horudhac

Astaamaha naqshadaynta qaabka xogta ee NoSQL "Waa inaad u ordaa sida ugu dhakhsaha badan si aad meesha u joogto,
oo si aad meel u gaadho, waa inaad u ordaysaa ugu yaraan laba jeer si degdeg ah!”
(c) Alice ee Wonderland

Muddo ka hor ayaa la i weydiiyey inaan muxaadaro ka jeediyo falanqeeyayaasha shirkadeena mawduuca naqshadeynta moodooyinka xogta, sababtoo ah waxay ku fadhiyaan mashaariicda wakhti dheer (mararka qaarkood dhowr sano) waxaan luminaa aragtida waxa nagu wareegsan ee tiknoolajiyada IT-ga. Shirkadeena (sidoo kale way dhacdaa) mashruucyo badan ma isticmaalaan xogta NoSQL (ugu yaraan hadda), markaa muxaadaradayda waxaan si gooni gooni ah u siiyay xoogaa dareen ah iyaga oo isticmaalaya tusaalaha HBase waxaanan isku dayay inaan u jeediyo soo bandhigida walxaha kuwan. kuwaas oo aan waligood isticmaalin ayaa shaqeeyay. Gaar ahaan, waxaan ku muujiyay qaar ka mid ah sifooyinka naqshadeynta qaabka xogta anigoo isticmaalaya tusaale aan akhriyay dhowr sano ka hor Maqaalka "Hordhaca HB ase Schema Design" ee uu qoray Amandeep Khurana. Marka aan falanqaynayo tusaalooyinka, waxaan is barbar dhigay dhowr ikhtiyaar oo lagu xallinayo isla dhibaatadan si aan si wanaagsan ugu gudbiyo fikradaha ugu muhiimsan dhagaystayaasha.

Dhowaan, "waxba la'aanteed ma jirto," waxaan naftayda waydiiyay su'aasha (xilliga dheer ee May ee karantiilku si gaar ah ayuu tan u saameeyaa), intee in le'eg ayay xisaabinta aragtida u dhigantaa ku-dhaqanka? Dhab ahaantii, tani waa sida fikradda maqaalkani ku dhashay. Horumariyihii la shaqaynayey NoSQL dhawr maalmood waxa laga yaabaa in aanu wax cusub ka baran (sidaas darteed waxa laga yaabaa in isla markiiba ka boodo maqaalka badhkii). Laakiin loogu talagalay falanqeeyayaashaKuwa aan weli si dhow ula shaqeyn NoSQL, waxaan u maleynayaa inay faa'iido u yeelan doonto helitaanka faham aasaasi ah oo ku saabsan qaabeynta moodooyinka xogta ee HBase.

Tusaalaha falanqaynta

Fikradayda, ka hor inta aanad bilaabin isticmaalka xogta NoSQL, waxaad u baahan tahay inaad si taxadar leh u fekerto oo aad miisaanto faa'iidooyinka iyo khasaarooyinka. Inta badan dhibka waxa lagu xalin karaa iyadoo la isticmaalayo DBMS-yada xidhiidhka dhaqameed. Sidaa darteed, way fiicantahay inaadan isticmaalin NoSQL sababo la'aan. Haddii aad si kastaba ha ahaatee go'aansatey inaad isticmaasho xogta NoSQL, markaa waa inaad xisaabta ku dartaa in hababka naqshadeynta halkan ay ka duwan yihiin. Gaar ahaan qaar iyaga ka mid ah ayaa laga yaabaa in aan caadi ahayn kuwii hore ula macaamilay DBMS-yada la xidhiidha (sida ku cad indho-indhayntayda). Marka, adduunka "xiriirka", waxaan caadi ahaan ku bilownaa qaabeynta aagga dhibaatada, ka dibna, haddii loo baahdo, ka dhig qaabka caadiga ah. In NoSQL waxaan waa in ay isla markiiba xisaabta ku dartaa xaaladaha la filayo ee ku shaqaynta xogta oo marka hore ka dhigo xogta caadiga ah. Intaa waxaa dheer, waxaa jira tiro badan oo kala duwanaansho ah, kuwaas oo hoos looga hadli doono.

Aynu tixgelinno dhibaatada soo socota ee "synthetic", taas oo aan ku sii wadi doono shaqada:

Waa lagama maarmaan in la naqshadeeyo qaab-dhismeedka kaydinta liiska asxaabta isticmaalayaasha qaar ka mid ah shabakadaha bulshada ee aan la taaban karin. Si loo fududeeyo, waxaan u qaadan doonaa in dhammaan isku xirnaantayada la hagayo (sida Instagram-ka, maaha Linkedin). Qaabdhismeedku waa inuu kuu oggolaadaa inaad si wax ku ool ah:

  • Ka jawaab su'aasha haddii isticmaalaha A uu akhriyo isticmaalaha B (qaabka wax-akhriska)
  • Oggolow ku darista/saarida isku xidhka haddii ay dhacdo is-diiwaangelinta/ka-noqoshada isticmaaleha A ee isticmaalaha B (qaabka beddelka xogta)

Dabcan, waxaa jira fursado badan oo lagu xallinayo dhibaatada. Xogta xidhiidhka ee caadiga ah, waxay u badan tahay inaynu si fudud u samayno miis cilaaqaadka (laga yaabo in lagu qeexo haddii, tusaale ahaan, aan u baahannahay inaan kaydino kooxda isticmaalayaasha: qoyska, shaqada, iwm., oo ay ku jiraan "saaxiibkaan"), iyo si aan u wanaajino Xawaaraha gelitaanka wuxuu ku dari lahaa tusmooyinka/qaybinta. Waxay u badan tahay in miiska ugu dambeeya uu u ekaado sidan:

isticmaale_id
saaxiib_id

Vasya
Butros

Vasya
Olya

Hadda ka dib, si loo caddeeyo iyo si fiican loo fahmo, waxaan tilmaami doonaa magacyo beddelkii aqoonsiga

Xaaladda HBase, waxaan ognahay in:

  • raadin hufan oo aan keenin skaanka miiska buuxa waa suurtogal gaar ahaan furaha
    • Dhab ahaantii, taasi waa sababta qorista su'aalaha SQL ee ay yaqaaniin dad badan oo xog-ururin ah waa fikrad xun; farsamo ahaan, dabcan, waxaad u soo diri kartaa su'aal SQL ah oo wata Joins iyo caqli kale HBase oo ka socda isla Impala, laakiin sida ay waxtar u yeelan doonto...

Sidaa darteed, waxaa nalagu qasbay inaan u isticmaalno aqoonsiga isticmaalaha fure ahaan. Iyo fikirkayga ugu horreeya ee mawduuca "halkee iyo sida loo kaydiyo aqoonsiga asxaabta?" malaha fikrad lagu kaydiyo tiirarka. Doorashadan ugu cad iyo "naive" waxay u eegi doontaa wax sidan oo kale ah (aan wacno Xulashada 1 (ugu tala galay)tixraac dheeraad ah):

RowKey
Afayeenada

Vasya
1: Petya
2: Olya
3: Dhasha

Butros
1: Masha
2: Vasya

Halkan, khad kastaa wuxuu u dhigmaa hal isticmaale shabakad. Tiirarku waxay leeyihiin magacyo: 1, 2, ... - iyadoo loo eegayo tirada asxaabta, iyo aqoonsiga asxaabta ayaa lagu kaydiyaa tiirarka. Waxaa muhiim ah in la ogaado in saf kastaa uu yeelan doono tiro ka duwan tiirar. Tusaalaha shaxanka sare, hal saf ayaa leh saddex tiir (1, 2 iyo 3), kan labaadna wuxuu leeyahay laba kaliya (1 iyo 2) - halkan anaga lafteena waxaan isticmaalnay laba HBase oo aan lahayn xogta xogta la xiriirta:

  • awood u leh in uu si firfircoon u beddelo halabuurka tiirarka (ku dar saaxiib -> ku dar tiir, ka saar saaxiib -> tirtir tiir)
  • safafka kala duwan ayaa laga yaabaa in ay leeyihiin halabuurka column kala duwan

Aynu eegno qaab-dhismeedkayaga si aan ugu hoggaansanno shuruudaha hawsha:

  • Xogta akhriska: si loo fahmo in Vasya uu ku biiray Olya, waxaan u baahan doonaa inaan ka jarno khadka oo dhan furaha RowKey = "Vasya" oo kala saar qiyamka tiirka ilaa aan "kula kulanno" Olya iyaga. Ama ku celceli qiyamka tiirarka oo dhan, “lama kulmin” Olya oo soo celi jawaabta Been;
  • Tafatirka xogta: ku darida saaxiib: hawl la mid ah waxaan sidoo kale u baahanahay inaan ka jarno khadka oo dhan isagoo isticmaalaya furaha RowKey = "Vasya" si uu u tiriyo tirada guud ee asxaabtiisa. Waxaan u baahanahay tiradan wadarta asxaabta si aan u go'aamino tirada tiirka aan ugu baahanahay inaan ku qorno aqoonsiga saaxiibka cusub.
  • Beddelida xogta: tirtirida saaxiib:
    • Waxaan u baahanahay in la gooyo khadka oo dhan furaha RowKey = "Vasya" oo kala saar tiirarka si aad u hesho midka uu ku duuban yahay saaxiibka la tirtirayo;
    • Marka xigta, ka dib markii la tirtiro saaxiib, waxaan u baahanahay inaan "beddelno" dhammaan xogta hal tiir si aan loo helin "gaabsan" lambaradooda.

Aynu hadda qiimayno sida ay wax u soo saarka algorithms-yadan, kuwaas oo aan u baahan doono si ay u hirgeliyaan dhinaca "codsiga shuruudaysan", noqon doonaa, isticmaalaya O-astaan. Aynu muujinno xajmiga shabakadeena bulsheed ee mala awaalka ah sida n. Markaa tirada ugu badan ee asxaabta hal isticmaale ayaa yeelan kara (n-1). Waxaan sii dayaci karnaa tan (-1) ujeeddooyinkeenna daraaddood, maaddaama gudaha qaab-dhismeedka isticmaalka O-calaamadaha aysan muhiim ahayn.

  • Xogta akhriska: waa lagama maarmaan in la gooyo xariiqda oo dhan oo lagu celceliyo dhammaan tiirarkeeda xadka. Tani waxay ka dhigan tahay qiyaasta sare ee kharashyadu waxay noqon doontaa ku dhawaad ​​O(n)
  • Tafatirka xogta: ku darida saaxiib: si loo go'aamiyo tirada asxaabta, waxaad u baahan tahay inaad ku celceliso dhammaan tiirarka safka, ka dibna geli tiir cusub => O(n)
  • Beddelida xogta: tirtirida saaxiib:
    • La mid ah ku-darka - waxaad u baahan tahay inaad dhex marto dhammaan tiirarka xadka => O(n)
    • Ka dib markii aan ka saarno tiirarka, waxaan u baahanahay inaan "guurno" iyaga. Haddii aad hirgeliso tan "madaxa-ka-hortagga", markaa xadka waxaad u baahan doontaa ilaa (n-1) hawlgallo. Laakiin halkan iyo in ka badan ee qaybta la taaban karo waxaan isticmaali doonaa hab ka duwan, kaas oo hirgelin doona "isbedelka been abuur ah" ee tiro go'an ee hawlgallada - taas oo ah, waqti joogto ah ayaa lagu bixin doonaa, iyada oo aan loo eegin n. Waqtigan joogtada ah (O(2) si sax ah) waa la dayaci karaa marka la barbar dhigo O (n). Habka loo maro ayaa lagu muujiyey sawirka hoose: waxaanu si fudud uga koobiyaynaynaa xogta tiirka “u dambeeya” oo aanu ka saarno midka aanu doonayno inaanu xogta ka tirtirno, ka dibna aanu tirtirno tiirka u dambeeya:
      Astaamaha naqshadaynta qaabka xogta ee NoSQL

Guud ahaan, dhammaan xaaladaha waxaan helnay kakanaanta xisaabinta asymptotic ee O(n).
Waxay u badan tahay inaad horeba u ogaatay in aan had iyo jeer u baahan nahay inaan akhrino safka oo dhan ee kaydka, iyo laba kiisba saddexdii, kaliya si loo maro dhammaan tiirarka oo aan xisaabiyo tirada guud ee asxaabta. Sidaa darteed, isku dayga hagaajinta, waxaad ku dari kartaa tiirka "count", kaas oo kaydiya tirada guud ee asxaabta isticmaalaha shabakad kasta. Xaaladdan oo kale, ma akhrin karno safka oo dhan si aan u xisaabino tirada guud ee asxaabta, laakiin akhri hal tiir "count" kaliya. Waxa ugu weyni waa inaan la iloobin inaad cusboonaysiiso "tirinta" marka xogta la adeegsanayo. Taasi. waanu horumarinay Doorashada 2 (tirin):

RowKey
Afayeenada

Vasya
1: Petya
2: Olya
3: Dhasha
tiri: 3

Butros
1: Masha
2: Vasya

tiri: 2

Marka la barbar dhigo doorashada koowaad:

  • Xogta akhriska: si aad jawaab ugu hesho su'aasha "Vasya ma akhriyaa Olya?" waxba isma bedelin => O(n)
  • Tafatirka xogta: ku darida saaxiib: Waxaan fududeynay gelinta saaxiibka cusub, maadaama hadda aan loo baahnayn inaan akhrino dhammaan xariiqda oo aan ku celcelino tiirarka, laakiin kaliya waxaan heli karnaa qiimaha tiirka "tirinta", iwm. isla markiiba go'aami lambarka tiirka si aad u geliso saaxiib cusub. Tani waxay keenaysaa dhimista kakanaanta xisaabinta ilaa O(1)
  • Beddelida xogta: tirtirida saaxiibMarka la tirtirayo saaxiib, waxaan sidoo kale u isticmaali karnaa tiirkan si aan u dhimno tirada hawlgallada I/O marka aan "wareejin" xogta hal unug oo bidixda ah. Laakiin baahida loo qabo in lagu soo celceliyo tiirarka si loo helo kan u baahan in la tirtiro ayaa weli taagan, markaa => ​​O(n)
  • Dhanka kale, hadda marka la cusbooneysiiyo xogta waxaan u baahanahay inaan cusbooneysiino tiirka "tirinta" mar kasta, laakiin tani waxay qaadataa waqti joogto ah, taas oo lagu dayaci karo qaabka O-calaamadaha.

Guud ahaan, ikhtiyaarka 2 waxa uu u muuqdaa mid ka yara wanaagsan, laakiin waxa uu u eg yahay "horumarin halkii kacaan." Si loo sameeyo "kacaan" waxaan u baahan doonaa Doorashada 3 (col).
Aynu wax walba u rogno "rogad": waxaan magacaabi doonaa Aqoonsiga isticmaalaha magaca tiirka! Waxa lagu qori doono tiirka laftiisa hadda muhiim inooma aha, ha ahaato lambarka 1 (guud ahaan, waxyaabo faa'iido leh ayaa lagu kaydin karaa halkaas, tusaale ahaan, kooxda "qoyska / asxaabta / iwm."). Habkani waxa uu la yaabi karaa "lamaan" aan diyaar ahayn oo aan khibrad hore u lahayn la shaqaynta xogta NoSQL, laakiin si sax ah habkan ayaa kuu ogolaanaya inaad u isticmaasho kartida HBase ee hawshan si waxtar leh:

RowKey
Afayeenada

Vasya
Petya: 1
Olya: 1
Dhaasha: 1

Butros
Maashaa: 1
Vasya: 1

Halkan waxaan ku helnaa dhowr faa'iidooyin hal mar. Si loo fahmo iyaga, aan falanqeyno qaab-dhismeedka cusub oo aan qiyaasno kakanaanta xisaabinta:

  • Xogta akhriska: si looga jawaabo su'aasha in Vasya uu ku biiray Olya, waxaa ku filan in la akhriyo hal tiir "Olya": haddii ay jirto, markaa jawaabtu waa run, haddii aysan ahayn - Been => O(1)
  • Tafatirka xogta: ku darida saaxiibKu darida saaxiib: kaliya ku dar tiir cusub "Aqoonsi saaxiib" => O(1)
  • Beddelida xogta: tirtirida saaxiib: kaliya ka saar tiirka aqoonsiga saaxiibka => O(1)

Sida aad arki karto, faa'iidada muhiimka ah ee qaabkan kaydinta ayaa ah in dhammaan xaaladaha aan u baahanahay, aan ku shaqeyno hal tiir oo keliya, annagoo ka fogaanayna akhrinta safka oo dhan ee kaydka iyo, weliba, xisaabinta dhammaan tiirarka safkan. Halkaas ayaan ku joojin karnaa, laakiin...

Waad ku wareeri kartaa oo aad wax yar ka sii socon kartaa jidka hagaajinta waxqabadka iyo yaraynta hawlaha I/O marka aad gelayso xogta xogta. Maxaa dhacaya haddii aan si toos ah ugu kaydinno macluumaadka xiriirka oo dhameystiran furaha safka laftiisa? Taasi waa, ka dhig isku-dhafka muhiimka ah sida userID.friendID? Xaaladdan oo kale, ma aha inaan xitaa akhrino tiirarka laynka gabi ahaanba (Doorashada 4 ( saf)):

RowKey
Afayeenada

Vasya.Petya
Petya: 1

Vasya.Olya
Olya: 1

Vasya.Dasha
Dhaasha: 1

Petya.Masha
Maashaa: 1

Petya.Vasya
Vasya: 1

Sida cad, qiimaynta dhammaan xaaladaha wax-is-daba-marinta xogta ee qaab-dhismeedkan oo kale, sida nuqulkii hore, waxa ay noqon doontaa O(1). Farqiga u dhexeeya ikhtiyaarka 3 wuxuu ahaan doonaa oo keliya hufnaanta hawlgallada I/O ee kaydka xogta.

Waa hagaag, "qansada" ugu dambeysa. Way fududahay in la arko in doorashada 4, furaha safku yeelan doono dherer doorsooma, kaas oo laga yaabo inuu saameyn ku yeesho waxqabadka (halkan waxaan ku xasuusaneynaa in HBase ay u kaydiso xogta sida set of bytes iyo safafka miisaska waxaa lagu kala soocaa furaha). Intaa waxaa dheer waxaan haysanaa kala-soociye laga yaabo in loo baahdo in lagu xalliyo xaaladaha qaarkood. Si loo baabi'iyo saameyntan, waxaad isticmaali kartaa hashes userID iyo friendID, iyo maadaama labada xashiish ay yeelan doonaan dherer joogto ah, waxaad si fudud u dhejin kartaa iyaga, iyada oo aan lahayn kala-sooc. Markaa xogta shaxda ku jirta waxay u ekaan doontaa sidan (Doorashada 5 (xash)):

RowKey
Afayeenada

dc084ef00e94aef49be885f9b01f51c01918fa783851db0dc1f72f83d33a5994
Petya: 1

dc084ef00e94aef49be885f9b01f51c0f06b7714b5ba522c3cf51328b66fe28a
Olya: 1

dc084ef00e94aef49be885f9b01f51c00d2c2e5d69df6b238754f650d56c896a
Dhaasha: 1

1918fa783851db0dc1f72f83d33a59949ee3309645bd2c0775899fca14f311e1
Maashaa: 1

1918fa783851db0dc1f72f83d33a5994dc084ef00e94aef49be885f9b01f51c0
Vasya: 1

Sida iska cad, kakanaanta algorithm-ka ee la shaqaynta qaab-dhismeedkan oo kale marka la eego xaaladaha aan tixgalinayno waxay la mid noqon doontaa tan ikhtiyaarka 4 - taas oo ah, O(1).
Guud ahaan, aan ku soo koobno ​​dhammaan qiyaasahayada kakanaanta xisaabinta hal miis:

Ku darida saaxiib
Hubinta saaxiib
Saar saaxiib

Xulashada 1 (ugu tala galay)
O (n)
O (n)
O (n)

Doorashada 2 (tirin)
O (1)
O (n)
O (n)

Xulashada 3 (column)
O (1)
O (1)
O (1)

Doorashada 4 ( saf)
O (1)
O (1)
O (1)

Doorashada 5 (xashiish)
O (1)
O (1)
O (1)

Sida aad arki karto, xulashooyinka 3-5 waxay u muuqdaan inay yihiin kuwa ugu doorbida iyo aragti ahaan hubinta fulinta dhammaan xaaladaha khalkhalgelinta xogta lagama maarmaanka ah waqti joogto ah. Xaaladaha hawsheenna, ma jirto shuruud cad oo lagu heli karo liiska dhammaan asxaabta isticmaalaha, laakiin hawlaha mashruuca dhabta ah, waxay noo fiicnaan lahayd, sida falanqeeyayaasha wanaagsan, inaan "odoroso" in hawshan oo kale ay soo baxdo iyo "Fadhi caws." Sidaa darteed, naxariistaydu waxay ku jirtaa dhinaca ikhtiyaarka 3. Laakiin waxay u badan tahay in mashruuc dhab ah codsigan hore loogu xalin lahaa siyaabo kale, sidaas darteed, iyada oo aan lahayn aragti guud ee dhibaatada oo dhan, way fiicantahay in aan la samayn. gunaanadka.

Diyaarinta tijaabada

Waxaan jeclaan lahaa inaan tijaabiyo doodaha aragtiyeed ee kor ku xusan ficil ahaan - tani waxay ahayd hadafka fikradda soo ifbaxday usbuuca dheer. Si arrintan loo sameeyo, waxaa lagama maarmaan ah in la qiimeeyo xawaaraha hawlgalka ee our "codsi shuruudaysan" ee dhammaan xaaladaha lagu tilmaamay isticmaalka database, iyo sidoo kale kororka waqtigan la kordhiyo size ee shabakada bulshada (n). Halbeegga bartilmaameedka ah ee ina xiisaynaya oo aan cabbiri doono inta lagu jiro tijaabada waa wakhtiga uu ku qaatay "codsiga shuruuda leh" si loo fuliyo hal "hawlgal ganacsi". “Ganacsiga ganacsiga” waxaanu ula jeednaa mid ka mid ah kuwan soo socda:

  • Ku darida hal saaxiib oo cusub
  • Hubinta haddii Isticmaalaha A uu yahay saaxiibka Isticmaalaha B
  • Ka saarida hal saaxiib

Haddaba, iyadoo la tixgalinayo shuruudaha lagu sheegay bayaanka hore, xaaladda hubintu waxay u soo baxaysaa sidan soo socota:

  • Duubista xogta. Si aan kala sooc lahayn u soo saar shabakad hore oo cabbir ah n. Si loogu dhawaado "adduunka dhabta ah", tirada asxaabta isticmaale kastaa wuxuu leeyahay sidoo kale doorsoomayaal random ah. Cabbir wakhtiga uu "codsi shuruudaysan" ku qorayo dhammaan xogta la soo saaray HBase. Ka dib u qaybi wakhtiga natiijada tirada guud ee asxaabta lagu daray - tani waa sida aan u helno celceliska wakhtiga hal "hawlgal ganacsi"
  • Xogta akhriska. Isticmaale kasta, u samee liis ah "shakhsiyaadka" kuwaas oo aad u baahan tahay inaad jawaab u hesho haddii isticmaaluhu uu iyaga ku biiray iyo in kale. Dhererka liiska = qiyaastii tirada asxaabta isticmaalaha, iyo kala bar saaxiibada la hubiyay jawaabtu waa inay noqotaa "Haa", iyo qaybta kale - "Maya". Jeegaga waxa loo sameeyaa si ay jawaabaha "Haa" iyo "Maya" isu beddelaan (taas oo ah, kiis kasta oo labaad waa in aan dhex marno dhammaan tiirarka laynka ee fursadaha 1 iyo 2). Wadarta wakhtiga baadhista ayaa markaa loo qaybiyaa tirada asxaabta ee la tijaabiyay si loo helo celceliska wakhtiga baadhista maaddo kasta.
  • Tirtir xogta. Ka saar dhammaan asxaabta isticmaalaha Waxaa intaa dheer, amarka tirtirku waa random (taas oo ah, waxaanu "isku shaandheyn" liiska asalka ah ee loo isticmaalo in lagu duubo xogta). Wadarta wakhtiga jeegga ayaa markaa loo qaybiyaa tirada asxaabta ee laga saaray si loo helo celceliska wakhtiga jeegkiiba.

Xaaladaha waxay u baahan yihiin in lagu socodsiiyo mid kasta oo ka mid ah xulashooyinka moodeelka xogta ee 5 iyo cabbirrada kala duwan ee shabakadda bulshada si loo arko sida waqtigu isu beddelo marka uu kordho. Mid ka mid ah n, isku xirka shabakada iyo liiska isticmaalayaasha si loo hubiyo waa, dabcan, waa isku mid dhammaan 5 doorasho.
Si loo fahmo wanaagsan, hoos waxaa ah tusaale xogta la soo saaray ee n= 5. "dhaliye" qoran wuxuu soo saaraa saddex qaamuus oo aqoonsi ah sida soosaarka:

  • midda hore waa gelinta
  • tan labaad waa hubinta
  • saddexaad - waayo, la tirtiro

{0: [1], 1: [4, 5, 3, 2, 1], 2: [1, 2], 3: [2, 4, 1, 5, 3], 4: [2, 1]} # всего 15 друзей

{0: [1, 10800], 1: [5, 10800, 2, 10801, 4, 10802], 2: [1, 10800], 3: [3, 10800, 1, 10801, 5, 10802], 4: [2, 10800]} # всего 18 проверяемых субъектов

{0: [1], 1: [1, 3, 2, 5, 4], 2: [1, 2], 3: [4, 1, 2, 3, 5], 4: [1, 2]} # всего 15 друзей

Sida aad arki karto, dhammaan aqoonsiga ka weyn 10 ee qaamuuska ee hubinta waa kuwa si sax ah u bixin doona jawaabta Been. Gelida, hubinta iyo tirtirida "saaxiibada" waxa loo fuliyaa sida saxda ah ee isku xigxiga ee qaamuuska.

Tijaabada ayaa lagu sameeyay Laptop ku shaqeeya Windows 10, halkaasoo HBase ay ku dhex shaqeyneysay hal weel oo Docker ah, halka Python oo wata Jupyter Notebook ay ku shaqeyneysay kan kale. Docker waxaa loo qoondeeyay 2 koorayaasha CPU iyo 2 GB oo RAM ah. Dhammaan caqli-galnimada, labadaba ku-dayashada "codsiga shuruudaysan" iyo "tubooyinka" ee soo saarista xogta imtixaanka iyo waqtiga cabbirka, ayaa lagu qoray Python. Maktabadu waxa loo isticmaalay inay la shaqeyso HBase farxad, si loo xisaabiyo xashiishyada (MD5) ee doorashada 5 - hashlib

Iyadoo la tixgalinayo awoodda xisaabinta ee laptop gaar ah, bilaabista n = 10, 30, … ayaa si tijaabo ah loo doortay. 170 - marka wadarta wakhtiga hawlgalka ee wareegga tijaabada buuxa (dhammaan xaaladaha dhammaan xulashooyinka dhammaan n) ay xitaa ka badan ama ka yar tahay macquul oo ku habboon hal xaflad shaaha ah (celcelis ahaan 15 daqiiqo).

Halkan waxaa lagama maarmaan ah in la sheego in tijaabadan aynaan ugu horrayn qiimeynin tirooyinka waxqabadka dhammaystiran. Xitaa isbarbardhigga labada ikhtiyaar ee kala duwan ayaa laga yaabaa inaysan gebi ahaanba sax ahayn. Hadda waxaan xiisayneynaa dabeecadda isbeddelka waqtiga iyadoo ku xiran n, tan iyo markii la tixgelinayo qaabeynta kor ku xusan ee "joogitaanka imtixaanka", aad ayey u adag tahay in la helo qiyaasaha waqtiga "la nadiifiyey" saameynta random iyo arrimo kale ( hawshaas oo kale lama dejin).

Natiijada tijaabada

Imtixaanka ugu horreeya waa sida wakhtiga ku baxay buuxinta liiska saaxiibada isu beddelo. Natiijadu waxay ku jirtaa garaafka hoose.
Astaamaha naqshadaynta qaabka xogta ee NoSQL
Ikhtiyaarada 3-5, sida la filayo, waxay muujinayaan ku dhawaad ​​​​"wax kala beddelasho ganacsi" oo joogto ah, taas oo aan ku xirnayn kobaca cabbirka shabakadda iyo farqiga aan la garan karin ee waxqabadka.
Doorashada 2 waxay sidoo kale muujinaysaa waxqabad joogto ah, laakiin wax yar ka sii xun, ku dhawaad ​​​​2 jeer marka loo eego fursadaha 3-5. Tanina ma faraxsanaan karto, maadaama ay la xiriirto aragtida - noocaan tirada hawlgallada I/O ee laga keenayo HBase waa 2 jeer ka weyn. Tani waxay u adeegi kartaa caddayn aan toos ahayn in fadhigayaga imtixaanku, mabda'a ahaan, uu bixiyo saxsanaan wanaagsan.
Xulashada 1 sidoo kale, sida la filayo, waxay noqotaa midda ugu gaabis badan waxayna muujineysaa kororka tooska ah ee waqtiga lagu bixiyay in midba midka kale lagu daro cabbirka shabakadda.
Aynu hadda eegno natiijada imtixaanka labaad.
Astaamaha naqshadaynta qaabka xogta ee NoSQL
Xulashada 3-5 waxay mar kale u dhaqmaan sidii la filayay - waqti joogto ah, oo ka madax bannaan cabbirka shabakadda. Ikhtiyaarada 1 iyo 2 waxay muujinayaan korodhka toosan ee wakhtiga marka xajmiga shabakadu kordho iyo waxqabadka la midka ah. Waxaa intaa dheer, doorashada 2 waxay noqotaa mid yara gaabis ah - sida muuqata waxaa sabab u ah baahida loo qabo in la saxo oo laga shaqeeyo tiirka "tirinta" dheeraadka ah, kaas oo noqda mid la dareemo marka n sii kordho. Laakiin weli waan iska ilaalin doonaa inaan soo saaro wax kasta oo gunaanad ah, maadaama saxnaanta isbarbardhiggani uu yahay mid aad u hooseeya. Intaa waxaa dheer, saamiyadan (ikhtiyaarka, 1 ama 2, waa dhakhso) ayaa laga beddelay orod si ay u socdaan (iyadoo la ilaalinayo dabeecadda ku-tiirsanaanta iyo "qoorta iyo qoorta")

Hagaag, garaafka u dambeeya waa natiijada baaritaanka saarista.

Astaamaha naqshadaynta qaabka xogta ee NoSQL

Mar labaad, halkan wax la yaab leh ma jiraan. Ikhtiyaarada 3-5 waxay fuliyaan ka saarista wakhti joogto ah.
Waxaa intaa dheer, si xiiso leh, fursadaha 4 iyo 5, oo ka duwan xaaladihii hore, waxay muujinayaan waxqabad muuqda oo ka sii liita xulashada 3. Sida muuqata, hawlgalka tirtirka safka ayaa ka qaalisan hawlgalka tiirka tiirka, taas oo guud ahaan macquul ah.

Xulashada 1 iyo 2, sida la filayo, waxay muujinayaan koror toosan oo wakhtiga ah. Isla mar ahaantaana, ikhtiyaarka 2 ayaa si joogto ah uga gaabiya doorashada 1 - sababtoo ah hawlgalka dheeraadka ah ee I/O ee "ilaalinta" tiirka tirinta.

Gabagabada guud ee tijaabada:

  • Ikhtiyaarada 3-5 waxay muujinayaan hufnaan wayn markay ka faa'iidaysanayaan HBase; Waxaa intaa dheer, waxqabadkoodu wuu kala duwan yahay midba midka kale si joogto ah oo kuma xirna xajmiga shabakadda.
  • Farqiga u dhexeeya xulashooyinka 4 iyo 5 lama diiwaan gelin. Laakiin tani macnaheedu maaha in doorashada 5 aan la isticmaalin. Waxay u badan tahay in xaaladda tijaabada ah ee la isticmaalo, iyada oo la tixgelinayo sifooyinka waxqabadka ee kursiga imtixaanka, ma ogola in la ogaado.
  • Dabeecadda korodhka wakhtiga loo baahan yahay si loo sameeyo "hawlaha ganacsiga" xogta guud ahaan waxay xaqiijisay xisaabinta aragtida hore ee dhammaan fursadaha.

Epilogue

Tijaabooyinkii qallafsanaa ee la sameeyay waa in aan loo qaadan run buuxda. Waxaa jira arrimo badan oo aan xisaabta lagu darin oo natiijada qalloocinaya (isbeddelladan ayaa si gaar ah uga muuqda garaafyada leh cabbir yar oo shabakad ah). Tusaale ahaan, xawaaraha thrift, kaas oo loo isticmaalo by happybase, mugga iyo habka loo fuliyo macquul ah in aan ku qoray Python (Ma sheegan karo in code si fiican loo qoray oo si wax ku ool ah loo isticmaalo awoodaha dhammaan qaybaha), laga yaabee. Astaamaha kaydinta HBase, waxqabadka asalka ah ee Windows 10 ee kumbuyuutarkayga, iwm. Guud ahaan, waxaan u qaadan karnaa in dhammaan xisaabinta aragtida ay si tijaabo ah u muujiyeen saxnimadooda. Hagaag, ama ugu yaraan suurtagal ma ahayn in iyaga lagu beeniyo "weerar madax-ka-dhac ah".

Gebagebadii, talooyinka qof kasta oo hadda bilaabay inuu naqshadeeyo moodooyinka xogta ee HBase: aan ka soo bixin waayo-aragnimadii hore ee la shaqaynta xog-ururinta iyo xusuusnow "amarada":

  • Markaan nashqadeyneyno, waxaan ka sii soconaa hawsha iyo qaababka wax-is-daba-marinta xogta, ee kama nihin qaabka domainka
  • Helitaanka hufan (iyada oo aan lahayn iskaanka miiska oo buuxa) - kaliya furaha
  • Caadi ahaan
  • Safafka kala duwani waxay ka koobnaan karaan tiirar kala duwan
  • Halabuurka firfircoon ee ku hadla

Source: www.habr.com

Add a comment