Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 1

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 1 Panga halisi za hifadhidata - globals - zimejulikana kwa muda mrefu, lakini bado ni wachache wanajua jinsi ya kuzitumia kwa ufanisi au hawamiliki silaha hii kuu kabisa.

Ikiwa unatumia ulimwengu katika kutatua shida hizo ambazo ni nzuri sana, unaweza kupata matokeo bora. Ama katika tija au katika kurahisisha utatuzi wa tatizo (1, 2).

Globals ni njia maalum ya kuhifadhi na usindikaji data, tofauti kabisa na meza katika SQL. Walionekana mnamo 1966 katika lugha M(UMPS) (maendeleo ya mageuzi - Cache ObjectScript, baada ya hapo COS) kwenye hifadhidata ya matibabu na bado iko kutumika kikamilifu, na pia kupenya katika maeneo mengine ambapo kuegemea na utendaji wa juu unahitajika: fedha, biashara, nk.

Ulimwengu katika DBMS za kisasa zinaauni miamala, ukataji miti, urudufishaji, na ugawaji. Wale. zinaweza kutumika kujenga mifumo ya kisasa, ya kuaminika, iliyosambazwa na ya haraka.

Ulimwengu haukuwekei kikomo kwa muundo wa uhusiano. Zinakupa uhuru wa kuunda miundo ya data ambayo imeboreshwa kwa kazi mahususi. Kwa programu nyingi, matumizi mahiri ya ulimwengu yanaweza kuwa silaha ya siri, ikitoa utendaji ambao wasanidi programu za uhusiano wanaweza kuuota tu.

Globals kama njia ya kuhifadhi data inaweza kutumika katika lugha nyingi za kisasa za upangaji, za kiwango cha juu na cha chini. Kwa hivyo, katika nakala hii nitazingatia haswa ulimwengu, na sio lugha ambayo walitoka hapo awali.

2. Jinsi ulimwengu unavyofanya kazi

Wacha kwanza tuelewe jinsi ulimwengu unavyofanya kazi na nguvu zao ni nini. Ulimwengu unaweza kutazamwa kutoka kwa maoni tofauti. Katika sehemu hii ya kifungu tutawaangalia kama miti. Au kama maghala ya data ya daraja la juu.

Ili kuiweka kwa urahisi, kimataifa ni safu inayoendelea. Safu ambayo imehifadhiwa kiotomatiki kwenye diski.
Ni ngumu kufikiria kitu rahisi zaidi cha kuhifadhi data. Katika msimbo (katika lugha za COS/M) inatofautiana na safu ya kawaida ya ushirika tu kwenye ishara. ^ kabla ya jina.

Ili kuhifadhi data katika ulimwengu, hauitaji kujifunza lugha ya swala ya SQL; amri za kufanya kazi nazo ni rahisi sana. Wanaweza kujifunza kwa saa moja.

Hebu tuanze na mfano rahisi zaidi. Mti wa ngazi moja na matawi 2. Mifano imeandikwa katika COS.

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 1

Set ^a("+7926X") = "John Sidorov"
Set ^a("+7916Y") = "Sergey Smith"



Wakati wa kuingiza habari kwenye ulimwengu (Weka amri), vitu 3 hufanyika kiatomati:

  1. Kuhifadhi data kwenye diski.
  2. Kuorodhesha. Kilicho kwenye mabano ni ufunguo (katika fasihi ya Kiingereza - "subscript"), na kwa haki ya sawa ni thamani ("thamani ya nodi").
  3. Kupanga. Data imepangwa kwa ufunguo. Katika siku zijazo, wakati wa kuvuka safu, kitu cha kwanza kitakuwa "Sergey Smith", na cha pili "John Sidorov". Wakati wa kupokea orodha ya watumiaji kutoka kwa ulimwengu, hifadhidata haipotezi wakati kupanga. Zaidi ya hayo, unaweza kuomba pato la orodha iliyopangwa, kuanzia ufunguo wowote, hata ambao haupo (matokeo yataanza kutoka kwa ufunguo wa kwanza halisi, ambao unakuja baada ya ule ambao haupo).

Operesheni hizi zote hufanyika haraka sana. Kwenye kompyuta yangu ya nyumbani nilikuwa nikipata thamani hadi viingilio 750/sekunde katika mchakato mmoja. Kwenye vichakataji vya msingi vingi maadili yanaweza kufikia makumi ya mamilioni kuingiza/sek.

Bila shaka, kasi ya kuingizwa yenyewe haisemi mengi. Unaweza, kwa mfano, haraka sana kuandika habari kwenye faili za maandishi - kama hii kulingana na uvumi Usindikaji wa Visa hufanya kazi. Lakini kwa upande wa globals, tunapata hifadhi iliyopangwa kulingana na faharasa kama matokeo, ambayo inaweza kufanyiwa kazi kwa urahisi na haraka katika siku zijazo.

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 1

  • Nguvu kubwa ya ulimwengu ni kasi ambayo nodi mpya zinaweza kuingizwa.
  • Data katika ulimwengu huonyeshwa kila wakati. Kuzipitia, kwa ngazi moja na ndani ya mti, daima ni haraka.

Wacha tuongeze matawi machache zaidi ya kiwango cha pili na cha tatu kwa ulimwengu.

Set ^a("+7926X", "city") = "Moscow"
Set ^a("+7926X", "city", "street") = "Req Square"
Set ^a("+7926X", "age") = 25
Set ^a("+7916Y", "city") = "London"
Set ^a("+7916Y", "city", "street") = "Baker Street"
Set ^a("+7916Y", "age") = 36

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 1

Ni dhahiri kwamba miti ya ngazi mbalimbali inaweza kujengwa kwa misingi ya kimataifa. Zaidi ya hayo, ufikiaji wa nodi yoyote ni karibu mara moja kwa sababu ya kuashiria kiotomatiki wakati wa kuingizwa. Na kwa kiwango chochote cha mti, matawi yote yanapangwa kwa ufunguo.

Kama unaweza kuona, habari inaweza kuhifadhiwa katika ufunguo na thamani. Jumla ya urefu wa ufunguo (jumla ya urefu wa faharasa zote) inaweza kufikia 511 byte, na maadili 3.6 MB kwa Cache. Idadi ya viwango kwenye mti (idadi ya vipimo) ni 31.

Jambo lingine la kuvutia. Unaweza kuunda mti bila kutaja maadili ya nodi za viwango vya juu.

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 1

Set ^b("a", "b", "c", "d") = 1
Set ^b("a", "b", "c", "e") = 2
Set ^b("a", "b", "f", "g") = 3

Miduara tupu ni nodi ambazo hazina thamani iliyokabidhiwa.

Ili kuelewa vyema ulimwengu, hebu tuwalinganishe na miti mingine: miti ya bustani na miti ya majina ya mfumo wa faili.

Hebu tulinganishe miti kwenye ulimwengu na miundo ya daraja inayojulikana zaidi kwetu: na miti ya kawaida ambayo hukua kwenye bustani na mashamba, pamoja na mifumo ya faili.

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 1

Kama tunavyoona katika miti ya bustani, majani na matunda hupatikana tu kwenye ncha za matawi.
Mifumo ya faili - habari huhifadhiwa tu mwisho wa matawi, ambayo ni majina ya faili yaliyohitimu kikamilifu.

Na hapa kuna muundo wa data wa kimataifa.

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 1Tofauti:

  1. Nodi za ndani: habari katika ulimwengu inaweza kuhifadhiwa katika kila nodi, sio tu kwenye ncha za matawi.
  2. Nodi za nje: Ulimwengu lazima uwe na maadili yaliyofafanuliwa mwishoni mwa matawi, wakati FS na miti ya bustani haifanyi hivyo.



Kwa upande wa nodes za ndani, tunaweza kusema kwamba muundo wa kimataifa ni superset ya muundo wa miti ya majina katika mifumo ya faili na miti ya bustani. Wale. rahisi zaidi.

Kwa ujumla, ulimwengu ni mti ulioamuru na uwezo wa kuhifadhi data katika kila nodi.

Ili kuelewa vyema kazi ya ulimwengu, hebu fikiria nini kingetokea ikiwa waundaji wa mifumo ya faili wangetumia mbinu sawa na ulimwengu kuhifadhi habari?

  1. Kufuta faili moja kwenye saraka kunaweza kufuta saraka kiotomatiki, na vile vile saraka zote zilizo na saraka moja tu iliyofutwa.
  2. Hakutakuwa na haja ya saraka. Kungekuwa na faili zilizo na faili ndogo na faili bila faili ndogo. Ikiwa ikilinganishwa na mti wa kawaida, basi kila tawi lingekuwa tunda.

    Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 1

  3. Mambo kama faili za README.txt huenda zisihitajike. Kila kitu kilichohitajika kusemwa juu ya yaliyomo kwenye saraka kinaweza kuandikwa kwenye faili ya saraka yenyewe. Katika nafasi ya njia, jina la faili haliwezi kutofautishwa na jina la saraka, kwa hivyo iliwezekana kupata na faili tu.
  4. Kasi ya kufuta saraka zilizo na saraka ndogo na faili zilizowekwa itaongezeka sana. Mara nyingi kwenye Habre kumekuwa na nakala kuhusu ni muda gani na ni ngumu kufuta mamilioni ya faili ndogo (1, 2) Hata hivyo, ukitengeneza mfumo wa faili-pseudo kwenye ulimwengu, itachukua sekunde au sehemu zake. Nilipojaribu kufuta miti ndogo kwenye kompyuta ya nyumbani, iliondoa nodi milioni 1-96 kutoka kwa mti wa ngazi mbili kwenye HDD (sio SSD) kwa sekunde 341. Kwa kuongezea, tunazungumza juu ya kufuta sehemu ya mti, na sio faili nzima iliyo na ulimwengu.

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 1
Kuondoa miti midogo ni hatua nyingine kali ya ulimwengu. Huhitaji kujirudia kwa hili. Hii hutokea haraka sana.

Katika mti wetu hii inaweza kufanywa kwa amri Kuua.

Kill ^a("+7926X")

Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 1

Kwa ufahamu bora wa ni hatua gani zinazopatikana kwetu juu ya ulimwengu, nitatoa jedwali fupi.

Amri za kimsingi na utendaji wa kufanya kazi na ulimwengu katika COS

Kuweka
Kuweka matawi kwa nodi (ikiwa bado haijafafanuliwa) na maadili ya nodi

Kuunganisha
Kunakili mti mdogo

Kuua
Kuondoa mti mdogo

ZKill
Kufuta thamani ya nodi maalum. Mti mdogo unaojitokeza kutoka kwenye nodi hauguswi

Swali la $
Uvukaji kamili wa mti, ukiingia ndani kabisa ya mti

$Agizo
Matawi ya kupita ya nodi maalum

Data ya $
Kuangalia ikiwa nodi imefafanuliwa

$Increment
Kuongeza thamani ya nodi kiatomi. Ili kuzuia kusoma na kuandika, kwa ACID. Hivi karibuni imependekezwa kubadili $Mfuatano

Asante kwa umakini wako, tuko tayari kujibu maswali yako.

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

Kuendeleza Globals ni hazina-panga kwa kuhifadhi data. Miti. Sehemu ya 2. Utajifunza ni aina gani za data zinazoweza kuonyeshwa kwenye ulimwengu na ni kazi gani zinatoa manufaa ya juu zaidi.

Chanzo: mapenzi.com

Kuongeza maoni