Eelmine osa (, ) rÀÀkisime globaalsusest kui puudest, nĂŒĂŒd uurime globaalsust kui hĂ”redaid massiive.
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, , . Teistes programmeerimiskeeltes on spetsiaalsed teegid, mille abil neid rakendada. C++ jaoks â ja palju muud.
Globaalsed olendid on head kandidaadid hÔredate massiivide rakendamiseks, sest:
- Nad hoiavad ainult teatud sÔlmede vÀÀrtusi, mitte mÀÀramata vÀÀrtusi;
- 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) - 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. )
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 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
kasutatakse graafide esitlemiseks:

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 * ), 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, 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

Tuntuim raku automaat on , mille tĂ”ttu tema reeglid (kui rakul on palju naabreid â see sureb) esindab hĂ”redat masiivi.
Steven Wolfram peab raku automate uus teaduse valdkond. 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 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 ja OpenStreetMapi fork â .
Hiljuti rakendati georuumilisi indekse . Ootame artikli autoritelt teavet juurutamise detailide kohta.
Ruumiliste indeksite rakendamine globaalides OpenStreetMap XAPI-s
Pildid on pÀrit .
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.

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:

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

Globaal ^way kasutatakse punktide talletamiseks (teed, vĂ€iksed jĂ”ed jne) ja polĂŒgoonid (sulgudes piirkonnad: hooned, metsad jne).
Karm klassifikatsioon hÔredate massiivide kasutamisest globaalides.
- Me talletame teatud objektide koordinaadid ja nende olekud (kaartimine, rakud automaadid)
- 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 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.

Ruudukeste valimiseks tuntud indeksite alusel saab kasutada kÀsku .
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 , kuna vaikevÀÀrtusi selles ei talletata.
Ruutekeste valimine vÔib samuti toimuda lÀbi vÀikese programmi, kasutades funktsiooni . 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 (, ).
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
