Globals ni hazina-panga kwa kuhifadhi data. Safu chache. Sehemu ya 3

Globals ni hazina-panga kwa kuhifadhi data. Safu chache. Sehemu ya 3Katika sehemu zilizopita (1, 2) tulizungumza kuhusu ulimwengu kama miti, katika hili tutaangalia ulimwengu kama safu chache.

Sparse Array ni aina ya safu ambamo thamani nyingi huchukua thamani sawa.

Kwa mazoezi, safu ndogo mara nyingi ni kubwa sana hivi kwamba hakuna maana katika kuchukua kumbukumbu na vitu sawa. Kwa hivyo, inaeleweka kutekeleza safu ndogo kwa njia ambayo kumbukumbu haipotezi kwenye kuhifadhi maadili sawa.
Katika baadhi ya lugha za programu, safu ndogo hujumuishwa katika lugha yenyewe, kwa mfano katika J, MATLAB. Lugha zingine za programu zina maktaba maalum ambayo hukuruhusu kuzitekeleza. Kwa C++ - Eigen nk

Globals ni wagombeaji wazuri wa kutekeleza safu ndogo kwa sababu:

  1. Wanahifadhi maadili ya nodi fulani tu na hazihifadhi maadili ya zile ambazo hazijafafanuliwa;
  2. Kiolesura cha kufikia thamani ya nodi ni sawa na lugha ngapi za programu zinazotekeleza ufikiaji wa kipengele cha safu nyingi.
    Set ^a(1, 2, 3)=5
    Write ^a(1, 2, 3)

  3. Global ni muundo wa kiwango cha chini cha kuhifadhi data, kwa hivyo ina sifa bora za kasi (kutoka mamia ya maelfu hadi makumi ya mamilioni ya miamala kwa sekunde, kulingana na vifaa, tazama hapa chini). 1)

Kwa kuwa kimataifa ni muundo unaoendelea, ni mantiki kuunda safu ndogo juu yao wakati inajulikana mapema kuwa kiasi cha RAM hakitatosha.

Mojawapo ya sifa za utekelezaji wa safu ndogo ni kurudisha thamani chaguomsingi ikiwa ufikiaji utafanywa kwa kisanduku kisichobainishwa.

Hii inaweza kutekelezwa kwa kutumia kazi $GET katika COS. Mfano huu unazingatia safu ya 3-dimensional.

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

Ni kazi gani zinahitaji safu chache na ulimwengu unawezaje kusaidia?

Matrix ya ukaribu (muunganisho).

Matrices kama hayo hutumika kuwakilisha grafu:

Globals ni hazina-panga kwa kuhifadhi data. Safu chache. Sehemu ya 3

Kwa wazi, grafu kubwa, zero zaidi zitakuwa kwenye tumbo. Ikiwa, kwa mfano, tunachukua grafu ya mtandao wa kijamii na kuiwasilisha kwa namna ya matrix sawa, basi itakuwa karibu kabisa na zero, i.e. itakuwa safu chache.

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
....

Katika mfano huu, tunaokoa kimataifa ^m matrix ya uunganisho, pamoja na idadi ya kingo katika kila nodi (nani ni marafiki na nani na idadi ya marafiki).

Ikiwa idadi ya vitu kwenye grafu sio zaidi ya milioni 29 (nambari hii inachukuliwa kama bidhaa ya 8 * upeo wa ukubwa wa mstari), yaani, njia ya kiuchumi zaidi ya kuhifadhi matrices vile ni masharti kidogo, kwani utekelezaji wao huongeza mapungufu makubwa kwa njia maalum.

Udanganyifu na kamba ndogo hufanywa na chaguo la kukokotoa $BIT.

; установка бита
SET $BIT(rowID, positionID) = 1
; получение бита
Write $BIT(rowID, positionID)

Jedwali la mpito la mashine ya serikali

Kwa kuwa grafu ya mpito ya kiotomatiki chenye ukomo ni grafu ya kawaida, basi jedwali la mpito la kiotomatiki finite ni matriki ya kukaribiana iliyojadiliwa hapo juu.

Otomatiki ya rununu

Globals ni hazina-panga kwa kuhifadhi data. Safu chache. Sehemu ya 3

Automaton maarufu zaidi ya seli ni mchezo "Maisha", ambayo, kutokana na sheria zake (wakati kiini kina majirani wengi, hufa) ni safu ndogo.

Stephen Wolfram anaamini kuwa otomatiki ya seli ni uwanja mpya wa sayansi. Mnamo 2002, alichapisha kitabu cha kurasa 1280, Aina Mpya ya Sayansi, ambamo anasema kwa upana kwamba maendeleo katika automata ya rununu hayajatengwa, lakini yanadumu na yana athari kubwa kwa maeneo yote ya sayansi.

Imethibitishwa kuwa algorithm yoyote inayoweza kutekelezwa kwenye kompyuta inaweza kutekelezwa kwa kutumia otomatiki ya rununu. Otomatiki ya rununu hutumiwa kuiga mazingira na mifumo inayobadilika, kutatua shida za algorithmic na kwa madhumuni mengine.

Ikiwa tuna uwanja mkubwa na tunahitaji kurekodi majimbo yote ya kati ya otomatiki ya rununu, basi ni mantiki kutumia ulimwengu.

Uchoraji ramani

Jambo la kwanza linalonijia akilini mwangu linapokuja suala la kutumia safu ndogo ni kazi za kuchora ramani.

Kama sheria, kuna nafasi nyingi tupu kwenye ramani. Ikiwa ramani itawakilishwa kama saizi kubwa, basi 71% ya saizi za Dunia zitakaliwa na bahari. Safu chache. Na ikiwa unatumia kazi za mikono ya kibinadamu tu, basi nafasi tupu itakuwa zaidi ya 95%.

Bila shaka, hakuna mtu anayehifadhi ramani kwa namna ya safu za raster hutumiwa.
Lakini ramani za vekta ni nini? Hii ni aina ya sura na polylines na poligoni yenye pointi.
Kimsingi hifadhidata ya alama na miunganisho kati yao.

Mojawapo ya misheni kabambe ya uchoraji ramani ni darubini ya Gaia kuweka ramani ya galaksi yetu. Kwa kusema kwa mfano, galaksi yetu, kama ulimwengu wote, ni safu fupi inayoendelea: nafasi kubwa za utupu ambamo kuna alama ndogo ndogo - nyota. Nafasi tupu ni 99,999999…….%. Ili kuhifadhi ramani ya galaksi yetu, hifadhidata ya kimataifa ilichaguliwa - Caché.

Sijui muundo halisi wa ulimwengu katika mradi huu, naweza kudhani kuwa ni kitu sawa na:

Set ^galaxy(b, l, d) = 1; Номер звезды по каталогу, если есть
Set ^galaxy(b, l, d, "name") = "Sun"
Set ^galaxy(b, l, d, "type") = "normal" ; варианты blackhole, quazar, red_dwarf и т.д.
Set ^galaxy(b, l, d, "weight") = 14E50
Set ^galaxy(b, l, d, "planetes") = 7
Set ^galaxy(b, l, d, "planetes", 1) = "Mercury"
Set ^galaxy(b, l, d, "planetes", 1, weight) = 1E20
...

B, l, d ziko wapi Galactic inaratibu latitudo, longitudo na umbali wa Jua.

Muundo unaonyumbulika wa ulimwengu hukuruhusu kuhifadhi sifa zozote muhimu za nyota na sayari, kwani besi za ulimwengu hazina mpangilio.

Ili kuhifadhi ramani ya ulimwengu wetu, Cache ilichaguliwa sio tu kwa urahisi wake, lakini pia kwa uwezo wake wa kuhifadhi mtiririko wa data haraka sana, wakati huo huo kuunda faharasa za ulimwengu kwa utafutaji wa haraka.

Ikiwa tutarudi Duniani, basi miradi ya katuni iliundwa kwenye ulimwengu OpenStreetMap XAPI na uma wa OpenStreetMap - FOSM.

Hivi majuzi Hackathon Cache fahirisi za kijiografia zilitekelezwa Geospatial. Tunasubiri makala kutoka kwa waandishi na maelezo ya utekelezaji.

Utekelezaji wa faharasa za anga kwenye ulimwengu katika OpenStreetMap XAPI

Picha zilizochukuliwa kutoka uwasilishaji huu.

Dunia nzima imegawanywa katika miraba, kisha miraba ndogo, na ndogo ndogo katika mraba ndogo, na kadhalika. Kwa ujumla, tunapata muundo wa daraja la kuhifadhi ambao ulimwengu umeundwa.

Globals ni hazina-panga kwa kuhifadhi data. Safu chache. Sehemu ya 3

Wakati wowote, tunaweza karibu kuomba mraba tunaotaka papo hapo au kuufuta, na miraba yote ndogo pia itarejeshwa au kufutwa.

Mpango kama huo kwenye ulimwengu unaweza kutekelezwa kwa njia kadhaa.

Chaguo 1:

Set ^m(a, b, a, c, d, a, b,c, d, a, b, a, c, d, a, b,c, d, a, 1) = idПервойТочки
Set ^m(a, b, a, c, d, a, b,c, d, a, b, a, c, d, a, b,c, d, a, 2) = idВторойТочки
...

Chaguo 2:

Set ^m('abacdabcdabacdabcda', 1) = idПервойТочки
Set ^m('abacdabcdabacdabcda', 2) = idВторойТочки
...

Katika visa vyote viwili, si vigumu kutumia COS/M kuomba pointi zilizo katika mraba wa ngazi yoyote. Itakuwa rahisi zaidi kusafisha vipande vya mraba vya nafasi katika ngazi yoyote katika chaguo la kwanza, lakini hii ni mara chache muhimu.

Mfano wa moja ya mraba wa kiwango cha chini:

Globals ni hazina-panga kwa kuhifadhi data. Safu chache. Sehemu ya 3

Na hapa kuna ulimwengu kadhaa kutoka kwa mradi wa XAPI: uwakilishi wa faharisi kwenye ulimwengu:

Globals ni hazina-panga kwa kuhifadhi data. Safu chache. Sehemu ya 3

kimataifa ^njia kutumika kuhifadhi pointi polylines (barabara, mito midogo, nk) na polygons (maeneo yaliyofungwa: majengo, misitu, nk).

Uainishaji mbaya wa matumizi ya safu chache kwenye ulimwengu.

  1. Tunahifadhi kuratibu za vitu fulani na hali zao (kuchora ramani, otomatiki ya rununu)
  2. Tunahifadhi matrices chache.

Kwa kisa cha 2) tunapoomba kuratibu maalum ambapo kipengele hakijapewa thamani, lazima tupate thamani ya kipengele cha safu-msingi ya safu ndogo.

Bonasi tunazopokea tunapohifadhi matrices ya pande nyingi katika ulimwengu

Ondoa kwa haraka na/au chagua vipande vya nafasi ambavyo ni safu mlalo, ndege, cubes n.k. Kwa hali ambapo faharasa kamili hutumiwa, uwezo wa kuondoa haraka na/au kuleta sehemu za nafasi ambazo ni safu mlalo, ndege, cubes n.k. zinaweza kuwa muhimu.

Timu Kuua tunaweza kufuta kipengele kimoja au safu, au hata ndege nzima. Shukrani kwa sifa za ulimwengu, hii hufanyika haraka sana - maelfu ya mara haraka kuliko uondoaji wa kipengele kwa kipengele.

Takwimu inaonyesha safu ya pande tatu katika ulimwengu ^a na aina tofauti za ufutaji.

Globals ni hazina-panga kwa kuhifadhi data. Safu chache. Sehemu ya 3

Ili kuchagua vipande vya nafasi kwa kutumia indexes zinazojulikana, unaweza kutumia amri Kuunganisha.

Kuchagua safu wima kwenye safu wima tofauti:

; Зададим трёхмерный разреженный массив 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)
; Выведем переменную Column
Zwrite Column

Hitimisho:

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

Kinachofurahisha kuhusu utofauti wa Safu wima ni kwamba pia tuna safu ndogo, ambayo lazima pia ifikiwe kupitia $GET, kwani maadili chaguo-msingi hayahifadhiwa ndani yake.

Kuchagua vipande vya nafasi pia kunaweza kufanywa kupitia programu ndogo kwa kutumia kazi $Agizo. Hii ni rahisi sana kwenye nafasi ambazo fahirisi zake hazijahesabiwa (katuni).

Hitimisho

Nyakati za sasa hutoa kazi mpya kabambe. Grafu zinaweza kujumuisha mabilioni ya wima, ramani zinazojumuisha mabilioni ya alama, na zingine zinaweza kutaka kuendesha ulimwengu wao wenyewe kwenye otomatiki ya rununu (1, 2).

Wakati kiasi cha data kutoka kwa safu chache haziwezi kuingia kwenye RAM, lakini unahitaji kufanya kazi nao, basi inafaa kuzingatia uwezekano wa kutekeleza miradi kama hiyo kwenye ulimwengu na COS.

Asante kwa umakini wako! Tunasubiri maswali na matakwa yako katika maoni.

Onyo: Nakala hii na maoni yangu kwake ni maoni yangu na hayana uhusiano wowote na msimamo rasmi wa Shirika la InterSystems.

Chanzo: mapenzi.com

Kuongeza maoni