Cleddyfau trysor ar gyfer storio data yw byd-eang. Coed. Rhan 2

Cleddyfau trysor ar gyfer storio data yw byd-eang. Coed. Rhan 2Cychwyn arni - gweler rhan 1.

3. Amrywiadau o strwythurau wrth ddefnyddio globals

Mae gan strwythur fel coeden orchymyn amrywiol achosion arbennig. Gadewch i ni ystyried y rhai sydd â gwerth ymarferol wrth weithio gyda byd-eang.

3.1 Achos arbennig 1. Un nod heb ganghennau


Cleddyfau trysor ar gyfer storio data yw byd-eang. Coed. Rhan 2Gellir defnyddio globals nid yn unig fel arae, ond hefyd fel newidynnau rheolaidd. Er enghraifft, fel cownter:

Set ^counter = 0  ; установка счётчика
Set id=$Increment(^counter) ;  атомарное инкрементирование

Yn yr achos hwn, gall y byd-eang, yn ychwanegol at ei ystyr, hefyd gael canghennau. Nid yw un yn eithrio'r llall.

3.2 Achos arbennig 2. Un fertig a llawer o ganghennau

Yn gyffredinol, mae hwn yn sylfaen gwerth allweddol glasurol. Ac os byddwn yn arbed tuple o werthoedd fel gwerth, byddwn yn cael tabl cyffredin iawn gydag allwedd gynradd.

Cleddyfau trysor ar gyfer storio data yw byd-eang. Coed. Rhan 2

Er mwyn gweithredu tabl ar fyd-eang, bydd yn rhaid i ni gynhyrchu rhesi ein hunain o'r gwerthoedd colofn, ac yna eu cadw i'r byd-eang gan ddefnyddio'r allwedd gynradd. Er mwyn ei gwneud hi'n bosibl rhannu'r llinyn yn golofnau eto wrth ddarllen, gallwch ddefnyddio:

  1. cymeriadau amffinydd.
    Set ^t(id1) = "col11/col21/col31"
    Set ^t(id2) = "col12/col22/col32"
  2. cynllun anhyblyg lle mae pob maes yn llenwi nifer rhagnodedig o beit. Fel y gwneir mewn cronfeydd data perthynol.
  3. ffwythiant arbennig $LB (ar gael yn Cache), sy'n creu cyfres o werthoedd.
    Set ^t(id1) = $LB("col11", "col21", "col31")
    Set ^t(id2) = $LB("col12", "col22", "col32")

Yn ddiddorol, nid yw'n anodd defnyddio byd-eang i wneud rhywbeth tebyg i fynegeion eilaidd mewn cronfeydd data perthynol. Gadewch i ni alw mynegai strwythurau o'r fath yn fyd-eang. Mae mynegai byd-eang yn goeden ategol ar gyfer chwilio'n gyflym am feysydd nad ydynt yn rhan o brif allwedd y prif fyd-eang. Er mwyn ei lenwi a'i ddefnyddio, mae angen i chi ysgrifennu cod ychwanegol.

Gadewch i ni greu mynegai byd-eang ar y golofn gyntaf.

Set ^i("col11", id1) = 1
Set ^i("col12", id2) = 1

Nawr, i chwilio'n gyflym am wybodaeth yn y golofn gyntaf, mae'n rhaid i ni edrych i mewn i'r byd-eang ^i a darganfyddwch y bysellau cynradd (id) sy'n cyfateb i werth dymunol y golofn gyntaf.

Wrth fewnosod gwerth, gallwn greu'r gwerth a'r mynegai byd-eang ar unwaith ar gyfer y meysydd gofynnol. Ac ar gyfer dibynadwyedd, gadewch i ni lapio'r cyfan mewn trafodiad.

TSTART
Set ^t(id1) = $LB("col11", "col21", "col31")
Set ^i("col11", id1) = 1
TCOMMIT

Manylion ar sut i wneud hynny ar M tablau ar fyd-eang, efelychu mynegeion eilaidd.

Bydd tablau o'r fath yn gweithio mor gyflym ag mewn cronfeydd data traddodiadol (neu hyd yn oed yn gyflymach) os yw'r swyddogaethau ar gyfer mewnosod/diweddaru/dileu rhesi wedi'u hysgrifennu yn COS/M a'u llunio.Gwiriais y datganiad hwn gyda phrofion ar INSERT swmp a SELECT yn un tabl dwy golofn, gan gynnwys defnyddio'r gorchmynion TSTART a TCOMMIT (trafodion).

Nid wyf wedi profi senarios mwy cymhleth gyda mynediad cydamserol a thrafodion cyfochrog.

Heb ddefnyddio trafodion, y gyfradd fewnosod oedd 778 o fewnosodiadau/eiliad fesul miliwn o werthoedd.
Gyda 300 miliwn o werthoedd - 422 mewnosodiadau/eiliad.

Wrth ddefnyddio trafodion - 572 o fewnosodiadau/eiliad ar gyfer mewnosodiadau 082M. Perfformiwyd yr holl weithrediadau o god M a luniwyd.
Mae gyriannau caled yn rheolaidd, nid SSD. RAID5 gyda Write-back. Phenom II 1100T prosesydd.

I brofi cronfa ddata SQL mewn ffordd debyg, mae angen i chi ysgrifennu gweithdrefn wedi'i storio a fydd yn perfformio mewnosodiadau mewn dolen. Wrth brofi MySQL 5.5 (storfa InnoDB), gan ddefnyddio'r dull hwn derbyniais niferoedd dim mwy na mewnosodiadau 11K yr eiliad.
Ydy, mae gweithredu tablau ar fyd-eang yn edrych yn fwy cymhleth nag mewn cronfeydd data perthynol. Felly, mae gan gronfeydd data diwydiannol ar fyd-eang fynediad SQL i symleiddio gwaith gyda data tabl.

Cleddyfau trysor ar gyfer storio data yw byd-eang. Coed. Rhan 2Yn gyffredinol, os na fydd y sgema data yn newid yn aml, nid yw'r cyflymder mewnosod yn hanfodol a gellir cynrychioli'r gronfa ddata gyfan yn hawdd ar ffurf tablau wedi'u normaleiddio, yna mae'n haws gweithio gyda SQL, gan ei fod yn darparu lefel uwch o dynnu. .

Cleddyfau trysor ar gyfer storio data yw byd-eang. Coed. Rhan 2Yn yr achos penodol hwn roeddwn i eisiau dangos hynny gall globals weithredu fel lluniwr ar gyfer creu cronfeydd data eraill. Fel cyfosodwr y gellir ysgrifennu ieithoedd eraill ynddo. Dyma enghreifftiau o sut y gallwch greu analogau ar fyd-eang gwerth allweddol, rhestrau, setiau, tablau, cronfeydd data sy'n canolbwyntio ar ddogfennau.

Os oes angen i chi greu rhyw fath o gronfa ddata ansafonol heb fawr o ymdrech, yna dylech edrych tuag at fyd-eang.

3.3 Achos arbennig 3. Coeden dwy lefel, mae gan bob nod o'r ail lefel nifer sefydlog o ganghennau

Cleddyfau trysor ar gyfer storio data yw byd-eang. Coed. Rhan 2Mae'n debyg eich bod wedi ei ddyfalu: mae hwn yn weithrediad amgen o dablau ar fyd-eang. Gadewch i ni gymharu'r gweithrediad hwn â'r un blaenorol.

Tablau ar goeden dwy lefel yn erbyn. ar goeden un lefel.

Cons
Manteision

  1. Arafach ar gyfer mewnosod, gan fod angen i chi osod nifer y nodau hafal i nifer y colofnau.
  2. Mwy o ddefnydd o le ar ddisg. Gan fod mynegeion byd-eang (sy'n cael eu deall fel mynegeion arae) gydag enwau colofn yn cymryd lle ar y ddisg ac yn cael eu dyblygu ar gyfer pob rhes.

  1. Mynediad cyflymach i werthoedd colofnau unigol, gan nad oes angen dosrannu'r llinyn. Yn ôl fy mhrofion, mae'n 11,5% yn gyflymach ar 2 golofn a mwy ar nifer fwy o golofnau.
  2. Haws newid sgema data
  3. Cod mwy clir

Casgliad: nid i bawb. Gan mai cyflymder yw un o fanteision mwyaf allweddol byd-eang, nid oes llawer o ddiben defnyddio'r gweithrediad hwn, oherwydd mae'n debygol na fydd yn perfformio'n gyflymach na thablau mewn cronfeydd data perthynol.

3.4 Achos cyffredinol. Coed a choed wedi'u harchebu

Mae unrhyw strwythur data y gellir ei gynrychioli fel coeden yn cyd-fynd yn berffaith â byd-eang.

3.4.1 Gwrthrychau gyda gwrthrychau

Cleddyfau trysor ar gyfer storio data yw byd-eang. Coed. Rhan 2

Dyma faes defnydd traddodiadol byd-eang. Yn y maes meddygol mae yna nifer fawr o afiechydon, meddyginiaethau, symptomau a dulliau triniaeth. Mae'n afresymol creu bwrdd gyda miliwn o feysydd ar gyfer pob claf. Ar ben hynny, bydd 99% o'r meysydd yn wag.

Dychmygwch gronfa ddata SQL o dablau: “claf” ~ 100 o feysydd, “Meddygaeth” - 000 o feysydd, “Therapi” - 100 o feysydd, “Cymhlethdodau” - 000 o feysydd, ac ati. ac yn y blaen. Neu gallwch greu cronfa ddata o filoedd lawer o dablau, pob un ar gyfer math penodol o glaf (a gallant orgyffwrdd!), triniaethau, meddyginiaethau, a miloedd yn fwy o fyrddau ar gyfer cysylltiadau rhwng y tablau hyn.

Mae byd-eang yn ddelfrydol ar gyfer meddygaeth, gan eu bod yn caniatáu ichi greu disgrifiad cywir ar gyfer pob claf o'i hanes meddygol, amrywiol therapïau, a gweithredoedd meddyginiaethau, ar ffurf coeden, heb wastraffu gofod disg ychwanegol ar golofnau gwag, fel y byddai fod yn wir mewn achos perthynol.

Cleddyfau trysor ar gyfer storio data yw byd-eang. Coed. Rhan 2Gan ddefnyddio globals mae'n gyfleus creu cronfa ddata gyda data am bobl, pan mae'n bwysig cronni a systematize uchafswm o wybodaeth amrywiol am y cleient. Mae galw am hyn mewn meddygaeth, bancio, marchnata, archifo a meysydd eraill

.
Wrth gwrs, yn SQL gallwch hefyd efelychu coeden gyda dim ond ychydig o fyrddau (EAV, 1,2,3,4,5,6,7,8,9,10), fodd bynnag mae hyn yn llawer mwy cymhleth a bydd yn arafach. Yn y bôn, byddai'n rhaid i chi ysgrifennu byd-eang sy'n gweithio ar dablau a chuddio'r holl waith gyda thablau o dan haen tynnu. Mae'n anghywir efelychu technoleg lefel is (byd-eang) gan ddefnyddio technoleg lefel uwch (SQL). Anaddas.

Nid yw'n gyfrinach y gall gymryd cryn dipyn o amser i newid y sgema data ar dablau anferth (ALTER TABLE). Mae MySQL, er enghraifft, yn NEWID TABL YCHWANEGU | COLOFN GALWAD trwy gopïo gwybodaeth yn llwyr o'r hen dabl i'r bwrdd newydd (peiriannau MyISAM, InnoDB wedi'u profi). A all hongian cronfa ddata weithredol gyda biliynau o gofnodion am ddyddiau, os nad wythnosau.

Cleddyfau trysor ar gyfer storio data yw byd-eang. Coed. Rhan 2Nid yw newid y strwythur data os ydym yn defnyddio byd-eang yn costio dim i ni. Ar unrhyw adeg gallwn ychwanegu unrhyw eiddo newydd sydd ei angen arnom at unrhyw wrthrych, ar unrhyw lefel o'r hierarchaeth. Gellir rhedeg newidiadau sy'n gysylltiedig ag ailenwi canghennau yn y cefndir ar gronfa ddata sy'n rhedeg.


Felly, o ran storio gwrthrychau â nifer fawr o briodweddau dewisol, mae byd-eang yn ddewis gwych.

Ar ben hynny, gadewch imi eich atgoffa bod mynediad i unrhyw un o'r eiddo yn syth, oherwydd yn y byd-eang mae pob llwybr yn goed B.

Mae cronfeydd data byd-eang, yn gyffredinol, yn fath o gronfa ddata sy'n canolbwyntio ar ddogfennau gyda'r gallu i storio gwybodaeth hierarchaidd. Felly, gall cronfeydd data sy'n canolbwyntio ar ddogfennau gystadlu â byd-eang ym maes storio cofnodion meddygol. Ond nid yw'n union yr un fath o hydGadewch i ni gymryd MongoDB i'w gymharu. Yn y parth hwn mae'n colli i'r byd-eang am y rhesymau canlynol:

  1. Maint y ddogfen. Mae'r uned storio yn destun mewn fformat JSON (yn fwy manwl gywir BSON) gydag uchafswm cyfaint o tua 16MB. Gwnaethpwyd y cyfyngiad yn benodol fel nad yw cronfa ddata JSON yn arafu wrth ddosrannu os yw dogfen JSON enfawr yn cael ei storio ynddi ac yna'n cael ei chyrchu gan feysydd. Dylai'r ddogfen hon gynnwys yr holl wybodaeth am y claf. Gwyddom oll pa mor drwchus y gall cofnodion cleifion fod. Mae uchafswm maint cerdyn o 16MB yn rhoi diwedd ar unwaith i gleifion y mae eu cerdyn afiechyd yn cynnwys ffeiliau MRI, sganiau pelydr-X ac astudiaethau eraill. Mewn un gangen o'r byd-eang gallwch gael gigabeit a terabytes o wybodaeth. Mewn egwyddor, gallwn roi diwedd ar hyn, ond byddaf yn parhau.
  2. Amser o ymwybyddiaeth/newid/dileu eiddo newydd yn siart y claf. Rhaid i gronfa ddata o'r fath ddarllen y map cyfan i'r cof (mae hyn yn swm mawr!), dosrannu BSON, ychwanegu/newid/dileu nod newydd, diweddaru mynegeion, ei bacio i mewn i BSON, a'i gadw ar ddisg. Nid oes ond angen i fyd-eang gael mynediad i eiddo penodol a'i drin.
  3. Mynediad cyflym i eiddo unigol. Gyda llawer o eiddo mewn dogfen a'i strwythur aml-lefel, bydd mynediad i eiddo unigol yn gyflymach oherwydd bod pob llwybr yn y byd-eang yn goeden B. Yn BSON, mae'n rhaid i chi ddosrannu'r ddogfen yn llinol i ddod o hyd i'r eiddo a ddymunir.

3.3.2 Araeau cysylltiadol

Mae araeau cysylltiadol (hyd yn oed gydag araeau nythu) yn ffitio'n berffaith ar fyd-eang. Er enghraifft, bydd amrywiaeth o'r fath o PHP yn cael ei arddangos yn y llun cyntaf 3.3.1.

$a = array(
  "name" => "Vince Medvedev",
  "city" => "Moscow",
  "threatments" => array(
    "surgeries" => array("apedicectomy", "biopsy"),
    "radiation" => array("gamma", "x-rays"),
    "physiotherapy" => array("knee", "shoulder")
  )
);

3.3.3 Dogfennau hierarchaidd: XML, JSON

Hefyd yn hawdd ei storio mewn byd-eang. Gellir ei osod mewn gwahanol ffyrdd ar gyfer storio.

XML
Y ffordd hawsaf o ddadelfennu XML yn fyd-eang yw storio priodoleddau tagiau mewn nodau. Ac os oes angen mynediad cyflym at briodoleddau tag, yna gallwn eu symud i ganghennau ar wahân.

Cleddyfau trysor ar gyfer storio data yw byd-eang. Coed. Rhan 2

<note id=5>
<to>Вася</to>
<from>Света</from>
<heading>Напоминание</heading>
<body>Позвони мне завтра!</body>
</note>

Ar COS byddai hyn yn cyfateb i'r cod:

Set ^xml("note")="id=5"
Set ^xml("note","to")="Саша"
Set ^xml("note","from")="Света"
Set ^xml("note","heading")="Напоминание"
Set ^xml("note","body")="Позвони мне завтра!"

Sylw: Ar gyfer XML, JSON, araeau cysylltiadol, gallwch chi feddwl am lawer o wahanol ffyrdd o arddangos ar fyd-eang. Yn yr achos hwn, ni wnaethom adlewyrchu trefn yr is-dagiau yn y tag nodyn. Yn fyd-eang ^xml bydd is-dagiau yn cael eu harddangos yn nhrefn yr wyddor. Er mwyn adlewyrchu'r gorchymyn yn llym, gallwch ddefnyddio, er enghraifft, yr arddangosfa ganlynol:

Cleddyfau trysor ar gyfer storio data yw byd-eang. Coed. Rhan 2
JSON.
Mae'r llun cyntaf o adran 3.3.1 yn dangos adlewyrchiad o'r ddogfen JSON hon:

var document = {
  "name": "Vince Medvedev",
  "city": "Moscow",
  "threatments": {
    "surgeries": ["apedicectomy", "biopsy"],
    "radiation": ["gamma", "x-rays"],
    "physiotherapy": ["knee", "shoulder"]
  },
};

3.3.4 Strwythurau unfath wedi'u cysylltu gan berthnasoedd hierarchaidd

Enghreifftiau: strwythur swyddfeydd gwerthu, lleoliad pobl mewn strwythur MLM, y gronfa ddata o agoriadau mewn gwyddbwyll.

Cronfa ddata debuts. Gallwch ddefnyddio'r amcangyfrif grym strôc fel gwerth mynegrifol y nod cyffredinol. Yna, er mwyn dewis y symudiad cryfaf, bydd yn ddigon i ddewis y gangen sydd â'r pwysau mwyaf. Yn y byd-eang, bydd pob cangen ar bob lefel yn cael ei didoli yn ôl cryfder symud.

Cleddyfau trysor ar gyfer storio data yw byd-eang. Coed. Rhan 2

Strwythur y swyddfeydd gwerthu, strwythur y bobl yn MLM. Gall nodau storio rhai gwerthoedd caching sy'n adlewyrchu nodweddion yr is-goeden gyfan. Er enghraifft, cyfaint gwerthiant is-goeden benodol. Ar unrhyw adeg gallwn gael ffigwr sy'n adlewyrchu cyflawniadau unrhyw gangen.

Cleddyfau trysor ar gyfer storio data yw byd-eang. Coed. Rhan 2

4. Ym mha achosion y mae'n fwyaf buddiol defnyddio byd-eang?

Mae'r golofn gyntaf yn cyflwyno achosion lle byddwch chi'n cael cynnydd cyflymder sylweddol trwy ddefnyddio globals, a'r ail pan fydd y dyluniad neu'r model data yn cael ei symleiddio.

Cyflymder
Rhwyddineb prosesu/cyflwyno data

  1. Mewnosod [gyda didoli awtomatig ar bob lefel], [mynegeio yn ôl prif allwedd]
  2. Tynnu is-goed
  3. Gwrthrychau gyda llawer o eiddo nythu sydd angen mynediad unigol
  4. Strwythur hierarchaidd gyda'r gallu i osgoi canghennau plentyn o unrhyw gangen, hyd yn oed rhai nad ydynt yn bodoli
  5. Tramwyo dyfnder-gyntaf o is-goed
  1. Gwrthrychau/endidau gyda nifer enfawr o eiddo/endidau dewisol [a/neu nythu]
  2. Data heb sgema. Pan fydd eiddo newydd yn gallu ymddangos yn aml a hen rai yn diflannu.
  3. Mae angen i chi greu cronfa ddata bwrpasol.
  4. Sail llwybrau a choed penderfynu. Pan fo'n gyfleus cynrychioli llwybrau fel coeden.
  5. Cael gwared ar strwythurau hierarchaidd heb ddefnyddio ailadrodd

Parhad “Cleddyfau trysor ar gyfer storio data yw byd-eang. Araeau gwasgaredig. Rhan 3".

Ymwadiad: Yr erthygl hon a fy sylwadau iddi yw fy marn i ac nid oes ganddynt unrhyw berthynas â sefyllfa swyddogol InterSystems Corporation.

Ffynhonnell: hab.com

Ychwanegu sylw