Globalak datuak gordetzeko altxor-ezpatak dira. Zuhaitzak. 2. zatia

Globalak datuak gordetzeko altxor-ezpatak dira. Zuhaitzak. 2. zatiaHasteko - ikusi 1. zatia.

3. Egituren aldaerak globalak erabiltzean

Zuhaitz ordenatu bat bezalako egitura batek hainbat kasu berezi ditu. Kontuan ditzagun globalekin lan egitean balio praktikoa dutenak.

3.1 Kasu berezia 1. Adarrik gabeko nodo bat


Globalak datuak gordetzeko altxor-ezpatak dira. Zuhaitzak. 2. zatiaGlobalak array gisa ez ezik, aldagai arrunt gisa ere erabil daitezke. Adibidez, kontagailu gisa:

Set ^counter = 0  ; установка счётчика
Set id=$Increment(^counter) ;  атомарное инкрементирование

Kasu honetan, globalak, bere esanahiaz gain, adarrak ere izan ditzake. Batak ez du bestea baztertzen.

3.2 Kasu berezia 2. Erpin bat eta adar asko

Oro har, gako-balioaren oinarri klasikoa da. Eta balio-tupla bat balio gisa gordetzen badugu, taula oso arrunta lortuko dugu gako nagusi batekin.

Globalak datuak gordetzeko altxor-ezpatak dira. Zuhaitzak. 2. zatia

Globalei buruzko taula bat ezartzeko, guk geuk sortu beharko ditugu errenkadak zutabeen balioetatik, eta, ondoren, globalean gorde gako nagusia erabiliz. Irakurtzean katea zutabeetan berriro zatitzea posible egiteko, erabil dezakezu:

  1. karaktere mugatzaileak.
    Set ^t(id1) = "col11/col21/col31"
    Set ^t(id2) = "col12/col22/col32"
  2. eremu bakoitzak aldez aurretik zehaztutako byte kopuru bat hartzen duen eskema zurruna. Datu-base erlazionaletan egiten den bezala.
  3. $LB funtzio berezi bat (Cache-n eskuragarri), balio kate bat sortzen duena.
    Set ^t(id1) = $LB("col11", "col21", "col31")
    Set ^t(id2) = $LB("col12", "col22", "col32")

Interesgarria da, ez da zaila globalak erabiltzea datu-base erlazionaletan bigarren mailako indizeen antzeko zerbait egiteko. Dei diezaiegun horrelako egiturei indize globalak. Indize globala global nagusiaren lehen gakoaren parte ez diren eremuak azkar bilatzeko zuhaitz laguntzaile bat da. Bete eta erabiltzeko, kode gehigarria idatzi behar duzu.

Sortu dezagun indize global bat lehen zutabean.

Set ^i("col11", id1) = 1
Set ^i("col12", id2) = 1

Orain, lehen zutabean informazioa azkar bilatzeko, globala aztertu behar dugu ^i eta aurkitu lehen zutabearen nahi den balioari dagozkion gako nagusiak (id).

Balio bat txertatzean, berehala sor ditzakegu beharrezko eremuetarako balio eta indize globalak. Eta fidagarritasuna lortzeko, bil dezagun dena transakzio batean.

TSTART
Set ^t(id1) = $LB("col11", "col21", "col31")
Set ^i("col11", id1) = 1
TCOMMIT

Nola egin xehetasunak M globalei buruzko taulak, bigarren mailako indizeen emulazioa.

Taulek ohiko datu-baseetan bezain azkar funtzionatuko dute (edo are azkarrago), errenkadak txertatzeko/eguneratzeko/ezabatzeko funtzioak COS/M-n idatzi eta konpilatu badira.Adierazpen hau INSERT eta SELECT multzoko probekin egiaztatu nuen bi zutabeko taula batean, TSTART eta TCOMMIT komandoak (transakzioak) erabiliz barne.

Ez ditut probatu agertoki konplexuagoak sarbide aldi berean eta transakzio paraleloekin.

Transakzioak erabili gabe, txertatze-tasa 778 txertatze/segundokoa zen milioi balioko.
300 milioi baliorekin - 422 txertaketa/segundo.

Transakzioak erabiltzean - 572 txertatze/segundo 082M txertatzeko. Eragiketa guztiak konpilatutako M kodetik egin dira.
Disko gogorrak ohikoak dira, ez SSD. RAID5 Write-back-arekin. Phenom II 1100T prozesadorea.

SQL datu-base bat antzeko modu batean probatzeko, begizta batean txertaketak egingo dituen gordetako prozedura bat idatzi behar duzu. MySQL 5.5 (InnoDB biltegiratzea) probatzean, metodo hau erabiliz segundoko 11K txertatze baino gehiagoko zenbakiak jaso nituen.
Bai, globaletan taulak ezartzeak datu-base erlazionaletan baino konplexuagoa dirudi. Hori dela eta, globalei buruzko datu-base industrialek SQL sarbidea dute datu tauladunekin lana errazteko.

Globalak datuak gordetzeko altxor-ezpatak dira. Zuhaitzak. 2. zatiaOrokorrean, datu-eskema maiz aldatuko ez bada, txertatzeko abiadura ez da kritikoa eta datu-base osoa erraz irudika daiteke taula normalizatuen moduan, orduan errazagoa da SQLrekin lan egitea, abstrakzio maila handiagoa ematen baitu. .

Globalak datuak gordetzeko altxor-ezpatak dira. Zuhaitzak. 2. zatiaKasu zehatz honetan hori erakutsi nahi nuen globalak beste datu-base batzuk sortzeko eraikitzaile gisa jardun dezake. Beste hizkuntza batzuk idatz daitezkeen muntatzaile bat bezala. Hona hemen globaletan analogoak sor ditzakezun adibideak gako-balioa, zerrendak, multzoak, taulak, dokumentuetara zuzendutako datu-baseak.

Esfortzu minimoarekin datu-base ez-estandarra sortu behar baduzu, globaletara begiratu beharko zenuke.

3.3 Kasu berezia 3. Bi mailatako zuhaitza, bigarren mailako nodo bakoitzak adar kopuru finko bat du

Globalak datuak gordetzeko altxor-ezpatak dira. Zuhaitzak. 2. zatiaSeguruenik asmatu duzu: hau globalen gaineko taulen inplementazio alternatibo bat da. Konpara dezagun ezarpen hau aurrekoarekin.

Bi mailatako zuhaitz bateko taulak vs. maila bakarreko zuhaitz batean.

Cons
Pros

  1. Txertatzeko motelagoa, nodo kopurua zutabe kopuruaren berdina ezarri behar baituzu.
  2. Disko espazio gehiago kontsumitzen du. Zutabe-izenak dituzten indize globalek (matrize-indize gisa ulertuta) diskoko espazioa hartzen dutenez eta errenkada bakoitzean bikoiztu egiten dira.

  1. Zutabe indibidualen balioetarako sarbide azkarragoa, ez baitago katea analizatu beharrik. Nire proben arabera, % 11,5 azkarragoa da 2 zutabeetan eta gehiago zutabe kopuru handiago batean.
  2. Datu-eskema aldatzea errazagoa
  3. Kode argiagoa

Ondorioa: ez guztiontzat. Abiadura globalen onurarik garrantzitsuenetako bat denez, ez du ezertarako balio inplementazio hau erabiltzeak, ziurrenik datu-base erlazionaletako taulek baino azkarrago egingo dutelako.

3.4 Kasu orokorra. Zuhaitzak eta zuhaitz ordenatuak

Zuhaitz gisa irudika daitekeen edozein datu-egitura ezin hobeto egokitzen da globalekin.

3.4.1 Azpiobjektuak dituzten objektuak

Globalak datuak gordetzeko altxor-ezpatak dira. Zuhaitzak. 2. zatia

Globalen erabilera tradizionalaren eremua da. Medikuntza arloan gaixotasun, botika, sintomak eta tratamendu metodo ugari daude. Irrazionala da paziente bakoitzeko milioi bat eremu dituen taula bat sortzea. Gainera, eremuen %99 hutsik egongo da.

Imajinatu taulen SQL datu-base bat: "pazientea" ~ 100 eremu, "Medikuntza" - 000 eremu, "Terapia" - 100 eremu, "Konplikazioak" - 000 eremu, etab. eta abar. Edo milaka taulako datu-base bat sor dezakezu, bakoitza paziente mota jakin baterako (eta gainjar daitezke!), tratamenduak, botikak eta mila taula gehiago taula horien arteko konexioetarako.

Globalak medikuntzarako aproposak dira, paziente bakoitzarentzat bere historia medikoaren, hainbat terapiaren eta sendagaien ekintzen deskribapen zehatza sortzeko aukera ematen baitute, zuhaitz moduan, zutabe hutsetan diskoko espazio gehigarria alferrik galdu gabe, egingo litzatekeen bezala. izan kasu erlazional batean.

Globalak datuak gordetzeko altxor-ezpatak dira. Zuhaitzak. 2. zatiaGlobalak erabiliz, komenigarria da datu-base bat sortzea pertsonei buruzko datuekin, bezeroari buruzko hainbat informazio gehienez pilatu eta sistematizatzea garrantzitsua denean. Medikuntzan, bankuan, marketinean, artxiboan eta beste arlo batzuetan eskatzen da hori

.
Jakina, SQLn ere zuhaitz bat emulatu dezakezu taula gutxi batzuekin (EAV, 1,2,3,4,5,6,7,8,9,10), hala ere, hau nabarmen zailagoa da eta motelagoa izango da. Funtsean, tauletan funtzionatzen duen global bat idatzi beharko zenuke eta taulen lan guztia abstrakzio geruza baten azpian ezkutatu beharko zenuke. Okerra da behe-mailako teknologia (globalak) emulatzea goi-mailako teknologia (SQL) erabiliz. Desegokia.

Ez da sekretua taula erraldoietako datu-eskema aldatzeak (ALTER TABLE) denbora dezente har dezakeela. MySQL-k, adibidez, ALTER TABLE ADD|DROP COLUMN egiten du taula zaharreko informazioa taula berrira (probatutako MyISAM, InnoDB motorrak) guztiz kopiatuz. Horrek milaka milioi erregistro dituen laneko datu-base bat zintzilikatu dezake egunetan, asteetan ez bada.

Globalak datuak gordetzeko altxor-ezpatak dira. Zuhaitzak. 2. zatiaGlobalak erabiltzen baditugu datuen egitura aldatzeak ez digu ezer kostatzen. Edozein unetan gehitu diezaiokegu behar ditugun propietate berriak edozein objekturi, hierarkiaren edozein mailatan. Adarren izena aldatzearekin lotutako aldaketak atzeko planoan exekutatu daitezke martxan dagoen datu-base batean.


Hori dela eta, aukerako propietate ugari dituzten objektuak gordetzeko orduan, globalak aukera bikaina dira.

Gainera, gogorarazten dizut edozein propietatetarako sarbidea berehalakoa dela, orokorrean bide guztiak B zuhaitzak direlako.

Datu-base globalak, oro har, informazio hierarkikoa gordetzeko gaitasuna duten dokumentuetara bideratutako datu-base mota bat dira. Hori dela eta, dokumentuetara bideratutako datu-baseak mundu mailakoekin lehiatu daitezke erregistro medikoak gordetzearen arloan. Baina oraindik ez da guztiz berdinaHar dezagun MongoDB konparaziorako. Domeinu honetan globalak galtzen ditu arrazoi hauengatik:

  1. Dokumentuaren tamaina. Biltegiratze-unitatea JSON formatuan (zehazkiago BSON) testua da, 16 MB inguruko gehienezko bolumena duena. Murrizketa bereziki egin zen, JSON datu-basea ez dadin moteldu analizatzean JSON dokumentu handi bat gordetzen bada eta gero eremuen bidez sartzen bada. Dokumentu honek pazienteari buruzko informazio guztia eduki behar du. Denok dakigu zein lodiak izan daitezkeen pazienteen erregistroak. 16 MB-ko gehienezko txartelaren tamainak berehala amaitzen ditu gaixotasun-txartelak MRI fitxategiak, X izpien azterketak eta bestelako ikerketak barne hartzen dituzten pazienteei. Globalaren adar batean gigabyte eta terabyte-ko informazioa izan dezakezu. Printzipioz, honekin amaitu dezakegu, baina jarraituko dut.
  2. Gaixoaren taulan propietate berrien kontzientzia/aldaketa/ezabatze-denbora. Datu-base horrek mapa osoa irakurri behar du memorian (kopuru handia da!), BSON analizatu, nodo berri bat gehitu/aldatu/ezabatu, indizeak eguneratu, BSON-en paketatu eta diskoan gorde. Global batek propietate zehatz batera sartu eta manipulatu besterik ez du behar.
  3. Banakako propietateetara sarbide azkarra. Dokumentu batean propietate askorekin eta maila anitzeko egiturarekin, propietate indibidualetarako sarbidea azkarragoa izango da, globalaren bide bakoitza B zuhaitz bat delako. BSON-en, dokumentua linealki analizatu behar duzu nahi duzun propietatea aurkitzeko.

3.3.2 Array elkartuak

Array asoziatiboak (nahiz eta habiaratuak dituzten matrizeekin) ezin hobeto egokitzen dira globaletan. Adibidez, PHP-ko array bat lehen irudian bistaratuko da 3.3.1.

$a = array(
  "name" => "Vince Medvedev",
  "city" => "Moscow",
  "threatments" => array(
    "surgeries" => array("apedicectomy", "biopsy"),
    "radiation" => array("gamma", "x-rays"),
    "physiotherapy" => array("knee", "shoulder")
  )
);

3.3.3 Dokumentu hierarkikoak: XML, JSON

Globaletan ere erraz gordetzen da. Biltegiratzeko modu ezberdinetan jar daiteke.

XML
XML globaletan analizatzeko modurik errazena etiketa-atributuak nodoetan gordetzea da. Eta etiketa-atributuetarako sarbide azkarra behar bada, adar desberdinetara eraman ditzakegu.

Globalak datuak gordetzeko altxor-ezpatak dira. Zuhaitzak. 2. zatia

<note id=5>
<to>Вася</to>
<from>Света</from>
<heading>Напоминание</heading>
<body>Позвони мне завтра!</body>
</note>

COS-en hau kodearekin bat etorriko litzateke:

Set ^xml("note")="id=5"
Set ^xml("note","to")="Саша"
Set ^xml("note","from")="Света"
Set ^xml("note","heading")="Напоминание"
Set ^xml("note","body")="Позвони мне завтра!"

komentarioen: XML, JSON, matrize elkartuetarako, globaletan bistaratzeko modu ezberdin asko aurki ditzakezu. Kasu honetan, ez dugu azpi-etiketen ordena ohar-etiketan islatu. Mundu mailan ^xml azpietiketak ordena alfabetikoan bistaratuko dira. Ordena zorrotz islatzeko, adibidez, pantaila hau erabil dezakezu:

Globalak datuak gordetzeko altxor-ezpatak dira. Zuhaitzak. 2. zatia
JSON.
3.3.1 ataleko lehen irudiak JSON dokumentu honen isla erakusten du:

var document = {
  "name": "Vince Medvedev",
  "city": "Moscow",
  "threatments": {
    "surgeries": ["apedicectomy", "biopsy"],
    "radiation": ["gamma", "x-rays"],
    "physiotherapy": ["knee", "shoulder"]
  },
};

3.3.4 Erlazio hierarkikoen bidez loturiko egitura berdinak

Adibideak: salmenta-bulegoen egitura, pertsonen kokapena MLM egitura batean, xakeko irekitzeen datu-basea.

Estreinatutako datu-basea. Trazuaren indarraren estimazioa erabil dezakezu nodo globalaren indize-balio gisa. Orduan, mugimendu indartsuena aukeratzeko, nahikoa izango da pisu handiena duen adarra aukeratzea. Globalean, maila bakoitzeko adar guztiak mugimenduaren indarraren arabera ordenatuko dira.

Globalak datuak gordetzeko altxor-ezpatak dira. Zuhaitzak. 2. zatia

Salmenta bulegoen egitura, MLMn pertsonen egitura. Nodoek azpizuhaitz osoaren ezaugarriak islatzen dituzten zenbait cache-balio gorde ditzakete. Adibidez, azpizuhaitz jakin baten salmenta-bolumena. Edozein unetan lor dezakegu edozein adarren lorpenak islatzen dituen zifra bat.

Globalak datuak gordetzeko altxor-ezpatak dira. Zuhaitzak. 2. zatia

4. Zein kasutan da onuragarriena globalak erabiltzea?

Lehenengo zutabean globalak erabiliz abiadura irabazi nabarmena lortuko duzun kasuak aurkezten dira, eta bigarrenean diseinua edo datu-eredua sinplifikatuko den.

Abiadura
Datuak tratatzeko/aurkezteko erraztasuna

  1. Txertazioa [maila bakoitzean ordenatze automatikoarekin], [giltza nagusiaren bidez indexatzea]
  2. Azpizuhaitzak kentzea
  3. Banakako sarbidea behar duten habiaraturiko propietate asko dituzten objektuak
  4. Egitura hierarkikoa edozein adaretatik, baita existitzen ez direnetatik ere, adar seme-alabak saihesteko gaitasuna duena
  5. Azpizuhaitzen sakonera-lehen zeharkatzea
  1. Aukerako [eta/edo habiaratuta] propietate/entitate kopuru handia duten objektu/entitateak
  2. Eskemarik gabeko datuak. Askotan propietate berriak agertu eta zaharrak desagertzen direnean.
  3. Datu-base pertsonalizatu bat sortu behar duzu.
  4. Ibilbideen oinarriak eta erabaki-zuhaitzak. Bideak zuhaitz gisa irudikatzea komeni denean.
  5. Egitura hierarkikoak kentzea errekurtsioa erabili gabe

Extension «Globalak datuak gordetzeko altxor-ezpatak dira. Array urriak. 3. zatia".

Lege-oharra: Artikulu hau eta nire iruzkinak nire iritzia dira eta ez dute zerikusirik InterSystems Corporation-en posizio ofizialarekin.

Iturria: www.habr.com

Gehitu iruzkin berria