Globaale — andmete salvestamise mÔÔgad-ladenetsed. Harulduse massiivid. Osa 3.

Globaale — andmete salvestamise mÔÔgad-ladenetsed. Harulduse massiivid. Osa 3.Eelmine osa (1, 2) rÀÀkisime globaalsusest kui puudest, nĂŒĂŒd uurime globaalsust kui hĂ”redaid massiive.

HĂ”re massiiv on eriline massiivitĂŒĂŒp, kus enamus vÀÀrtustest on samad.

Praktikas esinevad sedavÔrd suured hÔredad massiivid, et ei ole mÔtet mÀluruumi raisata samade elementide tÔttu. SeetÔttu on mÔistlik hÔredeid massiive rakendada nii, et mÀlu ei raiskataks samade vÀÀrtuste hoidmisele.
MĂ”nes programmeerimiskeeles on hĂ”redad massiivid juba keele osa, nĂ€iteks J, MATLAB. Teistes programmeerimiskeeltes on spetsiaalsed teegid, mille abil neid rakendada. C++ jaoks — Eigen ja palju muud.

Globaalsed olendid on head kandidaadid hÔredate massiivide rakendamiseks, sest:

  1. Nad hoiavad ainult teatud sÔlmede vÀÀrtusi, mitte mÀÀramata vÀÀrtusi;
  2. SÔlme vÀÀrtusele pÀÀsemise liides sarnaneb vÀga sellele, kuidas paljudes programmeerimiskeeltes rakendatakse mitmemÔÔtmelise massiivi elementi.
    Set ^a(1, 2, 3)=5
    Write ^a(1, 2, 3)

  3. Gloobaal on piisavalt madala taseme struktuur andmete hoidmiseks, seega omab see suurepĂ€raseid kiirusomadusi (sadu tuhandeid kuni kĂŒmneid miljoneid tehinguid sekundis, sĂ”ltuvalt riistvarast, vt. 1)

Kuna gloobaal on pĂŒsiv struktuur, on mĂ”istlik rakendada hĂ”redeid massiive, kui on juba ette teada, et operatiivmĂ€lu mahust ei piisa.

Üks hĂ”rede massiivi rakenduse omadustest on vaikimisi mingi vÀÀrtuse tagastamine, kui pöördutakse mÀÀramata lahtri poole.

Seda saab rakendada, kasutades funktsiooni $GET COS-is. Antud nÀites kÀsitletakse 3-mÔÔtmelist massiivi.

SET a = $GET(^a(x,y,z), defValue)

Millistes ĂŒlesannetes on hĂ”redaid massiive vaja ja kuidas gloobaalid saavad abiks olla?

Siduva (seosetabeli) maatriks

Selliseid maatrikseid kasutatakse graafide esitlemiseks:

Globaale — andmete salvestamise mÔÔgad-ladenetsed. Harulduse massiivid. Osa 3.

Ilmselgelt, et mida suurem on graaf, seda rohkem nullvÀÀrtusi on maatriksis. Kui nÀiteks vÔtta sotsiaalvÔrgustiku graaf ja esitada see sarnases maatriksis, siis koosneb see peaaegu tÀielikult nullidest, st see on hÔre massiiv.

Set ^m(id1, id2) = 1 
Set ^m(id1, id3) = 1 
Set ^m(id1, id4) = 1 
Set ^m(id1) = 3 
Set ^m(id2, id4) = 1 
Set ^m(id2, id5) = 1 
Set ^m(id2) = 2
....

Antud nĂ€ites salvestame gloobaali ^m ĂŒhenduvuse maatriks, samuti iga sĂ”lme servade arv (kes kellega sĂ”brustab ja sĂ”prade arv).

Kui graafis on elemente mitte rohkem kui 29 miljonit (see number saadakse 8 * maksimaalne stringi suurus), siis on olemas veelgi ökonoomsem viis selliste maatriksite salvestamiseks — bittide read, kuna nende rakenduses optimeerivad suured tĂŒhimikud eriliselt.

Bittide ridade manipuleerimine toimub funktsiooni $BIT.

; bit, seadistamine
SET $BIT(rowID, positionID) = 1
; bit, saamine
Write $BIT(rowID, positionID)

LĂ”pliku automaadi ĂŒleminekute tabel

Kuna lĂ”pliku automaadi ĂŒlemineku graaf on tavaline graaf, on lĂ”pliku automaadi ĂŒleminekute tabel sama, millest eespool rÀÀgiti — see on samuti adjektiivmaatriks.

Raku automaadid

Globaale — andmete salvestamise mÔÔgad-ladenetsed. Harulduse massiivid. Osa 3.

Tuntuim raku automaat on mĂ€ng "Elu", mille tĂ”ttu tema reeglid (kui rakul on palju naabreid — see sureb) esindab hĂ”redat masiivi.

Steven Wolfram peab raku automate uus teaduse valdkond. . Aastal 2002 avaldas ta 1280-lehekĂŒljelise raamatu "Uus teadustĂŒĂŒp", kus ta laialdaselt vĂ€idab, et edusammud raku automaatide valdkonnas ei ole isoleeritud, vaid on piisavalt stabiilsed ja omavad suurt tĂ€htsust kĂ”igis teaduse valdkondades.On tĂ”estatud, et iga arvutuslik algoritm, mida saab arvutis teostada, saab rakendada raku automaatide abil. Raku automate kasutatakse dĂŒnaamiliste keskkondade ja sĂŒsteemide modelleerimiseks, algoritmiliste probleemide lahendamiseks ja teiste eesmĂ€rkide saavutamiseks.

Kui meil on tohutu ala ja peame salvestama kÔik raku automaadi vahepealsed seisundid, on tÀiesti mÔistlik kasutada globaalset.

Kartoograafia

Esimene asi, mis mulle pĂ€he tuleb, kui rÀÀkida hĂ”redate masiivide kasutamisest — on kaartide ĂŒlesanded.

Üldiselt on kaartidel vĂ€ga palju tĂŒhja ruumi. Kui kaarti kujutada suurte pikslitena, siis 71% Maa pikslitest on ookean. HĂ”re maatriks. Ja kui joonistada vaid inimkĂ€te tekitatud teosed, siis tĂŒhja ruumi on ĂŒle 95%.

Muidugi ei hoia keegi kaarte rastermasiivide kujul, kasutatakse vektorivat esitamist.

Aga mis on vektorikaardid? See on mingi raam ja punktidest koosnevad polĂŒjooned ja polĂŒgoonid.
Aga mis on vektorkaartide olemus? Need on teatud raamistik ning koosnevad punktidest, polĂŒliinidest ja poligonidest.
Tegelikult on punktide ja nende vaheliste sidemete andmebaas.

Üks kĂ”ige ambitsioonikamaid kaardistamise ĂŒlesandeid on meie galaktika kaardistamise missioon Gaia teleskoobiga. Kujutledes, meie galaktika, nagu kogu universum, on ĂŒhtne hĂ”re mass: tohutud tĂŒhjad ruumid, milles on haruldased vĂ€iksed punktid — tĂ€hed. TĂŒhja ruumi on 99,999999

.%. Meie galaktika kaardi salvestamiseks valiti globaalide andmebaas — CachĂ©.

Ma ei tea projekti globaalide tÀpset struktuuri, kuid vÔin eeldada, et see on midagi sellist:

Set ^galaxy(b, l, d) = 1; TĂ€he number kataloogis, kui see on olemas
Set ^galaxy(b, l, d, "name") = "PĂ€ike"
Set ^galaxy(b, l, d, "type") = "tavaline" ; variandid blackhole, quazar, punane kÀÀbus jne.
Set ^galaxy(b, l, d, "weight") = 14E50
Set ^galaxy(b, l, d, "planetes") = 7
Set ^galaxy(b, l, d, "planetes", 1) = "Merkur"
Set ^galaxy(b, l, d, "planetes", 1, weight) = 1E20
...

Kus b, l, d — on galaktilised koordinaadid laius, pikkus ja kaugus PĂ€ikesest.

Globaalide paindlik struktuur vÔimaldab salvestada igasuguseid tÀhti ja planeetide omadusi, kuna globaalide andmebaasid on skeemivabad (scheme-less).

Meie universumi kaardi salvestamiseks valiti Caché mitte ainult paindlikkuse tÔttu, vaid ka selle tÔttu, et see salvestab andmevooge vÀga kiiresti, samal ajal luues indekseeritud globaalid kiireks otsimiseks.

Kui aga naasta Maale, siis globaalidesse loodi kaardistamisprojektid OpenStreetMap XAPI ja OpenStreetMapi fork — FOSM.

Hiljuti Caché hackathonil rakendati georuumilisi indekse Geospatial. Ootame artikli autoritelt teavet juurutamise detailide kohta.

Ruumiliste indeksite rakendamine globaalides OpenStreetMap XAPI-s

Pildid on pÀrit selles esitluses.

Kogu maakera jaguneb ruutudeks, siis vÀikesteks ruutudeks, ja vÀiksed ruudud jaotatakse veelgi vÀiksemateks ruutudeks jne. KokkuvÔttes saame hierarhilise struktuuri, mille jaoks globaalid on loodud.

Globaale — andmete salvestamise mÔÔgad-ladenetsed. Harulduse massiivid. Osa 3.

Igal ajal saame praktiliselt koheselt nÔuda vajalikku ruutu vÔi selle eemaldada, samal ajal tagastatakse kÔik vÀikesed ruudud vÔi need puhastatakse.

Sarnast skeemi globaalides on vÔimalik rakendada mitmel viisil.

Variant 1:

Set ^m(a, b, a, c, d, a, b,c, d, a, b, a, c, d, a, b,c, d, a, 1) = idEsimesePunkti
Set ^m(a, b, a, c, d, a, b,c, d, a, b, a, c, d, a, b,c, d, a, 2) = idTeisePunkti
...

Variant 2:

Set ^m('abacdabcdabacdabcda', 1) = idEsimesePunkti
Set ^m('abacdabcdabacdabcda', 2) = idTeisePunkti
...

MĂ”lemal juhul on COS/M-is lihtne taotleda ruutude punkte mis tahes tasemel. Esimeses variandis on ruutude tĂŒkkide puhastamine mistahes tasemel pisut lihtsam, kuid seda harva vajatakse.

NĂ€ide ĂŒhest madalama taseme ruudust:

Globaale — andmete salvestamise mÔÔgad-ladenetsed. Harulduse massiivid. Osa 3.

Siin on mÔned globaalid projektist XAPI: indeksi esitamine globaalides:

Globaale — andmete salvestamise mÔÔgad-ladenetsed. Harulduse massiivid. Osa 3.

Globaal ^way kasutatakse punktide talletamiseks polĂŒliinid (teed, vĂ€iksed jĂ”ed jne) ja polĂŒgoonid (sulgudes piirkonnad: hooned, metsad jne).

Karm klassifikatsioon hÔredate massiivide kasutamisest globaalides.

  1. Me talletame teatud objektide koordinaadid ja nende olekud (kaartimine, rakud automaadid)
  2. Me talletame hÔredaid maatrikseid.

Juhtumi 2 korral, kui pÀrime teatud koordinaati, kus elemendile pole vÀÀrtust mÀÀratud, peame saama hÔreda massiivi elemendi vaikevÀÀrtuse.

Boonused, mida me saame mitmemÔÔtmeliste maatriksite talletamisel globaalides

Kiire eemaldamine ja/vÔi ruutude valikud, mis on mitmekordsed ridadele, tasapindadele, kuubikutele jne. Juhtudel, kus kasutatakse tÀisarvulisi indekseid, vÔib osutuda kasulikuks kiire eemaldamise ja/vÔi ruutude valikute vÔimalus, mis on mitmekordsed ridadele, tasapindadele, kuubikutele jne.

KĂ€suga Tapa me saame eemaldada nii eraldi elementi, rida kui ka terve tasapinna. TĂ€nu globaalide omadustele toimub see vĂ€ga kiiresti — tuhandete kordi kiiremini kui elemendi eemaldamine.

Joonisel on nÀidatud kolmemÔÔtmeline massiiv globaalides ^a ja erinevad eemaldamise viisid.

Globaale — andmete salvestamise mÔÔgad-ladenetsed. Harulduse massiivid. Osa 3.

Ruudukeste valimiseks tuntud indeksite alusel saab kasutada kÀsku Merge.

Maatriksi veeru valimine muutujasse Column:

; MÀÀrame kolmemÔÔtmelise hÔreda massiivi 3x3x3
Set ^a(0,0,0)=1,^a(2,2,0)=1,^a(2,0,1)=1,^a(0,2,1)=1,^a(2,2,2)=1,^a(2,1,2)=1
Merge Column = ^a(2,2)
; VĂ€ljastame muutuja Column
Zwrite Column

KokkuvÔte:

Column(0)=1
Column(2)=1

Mis on huvitav, muutuja Column on ka saanud hÔreda massiivi, millele tuleb viidata samuti lÀbi $GET, kuna vaikevÀÀrtusi selles ei talletata.

Ruutekeste valimine vÔib samuti toimuda lÀbi vÀikese programmi, kasutades funktsiooni $KÀsk. See on eriti mugav ruumides, mille indeksid ei ole kvantitud (kaardistamine).

KokkuvÔte

Praegused ajad seavad uusi ambitsioonikaid ĂŒlesandeid. Graafikud vĂ”ivad koosneda miljarditest tipudest, kaardid miljarditest punktidest ja keegi vĂ”ib isegi soovida oma universumit kĂ€ivitada rakendatud automaatidel (1, 2).

Kui andmete kogus hajusates massiivides ei mahugi enam operatiivmÀlu, kuid nendega tuleb siiski töötada, tasub kaaluda sarnaste projektide elluviimise vÔimalust globaalselt ja COS-il.

AitĂ€h tĂ€helepanu eest! Ootame teie kĂŒsimusi ja soovitusi kommentaarides.

MĂ€rkus: See artikkel ja minu kommentaarid sellele on minu arvamus ning ei kajasta InterSystems korporatsiooni ametlikku seisukohta.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster