Globalët janë shpata thesare për ruajtjen e të dhënave. Pemët. Pjesa 2

Globalët janë shpata thesare për ruajtjen e të dhënave. Pemët. Pjesa 2Fillimi - shih pjesën 1.

3. Variantet e strukturave kur përdoren globalët

Një strukturë e tillë si një pemë e porositur ka raste të ndryshme të veçanta. Le të shqyrtojmë ato që kanë vlerë praktike kur punojmë me globalët.

3.1 Rasti i veçantë 1. Një nyje pa degë


Globalët janë shpata thesare për ruajtjen e të dhënave. Pemët. Pjesa 2Globalet mund të përdoren jo vetëm si një grup, por edhe si variabla normalë. Për shembull, si numërues:

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

Në këtë rast, globalja, përveç vlerës, mund të ketë edhe degë. Njëra nuk e përjashton tjetrën.

3.2 Rasti i veçantë 2. Një nyje dhe shumë degë

Në përgjithësi, kjo është një bazë klasike e vlerës së çelësit. Dhe nëse ruajmë një tufë vlerash si vlerë, marrim tabelën më të zakonshme me një çelës primar.

Globalët janë shpata thesare për ruajtjen e të dhënave. Pemët. Pjesa 2

Për të zbatuar një tabelë mbi globalët, do të duhet të formojmë vetë rreshta nga vlerat e kolonave, dhe më pas t'i ruajmë ato në globale me çelësin kryesor. Për të bërë të mundur ndarjen e rreshtit përsëri në kolona gjatë leximit, mund të përdorni:

  1. personazhet ndarës.
    Set ^t(id1) = "col11/col21/col31"
    Set ^t(id2) = "col12/col22/col32"
  2. një skemë e ngurtë, sipas së cilës secila fushë zë një numër të paracaktuar bajtash. Si dhe bëhet në DB relacionale.
  3. një funksion special $LB (i disponueshëm në Cache) që përbën një varg vlerash.
    Set ^t(id1) = $LB("col11", "col21", "col31")
    Set ^t(id2) = $LB("col12", "col22", "col32")

Është interesante se nuk është e vështirë të bësh diçka të ngjashme me indekset dytësore në bazat e të dhënave relacionale në globale. Le t'i quajmë struktura të tilla indekse globale. Një indeks global është një pemë ndihmëse për kërkimin e shpejtë të fushave që nuk janë pjesë e çelësit kryesor të globalit kryesor. Për ta mbushur dhe përdorur, duhet të shkruani kod shtesë.

Le të krijojmë një indeks global në kolonën e parë.

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

Tani, për një kërkim të shpejtë të informacionit në kolonën e parë, ne duhet të shikojmë në globale ^i dhe gjeni çelësat kryesorë (id) që korrespondojnë me vlerën e dëshiruar të kolonës së parë.

Kur futim një vlerë, ne mund të krijojmë menjëherë vlerat dhe indekset globale për fushat e kërkuara. Dhe për besueshmëri, le t'i mbështjellim të gjitha në një transaksion.

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

Detaje se si të bëni në M tabelat mbi globalët, emulimi i indekseve dytësore.

Tabelat e tilla do të funksionojnë aq shpejt sa në bazat e të dhënave tradicionale (ose edhe më shpejt) nëse funksionet e futjes/përditësimit/fshirjes së rreshtave shkruhen në COS/M dhe kompilohen.E kontrollova këtë deklaratë me teste për INSERT dhe SELECT në një tabelë me dy kolona, ​​duke përfshirë përdorimin e komandave TSTART dhe TCOMMIT (transaksionet).

Unë nuk kam testuar skenarë më kompleksë me akses të njëkohshëm dhe transaksione paralele.

Pa përdorimin e transaksioneve, norma e insertit ishte në një milion vlera prej 778 inserte/sekondë.
Në 300 milionë vlera, 422 inserte/sekondë.

Kur përdorni transaksione - 572 futje / sekondë për 082 milion inserte. Të gjitha operacionet u kryen nga kodi M i përpiluar.
Hard disqet janë normale, jo SSD. RAID5 me Write-back. Procesori Phenom II 1100T.

Për testim të ngjashëm të një baze të dhënash SQL, ju duhet të shkruani një procedurë të ruajtur që do të bëjë futje në një lak. Kur testova MySQL 5.5 (ruajtje InnoDB), duke përdorur këtë metodë, mora numra jo më shumë se 11K inserte në sekondë.
Po, zbatimi i tabelave në globale duket më i ndërlikuar sesa në bazat e të dhënave relacionale. Prandaj, bazat e të dhënave industriale në globalët kanë qasje SQL për të thjeshtuar punën me të dhënat tabelare.

Globalët janë shpata thesare për ruajtjen e të dhënave. Pemët. Pjesa 2Në përgjithësi, nëse skema e të dhënave nuk ndryshon shpesh, shpejtësia e futjes nuk është kritike dhe e gjithë baza e të dhënave mund të përfaqësohet lehtësisht si tabela të normalizuara, atëherë është më e lehtë të punohet me SQL, pasi siguron një nivel më të lartë abstraksioni.

Globalët janë shpata thesare për ruajtjen e të dhënave. Pemët. Pjesa 2Në këtë rast të veçantë, doja të tregoja këtë globalët mund të veprojnë si një konstruktor për të krijuar baza të tjera të dhënash. Si assembler në të cilin mund të shkruhen gjuhë të tjera. Dhe këtu janë shembuj se si mund të krijoni analoge në globale çelësi-vlera, listat, grupet, bazat e të dhënave tabelare, të orientuara nga dokumenti.

Nëse ju duhet të krijoni një lloj bazë të dhënash jo standarde me përpjekje minimale, atëherë duhet të shikoni drejt globalëve.

3.3 Rasti i veçantë 3. Pema me dy nivele, secila nyje e nivelit të dytë ka një numër fiks degësh

Globalët janë shpata thesare për ruajtjen e të dhënave. Pemët. Pjesa 2Me siguri e keni marrë me mend: ky është një zbatim alternativ i tabelave mbi globalët. Le ta krahasojmë këtë zbatim me atë të mëparshëm.

Tabelat në një pemë me dy nivele vs. në një pemë të një niveli të vetëm.

Cons
Rekuizitë

  1. Më e ngadaltë për futje, pasi duhet të vendosni numrin e nyjeve të barabartë me numrin e kolonave.
  2. Më shumë konsum i hapësirës në disk. Meqenëse indekset globale (në kuptimin e indekseve të grupeve) me emrat e kolonave zënë hapësirën në disk dhe dublikohen për çdo rresht.

  1. Qasje më e shpejtë në vlerat e kolonave individuale, pasi nuk ka nevojë të analizohet vargu. 11,5% më shpejt në testet e mia në 2 kolona dhe më shumë në më shumë kolona.
  2. Më e lehtë për të ndryshuar skemën
  3. Kodi më i qartë

Përfundim: për një amator. Meqenëse shpejtësia është një nga përfitimet kryesore të globalëve, nuk ka kuptim të përdoret ky zbatim, pasi ka të ngjarë të jetë jo më i shpejtë se tabelat në bazat e të dhënave relacionale.

3.4 Rasti i përgjithshëm. Pemë dhe pemë të porositura

Çdo strukturë e të dhënave që mund të përfaqësohet si një pemë u jepet mirë globalëve.

3.4.1 Objektet me nënobjekte

Globalët janë shpata thesare për ruajtjen e të dhënave. Pemët. Pjesa 2

Kjo është fusha e aplikimit tradicional të globalëve. Në fushën mjekësore, ekziston një numër i madh sëmundjesh, ilaçesh, simptomash, trajtimesh. Është joracionale të krijosh një tabelë me një milion fusha për çdo pacient. Për më tepër, 99% e fushave do të jenë bosh.

Imagjinoni një bazë të dhënash SQL me tabela: "pacient" ~ 100 fusha, "Mjekësi" - 000 fusha, "Terapia" - 100 fusha, "Komplikime" - 000 fusha, etj. e kështu me radhë. Ose mund të krijoni një bazë të dhënash me mijëra tabela, secila për një lloj të caktuar pacienti (dhe ato mund të mbivendosen!), trajtime, ilaçe dhe mijëra tabela të tjera për marrëdhëniet midis këtyre tabelave.

Globalët janë idealë për mjekësinë, pasi ju lejojnë të krijoni për çdo pacient një përshkrim të saktë të historisë së tij mjekësore, terapive të ndryshme, efekteve të barnave, në formën e një peme, pa humbur hapësirë ​​shtesë në disk në kolonat boshe, siç do të ishte në rastin relacional.

Globalët janë shpata thesare për ruajtjen e të dhënave. Pemët. Pjesa 2Është i përshtatshëm për të krijuar një bazë të dhënash me të dhëna për njerëzit në globalekur është e rëndësishme të grumbullohet dhe të sistemohet maksimumi i informacioneve të ndryshme për klientin. Kjo është e kërkuar në mjekësi, banka, marketing, arkiva dhe fusha të tjera.

.
Sigurisht, në SQL është gjithashtu e mundur të imitohet një pemë me vetëm disa tabela (Zgjatja EAV, 1,2,3,4,5,6,7,8,9,10), por kjo është shumë më e ndërlikuar dhe do të jetë më e ngadaltë. Në fakt, dikush do të duhet të shkruajë një punë globale në tabela dhe të fshehë të gjithë punën me tabela nën një shtresë abstraksioni. Është e gabuar të imitosh një teknologji të nivelit më të ulët (globalët) me anë të një niveli më të lartë (SQL). E papërshtatshme.

Nuk është sekret që ndryshimi i skemës së të dhënave në tabela gjigante (ALTER TABLE) mund të marrë një kohë të mirë. MySQL, për shembull, e bën ALTER TABLE ADD|DROP COLUMN një kopje të plotë të informacionit nga tabela e vjetër në të re (motorët e testuar MyISAM, InnoDB). Çfarë mund të mbyllë një bazë të dhënash funksionale me miliarda të dhëna për ditë, nëse jo javë.

Globalët janë shpata thesare për ruajtjen e të dhënave. Pemët. Pjesa 2Ndryshimi i strukturës së të dhënave, nëse përdorim globale, nuk na kushton asgjë. Në çdo kohë, ne mund të shtojmë çdo veçori të re që na nevojitet në çdo objekt, në çdo nivel të hierarkisë. Ndryshimet e riemërtimit të degëve mund të ekzekutohen në sfond në një bazë të dhënash që funksionon.


Prandaj, kur bëhet fjalë për ruajtjen e objekteve me një numër të madh të vetive opsionale, globalët janë një zgjedhje e shkëlqyer.

Dhe, më lejoni t'ju kujtoj, qasja në ndonjë nga pronat është e menjëhershme, pasi në global të gjitha shtigjet janë një pemë B.

Bazat e të dhënave mbi globalët, në rastin e përgjithshëm, janë një lloj bazash të dhënash të orientuara nga dokumentet me aftësinë për të ruajtur informacionin hierarkik. Prandaj, në fushën e ruajtjes së të dhënave mjekësore, bazat e të dhënave të orientuara nga dokumentet mund të konkurrojnë me globalët. Por ende nuk është në të vërtetëMerrni për krahasim, për shembull, MongoDB. Në këtë fushë humbet nga globalët për arsyet e mëposhtme:

  1. Madhësia e dokumentit. Njësia e ruajtjes është tekst në formatin JSON (më saktë BSON) me një madhësi maksimale prej rreth 16 MB. Kufizimi është bërë me qëllim në mënyrë që baza e të dhënave JSON të mos ngadalësohet kur analizon nëse një dokument i madh JSON ruhet në të, dhe më pas ata e aksesojnë atë sipas fushave. Ky dokument duhet të përmbajë të gjitha informacionet për pacientin. Të gjithë e dimë se sa të trasha mund të jenë tabelat e pacientëve. Madhësia maksimale e hartës prej 16 MB menjëherë i jep fund pacientëve, harta e sëmundjes së të cilëve përfshin skedarë MRI, skanime me rreze x dhe studime të tjera. Në një degë të globalit, mund të keni informacion mbi gigabajt dhe terabajt. Në parim, kësaj mund t'i jepet fund, por unë do të vazhdoj.
  2. Koha e ndërgjegjes / ndryshimit / heqjes së vetive të reja në grafikun e pacientit. Një bazë e tillë e të dhënave duhet të lexojë të gjithë hartën në memorie (kjo është një sasi e madhe!), të analizojë BSON, të shtojë / ndryshojë / fshijë një nyje të re, të përditësojë indekset, të paketojë në BSON, të ruajë në disk. Globalit i duhet vetëm t'i referohet një pronë specifike dhe ta manipulojë atë.
  3. Qasje e shpejtë në pronat individuale. Me shumë veti në dokument dhe strukturën e tij me shumë nivele, qasja në vetitë individuale do të jetë më e shpejtë për shkak të faktit se çdo shteg në global është një pemë B. Në BSON, duhet të analizoni në mënyrë lineare dokumentin për të gjetur pronën e dëshiruar.

3.3.2 Vargjet asociative

Vargjet shoqëruese (madje edhe me vargje të mbivendosur) përshtaten mirë me globalët. Për shembull, një grup i tillë nga PHP do të shfaqet në foton e parë 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 Dokumentet hierarkike: XML, JSON

Gjithashtu ruhet lehtësisht në globale. Për ruajtje, mund të dekompozohet në mënyra të ndryshme.

XML
Mënyra më e lehtë për të zbërthyer XML në globale është kur ruajmë atributet e etiketave në nyje. Dhe nëse keni nevojë për qasje të shpejtë në atributet e etiketave, atëherë ne mund t'i zhvendosim ato në degë të veçanta.

Globalët janë shpata thesare për ruajtjen e të dhënave. Pemët. Pjesa 2

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

Në COS, kjo do të korrespondojë me kodin:

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

vërejtje: Për XML, JSON, grupe shoqëruese, mund të gjeni shumë mënyra të ndryshme për t'u shfaqur në globale. Në këtë rast, ne nuk e kemi pasqyruar rendin e etiketave të vendosura në etiketën e shënimeve. Në globale ^xml etiketat e mbivendosura do të shfaqen sipas rendit alfabetik. Për të pasqyruar rreptësisht rendin, mund të përdorni, për shembull, një hartë të tillë:

Globalët janë shpata thesare për ruajtjen e të dhënave. Pemët. Pjesa 2
JSON.
Fotografia e parë nga seksioni 3.3.1 tregon një pasqyrim të këtij dokumenti JSON:

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

3.3.4 Struktura identike të lidhura me marrëdhënie hierarkike

Shembuj: struktura e zyrave të shitjeve, vendndodhja e njerëzve në strukturën MLM, baza e hapjeve në shah.

Baza debutuese. Ju mund të përdorni një vlerësim të forcës së lëvizjes si vlerën e indeksit të nyjës globale. Më pas, për të zgjedhur lëvizjen më të fortë, do të mjaftojë të zgjidhni degën me peshën më të madhe. Në globale, të gjitha degët në çdo nivel do të renditen sipas fuqisë së lëvizjes.

Globalët janë shpata thesare për ruajtjen e të dhënave. Pemët. Pjesa 2

Struktura e zyrave të shitjeve, struktura e njerëzve në MLM. Nyjet mund të ruajnë disa vlera të memories që pasqyrojnë karakteristikat e të gjithë nënpemës. Për shembull, vëllimi i shitjeve të një nënpeme të caktuar. Në çdo kohë, ne mund të marrim një figurë që pasqyron arritjet e çdo dege.

Globalët janë shpata thesare për ruajtjen e të dhënave. Pemët. Pjesa 2

4. Kur është më e dobishme të përdoren globalët

Kolona e parë tregon rastet kur do të merrni një rritje të konsiderueshme të shpejtësisë kur përdorni globalët, dhe e dyta kur modeli i zhvillimit ose i të dhënave është thjeshtuar.

Shpejtësi
Lehtësia e përpunimit/prezantimit të të dhënave

  1. Fut [me renditje automatike në çdo nivel], [indeksuar nga çelësi kryesor]
  2. Heqja e nënpemëve
  3. Objekte me shumë veti të mbivendosura që kanë nevojë për qasje individuale
  4. Struktura hierarkike me aftësinë për të anashkaluar degët e fëmijëve nga çdo, madje edhe inekzistente
  5. Përshkimi i nënpemëve në thellësi
  1. Objektet/entitetet me një numër të madh të vetive/entiteteve opsionale [dhe/ose të ndërthurura]
  2. Të dhëna pa skema. Kur pronat e reja shpesh mund të shfaqen dhe të vjetrat zhduken.
  3. Ju duhet të krijoni një bazë të dhënash të personalizuar.
  4. Bazat e rrugës dhe pemët e vendimit. Kur është e përshtatshme për të paraqitur shtigjet si një pemë.
  5. Heqja e strukturave hierarkike pa përdorur rekursion

zgjerim “Globalët janë shpata thesari për ruajtjen e të dhënave. Vargje të rralla. Pjesa 3".

Mohim përgjegjësie: Ky artikull dhe komentet e mia për të janë mendimi im dhe nuk përfaqësojnë qëndrimin zyrtar të InterSystems Corporation.

Burimi: www.habr.com

Shto një koment