Ang mga global ay mga treasure-sword para sa pag-iimbak ng data. Mga puno. Bahagi 1

Ang mga global ay mga treasure-sword para sa pag-iimbak ng data. Mga puno. Bahagi 1 Ang tunay na database swords - globals - ay matagal nang kilala, ngunit kakaunti pa rin ang nakakaalam kung paano gamitin ang mga ito nang epektibo o hindi pag-aari ang superweapon na ito.

Kung gagamit ka ng globals sa paglutas ng mga problemang iyon na talagang mahusay sila, makakamit mo ang mga natitirang resulta. Sa pagiging produktibo man o sa pagpapasimple ng solusyon sa problema (1, 2).

Ang mga global ay isang espesyal na paraan ng pag-iimbak at pagproseso ng data, ganap na naiiba sa mga talahanayan sa SQL. Lumitaw sila noong 1966 sa wika M(UMPS) (ebolusyonaryong pag-unlad - Cache ObjectScript, pagkatapos nito COS) sa database ng medikal at naroroon pa rin aktibong ginagamit, at nakapasok din sa ilang iba pang lugar kung saan kinakailangan ang pagiging maaasahan at mataas na pagganap: pananalapi, pangangalakal, atbp.

Sinusuportahan ng mga global sa modernong DBMS ang mga transaksyon, pag-log, pagtitiklop, at paghati. Yung. magagamit ang mga ito upang bumuo ng moderno, maaasahan, distributed at mabilis na mga sistema.

Hindi ka nililimitahan ng mga global sa relational na modelo. Binibigyan ka nila ng kalayaan na bumuo ng mga istruktura ng data na na-optimize para sa mga partikular na gawain. Para sa maraming mga application, ang matalinong paggamit ng mga global ay maaaring maging isang lihim na sandata, na naghahatid ng pagganap na pangarap lamang ng mga developer ng relational na application.

Ang mga global bilang isang paraan upang mag-imbak ng data ay maaaring gamitin sa maraming modernong programming language, parehong mataas at mababang antas. Samakatuwid, sa artikulong ito, partikular na tututukan ko ang mga global, at hindi ang wika kung saan sila nanggaling.

2. Paano gumagana ang mga global

Unawain muna natin kung paano gumagana ang mga global at kung ano ang kanilang mga lakas. Ang mga global ay maaaring tingnan mula sa iba't ibang mga punto ng view. Sa bahaging ito ng artikulo ay titingnan natin sila bilang mga puno. O tulad ng mga hierarchical data warehouse.

Upang ilagay ito nang simple, ang isang global ay isang paulit-ulit na array. Isang array na awtomatikong nai-save sa disk.
Mahirap isipin ang isang bagay na mas simple para sa pag-iimbak ng data. Sa code (sa mga wikang COS/M) ito ay naiiba sa isang regular na associative array sa simbolo lamang ^ bago ang pangalan.

Upang i-save ang data sa isang global, hindi mo kailangang matutunan ang SQL query language; ang mga utos para sa pagtatrabaho sa kanila ay napakasimple. Maaari silang matutunan sa isang oras.

Magsimula tayo sa pinakasimpleng halimbawa. Isang antas na puno na may 2 sanga. Ang mga halimbawa ay nakasulat sa COS.

Ang mga global ay mga treasure-sword para sa pag-iimbak ng data. Mga puno. Bahagi 1

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



Kapag naglalagay ng impormasyon sa isang pandaigdigang (Itakda ang utos), 3 bagay ang awtomatikong nangyayari:

  1. Pag-save ng data sa disk.
  2. Pag-index. Ang nasa panaklong ay ang susi (sa panitikang Ingles - "subscript"), at sa kanan ng katumbas ay ang halaga ("node value").
  3. Ayusin. Ang data ay pinagsunod-sunod ayon sa susi. Sa hinaharap, kapag binabagtas ang array, ang unang elemento ay magiging "Sergey Smith", at ang pangalawang "John Sidorov". Kapag tumatanggap ng listahan ng mga user mula sa global, hindi nag-aaksaya ng oras ang database sa pag-uuri. Bukod dito, maaari kang humiling ng output ng isang pinagsunod-sunod na listahan, simula sa anumang key, kahit na sa isang wala (ang output ay magsisimula mula sa unang tunay na key, na darating pagkatapos ng hindi umiiral).

Ang lahat ng mga operasyong ito ay nangyayari nang hindi kapani-paniwalang mabilis. Sa aking computer sa bahay nakakakuha ako ng mga halaga na hanggang 750 pagsingit/seg sa isang proseso. Sa mga multi-core na processor ang mga halaga ay maaaring maabot sampu-sampung milyon pagsingit/seg.

Siyempre, ang bilis ng pagpasok mismo ay hindi gaanong sinasabi. Maaari mong, halimbawa, napakabilis na magsulat ng impormasyon sa mga text file - tulad nito ayon sa mga sabi-sabi Gumagana ang pagproseso ng visa. Ngunit sa kaso ng mga global, nakakakuha kami ng structured na naka-index na storage bilang isang resulta, na maaaring madali at mabilis na magamit sa hinaharap.

Ang mga global ay mga treasure-sword para sa pag-iimbak ng data. Mga puno. Bahagi 1

  • Ang pinakamalaking lakas ng mga global ay ang bilis kung saan maaaring maipasok ang mga bagong node.
  • Palaging naka-index ang data sa global. Ang pagtawid sa kanila, parehong sa isang antas at malalim sa puno, ay palaging mabilis.

Magdagdag pa tayo ng ilang sangay ng pangalawa at pangatlong antas sa pandaigdigan.

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

Ang mga global ay mga treasure-sword para sa pag-iimbak ng data. Mga puno. Bahagi 1

Malinaw na ang mga multi-level na puno ay maaaring itayo batay sa mga global. Bukod dito, ang pag-access sa anumang node ay halos madalian dahil sa awtomatikong pag-index sa panahon ng pagpapasok. At sa anumang antas ng puno, ang lahat ng mga sanga ay pinagsunod-sunod ayon sa susi.

Tulad ng nakikita mo, maaaring maimbak ang impormasyon sa parehong susi at halaga. Ang kabuuang haba ng key (ang kabuuan ng mga haba ng lahat ng mga index) ay maaaring maabot Mga byte ng 511, at ang mga halaga 3.6 MB para sa Cache. Ang bilang ng mga antas sa puno (bilang ng mga sukat) ay 31.

Isa pang kawili-wiling punto. Maaari kang bumuo ng isang puno nang hindi tinukoy ang mga halaga ng mga node sa itaas na antas.

Ang mga global ay mga treasure-sword para sa pag-iimbak ng data. Mga puno. Bahagi 1

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

Ang mga walang laman na bilog ay mga node na walang nakatalagang halaga.

Upang mas maunawaan ang mga global, ihambing natin ang mga ito sa iba pang mga puno: mga puno sa hardin at mga puno ng pangalan ng file system.

Ihambing natin ang mga puno sa mga global na may pinakapamilyar na hierarchical na istruktura sa atin: sa mga ordinaryong puno na tumutubo sa mga hardin at bukid, gayundin sa mga file system.

Ang mga global ay mga treasure-sword para sa pag-iimbak ng data. Mga puno. Bahagi 1

Tulad ng nakikita natin sa mga puno sa hardin, ang mga dahon at prutas ay matatagpuan lamang sa mga dulo ng mga sanga.
Mga sistema ng file - ang impormasyon ay naka-imbak lamang sa mga dulo ng mga sangay, na ganap na kwalipikadong mga pangalan ng file.

At narito ang pandaigdigang istraktura ng data.

Ang mga global ay mga treasure-sword para sa pag-iimbak ng data. Mga puno. Bahagi 1Pagkakaiba:

  1. Mga panloob na node: ang impormasyon sa isang global ay maaaring maimbak sa bawat node, hindi lamang sa mga dulo ng mga sanga.
  2. Mga panlabas na node: Ang global ay dapat na may tinukoy na mga halaga sa mga dulo ng mga sanga, habang ang FS at mga puno sa hardin ay hindi.



Sa mga tuntunin ng mga panloob na node, maaari nating sabihin na ang istraktura ng global ay isang superset ng istraktura ng mga puno ng pangalan sa mga file system at mga puno sa hardin. Yung. mas nababaluktot.

Sa pangkalahatan, ang global ay ordered tree na may kakayahang mag-imbak ng data sa bawat node.

Upang mas maunawaan ang gawain ng mga global, isipin kung ano ang mangyayari kung ang mga tagalikha ng mga file system ay gumamit ng isang diskarte na katulad ng mga global upang mag-imbak ng impormasyon?

  1. Ang pagtanggal ng isang file sa isang direktoryo ay awtomatikong tatanggalin ang direktoryo, gayundin ang lahat ng nakapatong na mga direktoryo na naglalaman lamang ng isang direktoryo na kakatanggal lang.
  2. Hindi na kailangan ng mga direktoryo. Magkakaroon lamang ng mga file na may mga subfile at mga file na walang mga subfile. Kung ihahambing sa isang ordinaryong puno, kung gayon ang bawat sanga ay magiging isang bunga.

    Ang mga global ay mga treasure-sword para sa pag-iimbak ng data. Mga puno. Bahagi 1

  3. Maaaring hindi kailanganin ang mga bagay tulad ng README.txt file. Ang lahat ng kailangang sabihin tungkol sa mga nilalaman ng direktoryo ay maaaring isulat sa mismong file ng direktoryo. Sa espasyo ng path, ang pangalan ng file ay hindi nakikilala mula sa pangalan ng direktoryo, kaya posible na makamit sa pamamagitan lamang ng mga file.
  4. Ang bilis ng pagtanggal ng mga direktoryo na may mga nested na subdirectory at mga file ay tataas nang husto. Maraming beses sa Habré mayroong mga artikulo tungkol sa kung gaano katagal at mahirap na tanggalin ang milyun-milyong maliliit na file (1, 2). Gayunpaman, kung gagawa ka ng isang pseudo-file system sa isang global, aabutin ito ng ilang segundo o mga fraction nito. Noong sinubukan ko ang pagtanggal ng mga subtree sa isang computer sa bahay, inalis nito ang 1-96 milyong node mula sa isang two-tier tree sa isang HDD (hindi SSD) sa loob ng 341 segundo. Bukod dito, pinag-uusapan natin ang pagtanggal ng bahagi ng puno, at hindi lamang ang buong file na may mga global.

Ang mga global ay mga treasure-sword para sa pag-iimbak ng data. Mga puno. Bahagi 1
Ang pag-alis ng mga subtree ay isa pang matibay na punto ng globals. Hindi mo kailangan ng recursion para dito. Nangyayari ito nang hindi kapani-paniwalang mabilis.

Sa aming puno ito ay maaaring gawin sa utos Pumatay.

Kill ^a("+7926X")

Ang mga global ay mga treasure-sword para sa pag-iimbak ng data. Mga puno. Bahagi 1

Para sa isang mas mahusay na pag-unawa sa kung anong mga aksyon ang magagamit sa amin sa mga global, magbibigay ako ng maikling talahanayan.

Mga pangunahing command at function para sa pakikipagtulungan sa mga global sa COS

Itakda
Pagtatakda ng mga sangay sa isang node (kung hindi pa tinukoy) at mga halaga ng node

Pagsamahin
Pagkopya ng subtree

Pumatay
Pag-alis ng subtree

ZKill
Pagtanggal ng halaga ng isang partikular na node. Ang subtree na lumalabas mula sa node ay hindi hinawakan

$Query
Kumpletuhin ang pagtawid sa puno, pagpunta sa malalim sa puno

$Order
Ang pagtawid sa mga sanga ng isang partikular na node

$Data
Sinusuri kung tinukoy ang isang node

$Increment
Atomically incrementing isang node value. Para maiwasan ang pagbabasa at pagsusulat, para sa ACID. Kamakailan ay inirerekumenda na baguhin sa $Sequence

Salamat sa iyong pansin, handa kaming sagutin ang iyong mga katanungan.

Pagtanggi sa pananagutan: Ang artikulong ito at ang mga komento ko dito ay opinyon ko at walang kaugnayan sa opisyal na posisyon ng InterSystems Corporation.

Karugtong Ang mga global ay mga treasure-sword para sa pag-iimbak ng data. Mga puno. Bahagi 2. Malalaman mo kung anong mga uri ng data ang maaaring ipakita sa mga global at sa kung anong mga gawain ang ibinibigay ng mga ito ang pinakamataas na benepisyo.

Pinagmulan: www.habr.com

Magdagdag ng komento