Feartan dealbhadh modail dàta airson NoSQL

Ro-ràdh

Feartan dealbhadh modail dàta airson NoSQL “Feumaidh tu ruith cho luath ‘s as urrainn dhut dìreach airson fuireach nad àite,
agus airson faighinn gu àiteigin, feumaidh tu ruith co-dhiù dà uair cho luath!”
(c) Alice in Wonderland

O chionn ùine chaidh iarraidh orm òraid a thoirt seachad sgrùdairean ar companaidh air cuspair dealbhadh mhodalan dàta, oir a’ suidhe air pròiseactan airson ùine mhòr (uaireannan airson grunn bhliadhnaichean) bidh sinn a’ call sealladh air na tha a’ tachairt timcheall oirnn ann an saoghal teicneòlasan IT. Anns a ’chompanaidh againn (tha e dìreach a’ tachairt) chan eil mòran phròiseactan a ’cleachdadh stòran-dàta NoSQL (co-dhiù airson a-nis), agus mar sin anns an òraid agam thug mi beagan aire dhaibh le bhith a’ cleachdadh eisimpleir HBase agus dh’ fheuch mi ri taisbeanadh an stuth a stiùireadh don fheadhainn sin. nach do chleachd iad riamh obair. Gu sònraichte, sheall mi cuid de fheartan dealbhadh modail dàta a’ cleachdadh eisimpleir a leugh mi o chionn grunn bhliadhnaichean anns an artaigil “Ro-ràdh gu HB as Schema Design” le Amandeep Khurana. Nuair a bha mi a’ dèanamh anailis air eisimpleirean, rinn mi coimeas eadar grunn roghainnean airson fuasgladh fhaighinn air an aon dhuilgheadas gus na prìomh bheachdan a thoirt don luchd-èisteachd nas fheàrr.

O chionn ghoirid, “gun dad ri dhèanamh,” chuir mi a’ cheist orm fhìn (tha deireadh-seachdain fada Cèitean ann an cuarantine gu sònraichte cuideachail dha seo), dè an ìre a bhios àireamhachadh teòiridheach a rèir cleachdadh? Gu dearbh, seo mar a rugadh am beachd airson an artaigil seo. Is dòcha nach ionnsaich leasaiche a tha air a bhith ag obair le NoSQL airson grunn làithean dad ùr bhuaithe (agus mar sin faodaidh e leth an artaigil a sheachnadh sa bhad). Ach airson sgrùdaireanDhaibhsan nach eil air obrachadh gu dlùth le NoSQL fhathast, tha mi a’ creidsinn gum bi e feumail airson tuigse bhunasach fhaighinn air feartan dealbhadh mhodalan dàta airson HBase.

Mion-sgrùdadh eisimpleir

Nam bheachd-sa, mus tòisich thu a’ cleachdadh stòran-dàta NoSQL, feumaidh tu smaoineachadh gu faiceallach agus cuideam a chuir air na buannachdan agus na h-eas-bhuannachdan. Gu math tric is dòcha gun tèid an duilgheadas fhuasgladh le bhith a’ cleachdadh DBMS traidiseanta. Mar sin, tha e nas fheàrr gun a bhith a 'cleachdadh NoSQL gun adhbharan cudromach. Ma cho-dhùnas tu a dh’ aindeoin sin stòr-dàta NoSQL a chleachdadh, bu chòir dhut aire a thoirt gu bheil na dòighean dealbhaidh an seo rudeigin eadar-dhealaichte. Gu sònraichte dh’ fhaodadh cuid dhiubh a bhith neo-àbhaisteach dhaibhsan nach do dhèilig ach ri DBMSan co-cheangailte (a rèir mo bheachdan). Mar sin, anns an t-saoghal “dàimheach”, mar as trice bidh sinn a’ tòiseachadh le bhith a ’modaladh an raon duilgheadas, agus dìreach an uairsin, ma tha sin riatanach, cuir às don mhodail. Ann an NoSQL tha sinn bu chòir aire a thoirt sa bhad do na suidheachaidhean ris a bheil dùil airson obrachadh le dàta agus an toiseach dì-normalaich an dàta. A bharrachd air an sin, tha grunn eadar-dhealachaidhean eile ann, a thèid a dheasbad gu h-ìosal.

Beachdaichidh sinn air an duilgheadas “synthetic” a leanas, leis am bi sinn ag obair:

Feumar structar stòraidh a dhealbhadh airson liosta charaidean luchd-cleachdaidh cuid de lìonra sòisealta eas-chruthach. Gus a dhèanamh nas sìmplidhe, gabhaidh sinn ris gu bheil na ceanglaichean againn uile air an stiùireadh (mar air Instagram, chan e Linkedin). Bu chòir don structar leigeil leat gu h-èifeachdach:

  • Freagair a’ cheist a bheil cleachdaiche A a’ leughadh cleachdaiche B (pàtran leughaidh)
  • Leig le ceanglaichean a chuir ris / a thoirt air falbh gun fhios nach bi neach-cleachdaidh A fo-sgrìobhadh / gun fho-sgrìobhadh bho chleachdaiche B (teamplaid atharrachadh dàta)

Gu dearbh, tha mòran roghainnean ann airson fuasgladh fhaighinn air an duilgheadas. Ann an stòr-dàta dàimh cunbhalach, bhiodh sinn dualtach dìreach clàr de dhàimhean a dhèanamh (is dòcha air a chomharrachadh ma dh’ fheumas sinn, mar eisimpleir, buidheann luchd-cleachdaidh a stòradh: teaghlach, obair, msaa, anns a bheil an “caraid seo”), agus gus an fheum as fheàrr a dhèanamh. chuireadh astar ruigsinneachd clàran-amais / sgaradh. Is coltaiche gum biodh an clàr mu dheireadh a’ coimhead rudeigin mar seo:

user_id
caraid_id

Vasya
Petya

Vasya
Olya

an-seo, airson soilleireachd agus tuigse nas fheàrr, comharraichidh mi ainmean an àite IDan

A thaobh HBase, tha fios againn:

  • tha e comasach sgrùdadh èifeachdach nach lean gu sgrùdadh làn-bhùird a-mhàin le iuchair
    • gu dearbh, is e sin as coireach gur e droch bheachd a th’ ann a bhith a’ sgrìobhadh cheistean SQL air a bheil mòran eòlach air na stòran-dàta sin; gu teicnigeach, gu dearbh, faodaidh tu ceist SQL a chuir le Joins agus loidsig eile gu HBase bhon aon Impala, ach dè cho èifeachdach sa bhios e ...

Mar sin, feumaidh sinn an ID cleachdaiche a chleachdadh mar iuchair. Agus mo chiad bheachd air a’ chuspair “càite agus ciamar a stòradh IDan charaidean?” 's dòcha gur e beachd an stòradh ann an colbhan. Bidh an roghainn as follaisiche agus “naive” seo a’ coimhead rudeigin mar seo (canaidh sinn e Roghainn 1 (bunaiteach)airson tuilleadh fiosrachaidh):

RowKey
Luchd-labhairt

Vasya
1: Peata
2: Olya
3: Dàna

Petya
1: Masha
2: Vasya

An seo, tha gach loidhne a 'freagairt ri aon neach-cleachdaidh lìonra. Tha ainmean aig na colbhan: 1, 2, ... - a rèir an àireamh de charaidean, agus tha IDan charaidean air an stòradh anns na colbhan. Tha e cudromach cuimhneachadh gum bi àireamh eadar-dhealaichte de cholbhan aig gach sreath. Anns an eisimpleir san fhigear gu h-àrd, tha trì colbhan ann an aon sreath (1, 2 agus 3), agus chan eil ach dhà aig an dàrna fear (1 agus 2) - an seo chleachd sinn sinn fhìn dà thogalach HBase nach eil aig stòran-dàta dàimheach:

  • an comas co-dhèanamh nan colbhan atharrachadh gu dinamach (cuir caraid ris -> cuir colbh ris, thoir air falbh caraid -> sguab às colbh)
  • faodaidh cumaidhean colbh eadar-dhealaichte a bhith aig diofar shreathan

Bheir sinn sùil air an structar againn airson gèilleadh ri riatanasan na h-obrach:

  • A 'leughadh dàta: gus tuigsinn a bheil Vasya fo-sgrìobhadh do Olya, feumaidh sinn toirt air falbh an loidhne gu lèir leis an iuchair RowKey = “Vasya” agus rèitich na luachan colbh gus an coinnich sinn ri Olya annta. No ath-aithris tro luachan a h-uile colbh, “na coinnich” Olya agus till am freagairt meallta;
  • Deasachadh dàta: cuir caraid ris: airson gnìomh coltach ris feumaidh sinn cuideachd toirt air falbh an loidhne gu lèir a’ cleachdadh na h-iuchrach RowKey = “Vasya” gus an àireamh iomlan de a charaidean a chunntadh. Feumaidh sinn an àireamh iomlan de charaidean seo gus àireamh a’ cholbh a dhearbhadh anns am feum sinn ID a’ charaid ùir a sgrìobhadh sìos.
  • Ag atharrachadh dàta: cuir às do charaid:
    • Feum air toirt air falbh an loidhne gu lèir leis an iuchair RowKey = “Vasya” agus rèitich tro na colbhan gus an lorg thu am fear anns a bheil an caraid a thèid a dhubhadh às air a chlàradh;
    • An uairsin, às deidh dhuinn caraid a dhubhadh às, feumaidh sinn an dàta gu lèir a ghluasad gu aon cholbh gus nach faigh sinn “beàrnan” san àireamh aca.

Nach dèan sinn a-nis measadh air cho buannachdail ‘s a bhios na h-algorithms sin, a dh’ fheumas sinn a chuir an gnìomh air taobh “tagradh cumhach”, a’ cleachdadh O-samhlachas. Comharraichidh sinn meud ar lìonra sòisealta beachd-bharail mar n. An uairsin is e an àireamh as motha de charaidean a dh’ fhaodas a bhith aig aon neach-cleachdaidh (n-1). Faodaidh sinn tuilleadh dearmad a dhèanamh air seo (-1) airson ar n-adhbharan, oir taobh a-staigh frèam cleachdadh samhlaidhean O tha e neo-chudromach.

  • A 'leughadh dàta: feumar an loidhne gu lèir a thoirt air falbh agus ath-aithris tro na colbhan gu lèir anns a’ chrìoch. Tha seo a’ ciallachadh gum bi an tuairmse as àirde de chosgaisean timcheall air O(n)
  • Deasachadh dàta: cuir caraid ris: gus an àireamh de charaidean a dhearbhadh, feumaidh tu ath-aithris tro na colbhan san t-sreath gu lèir, agus an uairsin cuir a-steach colbh ùr => O(n)
  • Ag atharrachadh dàta: cuir às do charaid:
    • Coltach ri cur-ris - feumaidh tu a dhol tro gach colbh anns a’ chrìoch => O(n)
    • Às deidh dhuinn na colbhan a thoirt air falbh, feumaidh sinn an “gluasad”. Ma chuireas tu an “ceann-cinn” seo an gnìomh, feumaidh tu suas ri (n-1) obrachaidhean anns a’ chrìoch. Ach an seo agus nas fhaide air adhart anns a’ phàirt phractaigeach cleachdaidh sinn dòigh-obrach eadar-dhealaichte, a chuireas an gnìomh “pseudo-shift” airson àireamh stèidhichte de ghnìomhachd - is e sin, thèid ùine sheasmhach a chaitheamh air, ge bith dè an n. Faodar an ùine seasmhach seo (O(2) a bhith mionaideach) a dhearmad an taca ri O(n). Tha an dòigh-obrach ri fhaicinn anns an fhigear gu h-ìosal: bidh sinn dìreach a’ dèanamh lethbhreac den dàta bhon cholbh “mu dheireadh” chun fhear às a bheil sinn airson dàta a dhubhadh às, agus an uairsin cuir às don cholbh mu dheireadh:
      Feartan dealbhadh modail dàta airson NoSQL

Gu h-iomlan, anns a h-uile suidheachadh fhuair sinn iom-fhillteachd coimpiutaireachd asymptotic de O(n).
Is dòcha gu bheil thu air mothachadh mu thràth gum feum sinn cha mhòr an-còmhnaidh an loidhne gu lèir a leughadh bhon stòr-dàta, agus ann an dà chùis a-mach à trì, dìreach airson a dhol tro na colbhan gu lèir agus obrachadh a-mach an àireamh iomlan de charaidean. Mar sin, mar oidhirp air optimization, faodaidh tu colbh “cunnt” a chuir ris, a bhios a’ stòradh an àireamh iomlan de charaidean aig gach neach-cleachdaidh lìonra. Anns a 'chùis seo, chan urrainn dhuinn an sreath gu lèir a leughadh gus an àireamh iomlan de charaidean obrachadh a-mach, ach dìreach aon cholbh "cunntadh" a leughadh. Is e am prìomh rud gun a bhith a’ dìochuimhneachadh “cunntadh” ùrachadh nuair a thathar a’ làimhseachadh dàta. Sin. sinn air ar leasachadh Roghainn 2 (cunnt):

RowKey
Luchd-labhairt

Vasya
1: Peata
2: Olya
3: Dàna
cunntadh: 3

Petya
1: Masha
2: Vasya

cunntadh: 2

An coimeas ris a 'chiad roghainn:

  • A 'leughadh dàta: gus freagairt fhaighinn don cheist "A bheil Vasya a 'leughadh Olya?" chan eil dad air atharrachadh => O(n)
  • Deasachadh dàta: cuir caraid ris: Tha sinn air cuir a-steach caraid ùr a dhèanamh nas sìmplidhe, oir a-nis chan fheum sinn an loidhne gu lèir a leughadh agus ath-aithris thairis air na colbhan aige, ach chan fhaigh sinn ach luach a’ cholbh “cunnt”, msaa. suidhich àireamh a’ cholbh sa bhad gus caraid ùr a chuir a-steach. Tha seo a’ leantainn gu lùghdachadh ann an iom-fhillteachd àireamhachd gu O(1)
  • Ag atharrachadh dàta: cuir às do charaid: Nuair a sguabas tu às caraid, is urrainn dhuinn an colbh seo a chleachdadh cuideachd gus an àireamh de dh’ obraichean I/O a lughdachadh nuair a bhios sinn “a’ gluasad” an dàta aon chealla air an taobh chlì. Ach tha feum air ath-aithris tro na colbhan gus am fear a lorg a dh’ fheumar a sguabadh às, mar sin => O(n)
  • Air an làimh eile, a-nis nuair a bhios sinn ag ùrachadh dàta feumaidh sinn an colbh “cunnt” ùrachadh a h-uile uair, ach bheir seo ùine chunbhalach, a dh’ fhaodar a dhearmad taobh a-staigh frèam samhlaidhean O.

San fharsaingeachd, tha coltas gu bheil roghainn 2 beagan nas fheàrr, ach tha e nas coltaiche ri “mean-fhàs an àite ar-a-mach.” Gus “ar-a-mach” a dhèanamh feumaidh sinn Roghainn 3 (col).
Tionndaidhidh sinn a h-uile dad “bun-os-cionn”: sònraichidh sinn ainm colbh ID cleachdaiche! Chan eil na thèid a sgrìobhadh sa cholbh fhèin cudromach dhuinn tuilleadh, leig leis gur e an àireamh 1 a th ’ann (san fharsaingeachd, faodar rudan feumail a stòradh an sin, mar eisimpleir, a’ bhuidheann “teaghlach / caraidean / msaa.”). Is dòcha gun cuir an dòigh-obrach seo iongnadh air an “neach-laighe” neo-ullaichte aig nach eil eòlas roimhe air a bhith ag obair le stòran-dàta NoSQL, ach is e dìreach an dòigh-obrach seo a leigeas leat comas HBase a chleachdadh sa ghnìomh seo mòran nas èifeachdaiche:

RowKey
Luchd-labhairt

Vasya
Peata: 1
Oilibh: 1
Dàn: 1

Petya
Masha: 1
Vasya: 1

An seo gheibh sinn grunn bhuannachdan aig an aon àm. Gus an tuigsinn, dèanamaid sgrùdadh air an structar ùr agus dèan tuairmse air an iom-fhillteachd coimpiutaireachd:

  • A 'leughadh dàta: gus a 'cheist a fhreagairt a bheil Vasya fo-sgrìobhadh do Olya, tha e gu leòr aon cholbh "Olya" a leughadh: ma tha e ann, tha am freagairt fìor, mura h-eil - False => O(1)
  • Deasachadh dàta: cuir caraid ris: A’ cur caraid ris: dìreach cuir colbh ùr “Friend ID” => O(1)
  • Ag atharrachadh dàta: cuir às do charaid: dìreach thoir air falbh an colbh Friend ID => O(1)

Mar a chì thu, is e buannachd mhòr a tha aig a’ mhodail stòraidh seo gu bheil sinn ag obair le dìreach aon cholbh anns a h-uile suidheachadh a dh ’fheumas sinn, a’ seachnadh a bhith a ’leughadh an t-sreath gu lèir bhon stòr-dàta agus, a bharrachd air sin, ag àireamhachadh a h-uile colbh den t-sreath seo. Dh’ fhaodadh sinn stad an sin, ach...

Faodaidh tu a bhith fo imcheist agus a dhol beagan nas fhaide air adhart air an t-slighe gu bhith ag àrdachadh coileanadh agus a’ lughdachadh gnìomhachd I/O nuair a gheibh thu cothrom air an stòr-dàta. Dè ma ghlèidh sinn am fiosrachadh dàimh iomlan gu dìreach san iuchair loidhne fhèin? Is e sin, dèan am prìomh mheasgachadh mar userID.friendID? Anns a’ chùis seo, chan fheum sinn eadhon colbhan na loidhne a leughadh idir (Roghainn 4 (sreath)):

RowKey
Luchd-labhairt

Vasya.Petya
Peata: 1

Vasya.Olya
Oilibh: 1

Vasya.Dasha
Dàn: 1

Petya.Masha
Masha: 1

Petya. Vasya
Vasya: 1

Gu follaiseach, bidh measadh air a h-uile suidheachadh làimhseachaidh dàta ann an structar mar sin, mar a bha san dreach roimhe, O(1). Bidh an eadar-dhealachadh le roghainn 3 dìreach ann an èifeachdas gnìomhachd I/O san stòr-dàta.

Uill, am “bogha” mu dheireadh. Tha e furasta fhaicinn, ann an roghainn 4, gum bi faid caochlaideach aig an iuchair loidhne, a dh’ fhaodadh buaidh a thoirt air coileanadh (an seo tha sinn a’ cuimhneachadh gu bheil HBase a’ stòradh dàta mar sheata de bytes agus tha sreathan ann an clàran air an òrdachadh le iuchair). A bharrachd air an sin tha dealaiche againn a dh’ fheumar a làimhseachadh ann an cuid de shuidheachaidhean. Gus cuir às don bhuaidh seo, faodaidh tu hashes a chleachdadh bho ID neach-cleachdaidh agus ID caraid, agus leis gum bi an dà hashes fada seasmhach, faodaidh tu dìreach an co-chruinneachadh, às aonais dealaiche. An uairsin seallaidh an dàta sa chlàr mar seo (Roghainn 5 (hash)):

RowKey
Luchd-labhairt

dc084ef00e94aef49be885f9b01f51c01918fa783851db0dc1f72f83d33a5994
Peata: 1

dc084ef00e94aef49be885f9b01f51c0f06b7714b5ba522c3cf51328b66fe28a
Oilibh: 1

dc084ef00e94aef49be885f9b01f51c00d2c2e5d69df6b238754f650d56c896a
Dàn: 1

1918fa783851db0dc1f72f83d33a59949ee3309645bd2c0775899fca14f311e1
Masha: 1

1918fa783851db0dc1f72f83d33a5994dc084ef00e94aef49be885f9b01f51c0
Vasya: 1

Gu follaiseach, bidh an iom-fhillteachd algorithmach a bhith ag obair le leithid de structar anns na suidheachaidhean air a bheil sinn a’ beachdachadh an aon rud ri roghainn 4 - is e sin, O(1).
Gu h-iomlan, bheir sinn geàrr-chunntas air na tuairmsean againn air iom-fhillteachd coimpiutaireachd ann an aon chlàr:

A 'cur caraid ris
A’ coimhead air caraid
A 'toirt air falbh caraid

Roghainn 1 (bunaiteach)
O (n)
O (n)
O (n)

Roghainn 2 (cunnt)
O (1)
O (n)
O (n)

Roghainn 3 (colbh)
O (1)
O (1)
O (1)

Roghainn 4 (sreath)
O (1)
O (1)
O (1)

Roghainn 5 (hash)
O (1)
O (1)
O (1)

Mar a chì thu, tha e coltach gur e roghainnean 3-5 an fheadhainn as fheàrr agus gu teòiridheach a’ dèanamh cinnteach gun tèid a h-uile suidheachadh làimhseachaidh dàta riatanach a chuir an gnìomh ann an ùine sheasmhach. Fo chumhachan na h-obrach againn, chan eil riatanas soilleir ann liosta fhaighinn de charaidean an neach-cleachdaidh gu lèir, ach ann an gnìomhan pròiseict fìor, bhiodh e math dhuinne, mar luchd-anailis math, “a bhith an dùil” gum faodadh a leithid de ghnìomh èirigh agus “sgaoileadh connlach.” Mar sin, tha mo cho-fhaireachdainn air taobh roghainn 3. Ach tha e glè choltach ann am fìor phròiseact gum faodadh an t-iarrtas seo a bhith air a rèiteachadh le dòighean eile mar-thà, mar sin, às aonais sealladh coitcheann air an duilgheadas gu lèir, tha e nas fheàrr gun a bhith a 'dèanamh. co-dhùnaidhean deireannach.

Ag ullachadh an deuchainn

Bu mhath leam na h-argamaidean teòiridheach gu h-àrd a dhearbhadh ann an cleachdadh - b 'e seo amas a' bheachd a dh'èirich thairis air an deireadh-sheachdain fhada. Gus seo a dhèanamh, feumar astar obrachaidh ar “tagradh cumhach” a mheasadh anns a h-uile suidheachadh a chaidh a mhìneachadh airson an stòr-dàta a chleachdadh, a bharrachd air an àrdachadh san ùine seo le meud an lìonra sòisealta a tha a’ sìor fhàs (n). Is e am paramadair targaid anns a bheil ùidh againn agus a thomhaiseas sinn tron ​​​​deuchainn an ùine a chaitheas an “tagradh cumhach” gus aon “gnìomh gnìomhachais” a dhèanamh. Le “malairt gnìomhachais” tha sinn a’ ciallachadh aon de na leanas:

  • A’ cur aon charaid ùr ris
  • A’ sgrùdadh a bheil Cleachdaiche A na charaid do chleachdaiche B
  • A 'toirt air falbh aon charaid

Mar sin, a’ toirt aire do na riatanasan a tha air am mìneachadh sa chiad aithris, tha an suidheachadh dearbhaidh a’ nochdadh mar a leanas:

  • Clàradh dàta. Dèan air thuaiream lìonra tùsail de mheud n. Gus faighinn nas fhaisge air an “fìor shaoghal”, tha an àireamh de charaidean a tha aig gach neach-cleachdaidh cuideachd na chaochladair air thuaiream. Tomhais an ùine anns am bi an “tagradh cumhach” againn a’ sgrìobhadh a h-uile dàta a chaidh a chruthachadh gu HBase. An uairsin roinn an ùine a thig às leis an àireamh iomlan de charaidean a bharrachd - seo mar a gheibh sinn an ùine chuibheasach airson aon “gnìomh gnìomhachais”
  • A 'leughadh dàta. Airson gach neach-cleachdaidh, cruthaich liosta de “pearsantan” airson am feum thu freagairt fhaighinn a bheil an neach-cleachdaidh fo-sgrìobhadh dhaibh no nach eil. Tha fad an liosta = timcheall air an àireamh de charaidean an neach-cleachdaidh, agus airson leth de na caraidean sgrùdaichte bu chòir am freagairt a bhith “Tha”, agus airson an leth eile - “Chan eil”. Tha an t-seic air a dhèanamh ann an òrdugh gus am bi na freagairtean “Tha” agus “Chan eil” mu seach (is e sin, anns a h-uile dàrna cùis feumaidh sinn a dhol tro gach colbh den loidhne airson roghainnean 1 agus 2). Tha an ùine sgrìonaidh iomlan an uairsin air a roinn leis an àireamh de charaidean a chaidh a dhearbhadh gus an ùine sgrìonaidh cuibheasach fhaighinn airson gach cuspair.
  • Cur às do dhàta. Thoir air falbh a h-uile caraidean bhon neach-cleachdaidh. A bharrachd air an sin, tha an òrdugh cuir às air thuaiream (is e sin, bidh sinn “ag atharrachadh” an liosta thùsail a chaidh a chleachdadh airson an dàta a chlàradh). Tha an ùine sgrùdaidh iomlan an uairsin air a roinn leis an àireamh de charaidean a chaidh a thoirt air falbh gus an ùine chuibheasach airson gach seic fhaighinn.

Feumar na suidheachaidhean a ruith airson gach aon de na 5 roghainnean modail dàta agus airson diofar mheudan den lìonra sòisealta gus faicinn mar a bhios ùine ag atharrachadh mar a bhios e a’ fàs. Taobh a-staigh aon n, feumaidh ceanglaichean san lìonra agus an liosta de luchd-cleachdaidh airson sgrùdadh a bhith, gu dearbh, an aon rud airson na 5 roghainnean gu lèir.
Airson tuigse nas fheàrr, gu h-ìosal tha eisimpleir de dhàta a chaidh a chruthachadh airson n= 5. Tha an “gineadair” sgrìobhte a’ toirt a-mach trì faclairean ID mar thoradh:

  • tha a’ chiad fhear airson a chuir a-steach
  • tha an dàrna fear airson sgrùdadh
  • treas - airson a sguabadh às

{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 друзей

Mar a chì thu, is e a h-uile ID nas motha na 10 anns an fhaclair airson sgrùdadh dìreach an fheadhainn a bheir gu cinnteach am freagairt meallta. Bithear a’ cuir a-steach, a’ sgrùdadh agus a’ cuir às do “charaidean” gu dìreach san t-sreath a tha air a shònrachadh anns an fhaclair.

Chaidh an deuchainn a dhèanamh air laptop a bha a’ ruith Windows 10, far an robh HBase a’ ruith ann an aon inneal Docker, agus Python le Jupyter Notebook a’ ruith anns an fhear eile. Fhuair Docker cores 2 CPU agus 2 GB de RAM. Chaidh a h-uile loidsig, leithid aithris air an “tagradh cumhach” agus am “pìobaireachd” airson dàta deuchainn a ghineadh agus ùine a thomhas, a sgrìobhadh ann am Python. Chaidh an leabharlann a chleachdadh airson obrachadh le HBase bonn sona, gus hashes obrachadh a-mach (MD5) airson roghainn 5 - hashlib

A’ toirt aire do chumhachd coimpiutaireachd laptop sònraichte, chaidh foillseachadh airson n = 10, 30, … a thaghadh gu deuchainneach. 170 - nuair a bha an ùine obrachaidh iomlan den chearcall deuchainn iomlan (a h-uile suidheachadh airson a h-uile roghainn airson a h-uile n) eadhon nas reusanta agus iomchaidh aig aon phàrtaidh tì (gu cuibheasach 15 mionaidean).

An seo feumar a ràdh nach eil sinn gu sònraichte a’ measadh figearan coileanaidh iomlan anns an deuchainn seo. Is dòcha nach bi eadhon coimeas coimeasach de dhà roghainn eadar-dhealaichte gu tur ceart. A-nis tha ùidh againn ann an nàdar an atharrachaidh ann an ùine a rèir n, leis gu bheil e a’ toirt aire don rèiteachadh gu h-àrd den “seasamh deuchainn”, tha e gu math duilich tuairmsean ùine fhaighinn “air an glanadh” de bhuaidh air thuaiream agus factaran eile ( agus cha deach a leithid de dh'obair a shuidheachadh).

Toradh deuchainn

Is e a’ chiad deuchainn mar a bhios an ùine a thathar a’ caitheamh a’ lìonadh liosta nan caraidean ag atharrachadh. Tha an toradh anns a’ ghraf gu h-ìosal.
Feartan dealbhadh modail dàta airson NoSQL
Tha roghainnean 3-5, mar a bhiodh dùil, a’ sealltainn ùine “malairt gnìomhachais” cha mhòr seasmhach, nach eil an urra ri fàs meud an lìonraidh agus eadar-dhealachadh neo-sgaraichte ann an coileanadh.
Tha Roghainn 2 cuideachd a’ sealltainn coileanadh seasmhach, ach beagan nas miosa, cha mhòr dìreach 2 uair an coimeas ri roghainnean 3-5. Agus chan urrainn dha seo ach gàirdeachas a dhèanamh, leis gu bheil e co-cheangailte ri teòiridh - anns an dreach seo tha an àireamh de ghnìomhachd I / O gu / bho HBase dìreach 2 uair nas motha. Faodaidh seo a bhith na fhianais neo-dhìreach gu bheil a’ bheing deuchainn againn, ann am prionnsapal, a’ toirt seachad deagh chruinneas.
Tha roghainn 1 cuideachd, mar a bhiodh dùil, a’ tionndadh a-mach mar an fheadhainn as slaodaiche agus a’ nochdadh àrdachadh sreathach san ùine a thathar a’ caitheamh air a chèile a chur ri meud an lìonraidh.
Bheir sinn sùil a-nis air toraidhean an dàrna deuchainn.
Feartan dealbhadh modail dàta airson NoSQL
Bidh roghainnean 3-5 a 'giùlain a-rithist mar a bhiodh dùil - ùine seasmhach, neo-eisimeileach bho mheud an lìonra. Tha Roghainnean 1 agus 2 a’ nochdadh àrdachadh sreathach ann an ùine mar a bhios meud an lìonra ag àrdachadh agus coileanadh coltach ris. A bharrachd air an sin, tha roghainn 2 a’ tionndadh a-mach gu bhith beagan nas slaodaiche - a rèir coltais mar thoradh air an fheum air a’ cholbh “cunnt” a bharrachd a leughadh agus a phròiseasadh, a bhios a’ fàs nas follaisiche mar a bhios n a’ fàs. Ach stadaidh mi bho bhith a’ tighinn gu co-dhùnaidhean sam bith, leis gu bheil cruinneas a’ choimeas seo gu ìre mhath ìosal. A bharrachd air an sin, dh'atharraich na co-mheasan sin (dè an roghainn, 1 no 2, nas luaithe) bho ruith gu ruith (fhad 'sa tha iad a' cumail suas nàdar an eisimeileachd agus "amhach agus amhach").

Uill, tha an graf mu dheireadh mar thoradh air deuchainn toirt air falbh.

Feartan dealbhadh modail dàta airson NoSQL

A-rithist, chan eil iongnadh sam bith an seo. Bidh roghainnean 3-5 a 'coileanadh toirt air falbh ann an ùine shìorraidh.
A bharrachd air an sin, gu h-inntinneach, tha roghainnean 4 agus 5, eu-coltach ris na suidheachaidhean a bh’ ann roimhe, a’ nochdadh coileanadh gu math nas miosa na roghainn 3. A rèir choltais, tha an obair cuir às do shreath nas daoire na gnìomhachd cuir às don cholbh, a tha sa chumantas loidsigeach.

Tha Roghainnean 1 agus 2, mar a bhiodh dùil, a’ nochdadh àrdachadh sreathach ann an ùine. Aig an aon àm, tha roghainn 2 gu cunbhalach nas slaodaiche na roghainn 1 - mar thoradh air an obair I/O a bharrachd gus an colbh cunntais “a chumail suas”.

Co-dhùnaidhean coitcheann an deuchainn:

  • Tha roghainnean 3-5 a’ nochdadh barrachd èifeachdais leis gu bheil iad a’ gabhail brath air HBase; A bharrachd air an sin, tha an coileanadh eadar-dhealaichte an coimeas ri chèile le seasmhach agus chan eil e an urra ri meud an lìonra.
  • Cha deach an diofar eadar roghainnean 4 agus 5 a chlàradh. Ach chan eil seo a 'ciallachadh nach bu chòir roghainn 5 a chleachdadh. Tha e coltach nach do leig an suidheachadh deuchainneach a chaidh a chleachdadh, a’ toirt aire do fheartan coileanaidh a’ bheing deuchainn, a lorg.
  • Dhaingnich nàdar an àrdachaidh san ùine a dh’ fheumar gus “obair gnìomhachais” a dhèanamh le dàta san fharsaingeachd an àireamhachadh teòiridheach a fhuaireadh roimhe airson a h-uile roghainn.

Epilogue

Cha bu chòir na deuchainnean garbh a chaidh a dhèanamh a bhith air an gabhail mar fhìor fhìrinn. Tha mòran fhactaran ann nach deach aire a thoirt dhaibh agus a chuir às do na toraidhean (tha na caochlaidhean sin gu sònraichte rim faicinn anns na grafaichean le meud lìonra beag). Mar eisimpleir, an astar gluasad, a tha air a chleachdadh le happybase, an tomhas-lìonaidh agus an dòigh air an loidsig a sgrìobh mi ann am Python a chuir an gnìomh (chan urrainn dhomh a ràdh gun deach an còd a sgrìobhadh gu h-èifeachdach agus gu h-èifeachdach a’ cleachdadh comasan a h-uile pàirt), is dòcha feartan tasgadan HBase, gnìomhachd cùl-fhiosrachaidh Windows 10 air mo laptop, msaa. San fharsaingeachd, faodaidh sinn gabhail ris gu bheil a h-uile àireamhachadh teòiridheach air dearbhadh gu bheil iad dligheach. Uill, no co-dhiù cha robh e comasach an diùltadh le leithid de “ionnsaigh aghaidh”.

Ann an co-dhùnadh, molaidhean airson a h-uile duine a tha dìreach a’ tòiseachadh a’ dealbhadh mhodalan dàta ann an HBase: eas-chruthach bho eòlas a bh’ ann roimhe ag obair le stòran-dàta dàimh agus cuimhnich air na “àitheantan”:

  • Nuair a bhios sinn a’ dealbhadh, bidh sinn a’ dol air adhart bhon ghnìomh agus pàtrain làimhseachadh dàta, agus chan ann bhon mhodail fearainn
  • Ruigsinneachd èifeachdach (às aonais sgrùdadh làn-bhùird) - dìreach le iuchair
  • Denormalachadh
  • Faodaidh colbhan eadar-dhealaichte a bhith ann an diofar shreathan
  • Co-dhèanamh fiùghantach de luchd-labhairt

Source: www.habr.com

Cuir beachd ann