Globaalit ovat aarremiekkoja tietojen tallentamiseen. puut. Osa 2

Globaalit ovat aarremiekkoja tietojen tallentamiseen. puut. Osa 2Aloitus - katso osa 1.

3. Rakenteiden muunnelmia globaleja käytettäessä

Rakenteella, kuten tilatulla puulla, on useita erikoistapauksia. Tarkastellaan niitä, joilla on käytännön arvoa globaalien kanssa työskennellessä.

3.1 Erikoistapaus 1. Yksi solmu ilman haaroja


Globaalit ovat aarremiekkoja tietojen tallentamiseen. puut. Osa 2Globaaleja voidaan käyttää taulukon lisäksi myös säännöllisten muuttujien tavoin. Esimerkiksi laskurina:

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

Tässä tapauksessa globaalilla voi merkityksensä lisäksi olla myös haaroja. Yksi ei sulje pois toista.

3.2 Erikoistapaus 2. Yksi kärki ja monta haaraa

Yleensä tämä on klassinen avainarvokanta. Ja jos tallennamme joukon arvoja arvoksi, saamme hyvin tavallisen taulukon, jossa on ensisijainen avain.

Globaalit ovat aarremiekkoja tietojen tallentamiseen. puut. Osa 2

Globaalien taulukon toteuttamiseksi meidän on luotava rivit itse sarakearvoista ja tallennettava ne sitten globaaliin ensisijaisella avaimella. Jotta merkkijono voidaan jakaa uudelleen sarakkeisiin lukemisen aikana, voit käyttää:

  1. erotinmerkkejä.
    Set ^t(id1) = "col11/col21/col31"
    Set ^t(id2) = "col12/col22/col32"
  2. jäykkä kaava, jossa jokainen kenttä vie ennalta määrätyn määrän tavuja. Kuten relaatiotietokantoissa tehdään.
  3. erikoistoiminto $LB (saatavilla välimuistissa), joka luo arvojonon.
    Set ^t(id1) = $LB("col11", "col21", "col31")
    Set ^t(id2) = $LB("col12", "col22", "col32")

Mielenkiintoista on, että globaalien avulla ei ole vaikeaa tehdä jotain samanlaista kuin toissijaiset indeksit relaatiotietokannassa. Kutsutaan tällaisia ​​hakemistorakenteita globaaleiksi. Indeksin globaali on apupuu sellaisten kenttien nopeaan etsimiseen, jotka eivät ole osa pääglobaalin ensisijaista avainta. Sinun on kirjoitettava lisäkoodi, jotta voit täyttää sen ja käyttää sitä.

Luodaan ensimmäiseen sarakkeeseen globaali indeksi.

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

Nyt, jotta voimme etsiä nopeasti tietoa ensimmäisestä sarakkeesta, meidän on tarkasteltava globaalia ^i ja etsi ensisijaiset avaimet (id), jotka vastaavat ensimmäisen sarakkeen haluttua arvoa.

Kun lisäät arvon, voimme välittömästi luoda sekä arvon että indeksin globaalit pakolliset kentät. Ja luotettavuuden vuoksi kääritään se kaikki kaupaksi.

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

Yksityiskohdat kuinka se tehdään M taulukoita globaaleista, toissijaisten indeksien emulointi.

Tällaiset taulukot toimivat yhtä nopeasti kuin perinteiset tietokannat (tai jopa nopeammin), jos rivien lisäys/päivitys/poistotoiminnot kirjoitetaan COS/M:llä ja käännetään.Tarkastin tämän lausunnon joukko INSERT- ja SELECT-testeillä yhdeksi kaksisarakkeiseksi taulukoksi, mukaan lukien TSTART- ja TCOMMIT-komentojen (transactions) käyttö.

En ole testannut monimutkaisempia skenaarioita samanaikaisen pääsyn ja rinnakkaisten tapahtumien kanssa.

Ilman tapahtumia lisäysnopeus oli 778 361 lisäystä sekunnissa miljoonaa arvoa kohden.
300 miljoonalla arvolla - 422 141 lisäystä sekunnissa.

Käytettäessä tapahtumia - 572 082 lisäystä sekunnissa 50 miljoonalle lisäykselle. Kaikki toiminnot suoritettiin käännetystä M-koodista.
Kiintolevyt ovat tavallisia, eivät SSD-levyjä. RAID5 ja takaisinkirjoitus. Phenom II 1100T prosessori.

Jos haluat testata SQL-tietokantaa samalla tavalla, sinun on kirjoitettava tallennettu toimintosarja, joka suorittaa lisäykset silmukassa. Kun testasin MySQL 5.5:tä (InnoDB-tallennustila), tällä menetelmällä sain numeroita enintään 11 ​​XNUMX lisäystä sekunnissa.
Kyllä, taulukoiden toteutus globaaleilla näyttää monimutkaisemmalta kuin relaatiotietokantoissa. Siksi teollisilla globaaleilla tietokannoilla on SQL-käyttöoikeus taulukkotietojen käsittelyn yksinkertaistamiseksi.

Globaalit ovat aarremiekkoja tietojen tallentamiseen. puut. Osa 2Yleisesti ottaen, jos tietoskeema ei muutu usein, lisäysnopeus ei ole kriittinen ja koko tietokanta voidaan helposti esittää normalisoitujen taulukoiden muodossa, on SQL:n kanssa helpompi työskennellä, koska se tarjoaa korkeamman tason abstraktiota. .

Globaalit ovat aarremiekkoja tietojen tallentamiseen. puut. Osa 2Tässä nimenomaisessa tapauksessa halusin näyttää sen globals voi toimia rakentajana muiden tietokantojen luomiseen. Kuten kokoaja, jolla voidaan kirjoittaa muita kieliä. Tässä on esimerkkejä siitä, kuinka voit luoda analogeja globaaleille avainarvo, luettelot, joukot, taulukkomuotoiset, dokumenttipohjaiset tietokannat.

Jos sinun on luotava jonkinlainen epätyypillinen tietokanta pienellä vaivalla, sinun tulee katsoa kohti globaaleja.

3.3 Erikoistapaus 3. Kaksitasoinen puu, jokaisella toisen tason solmulla on kiinteä määrä oksia

Globaalit ovat aarremiekkoja tietojen tallentamiseen. puut. Osa 2Luultavasti arvasit sen: tämä on vaihtoehtoinen taulukoiden toteutus globaaleilla. Verrataan tätä toteutusta edelliseen.

Taulukot kaksitasoisessa puussa vs. yksitasoisessa puussa.

Miinukset
Pros

  1. Hitaampi lisäys, koska sinun on asetettava solmujen lukumäärä yhtä suureksi kuin sarakkeiden määrä.
  2. Lisää levytilan kulutusta. Koska globaalit indeksit (jotka ymmärretään taulukkoindeksiksi) sarakkeiden nimillä vievät levytilaa ja kopioidaan jokaiselle riville.

  1. Nopeampi pääsy yksittäisten sarakkeiden arvoihin, koska merkkijonoa ei tarvitse jäsentää. Testieni mukaan se on 11,5 % nopeampi kahdella sarakkeella ja enemmän suuremmalla määrällä sarakkeita.
  2. Tietoskeemaa on helpompi muuttaa
  3. Selkeämpi koodi

Johtopäätös: ei kaikille. Koska nopeus on yksi globaalien tärkeimmistä eduista, tämän toteutuksen käyttämisessä ei ole juurikaan järkeä, koska se ei todennäköisesti toimi nopeammin kuin relaatiotietokantojen taulukot.

3.4 Yleinen tapaus. Puut ja tilatut puut

Mikä tahansa tietorakenne, joka voidaan esittää puuna, sopii täydellisesti globaalien kanssa.

3.4.1 Objektit aliobjekteilla

Globaalit ovat aarremiekkoja tietojen tallentamiseen. puut. Osa 2

Tämä on globaalien perinteisen käytön alue. Lääketieteen alalla on valtava määrä sairauksia, lääkkeitä, oireita ja hoitomenetelmiä. On järjetöntä luoda taulukko, jossa on miljoona kenttää jokaiselle potilaalle. Lisäksi 99 % kentistä on tyhjiä.

Kuvittele SQL-tietokanta taulukoista: "potilas" ~ 100 000 kenttää, "lääketiede" - 100 000 kenttää, "terapia" - 100 000 kenttää, "komplikaatiot" - 100 000 kenttää jne. ja niin edelleen. Tai voit luoda tietokannan useista tuhansista taulukoista, kukin tietylle potilastyypille (ja ne voivat olla päällekkäisiä!), hoidoista, lääkkeistä ja tuhansista muista taulukoista näiden taulukoiden välisiä yhteyksiä varten.

Globaalit ovat ihanteellisia lääketieteessä, koska niiden avulla voit luoda jokaiselle potilaalle tarkan kuvauksen hänen sairaushistoriastaan, erilaisista hoidoistaan ​​ja lääkkeiden toiminnasta puun muodossa tuhlaamatta ylimääräistä levytilaa tyhjiin sarakkeisiin, kuten tekisi. olla näin relaatiotapauksessa.

Globaalit ovat aarremiekkoja tietojen tallentamiseen. puut. Osa 2Globaaleja käyttämällä on kätevää luoda tietokanta, jossa on tietoja ihmisistä, kun on tärkeää kerätä ja systematisoida mahdollisimman paljon erilaista tietoa asiakkaasta. Tälle on kysyntää lääketieteen, pankkitoiminnan, markkinoinnin, arkistoinnin ja muilla aloilla

.
Tietysti SQL:ssä voit myös emuloida puuta vain muutamalla taulukolla (EAV laajennus, 1,2,3,4,5,6,7,8,9,10), mutta tämä on huomattavasti monimutkaisempaa ja hitaampaa. Pohjimmiltaan sinun pitäisi kirjoittaa globaali, joka toimii taulukoissa ja piilottaa kaikki työt taulukoiden kanssa abstraktiokerroksen alle. On väärin jäljitellä alemman tason teknologiaa (globaaleja) käyttämällä korkeamman tason teknologiaa (SQL). Sopimatonta.

Ei ole mikään salaisuus, että dataskeeman muuttaminen jättiläistaulukoissa (ALTER TABLE) voi viedä melkoisen paljon aikaa. MySQL esimerkiksi MUUTA TABLE ADD|DROP COLUMN:ia kopioimalla tiedot kokonaan vanhasta taulukosta uuteen taulukkoon (testatut MyISAM-, InnoDB-moottorit). Joka voi ripustaa toimivan tietokannan, jossa on miljardeja tietueita päivien, ellei viikkojen ajan.

Globaalit ovat aarremiekkoja tietojen tallentamiseen. puut. Osa 2Tietorakenteen muuttaminen, jos käytämme globaaleja, ei maksa meille mitään. Voimme milloin tahansa lisätä mitä tahansa uusia ominaisuuksia mihin tahansa objektiin, millä tahansa hierarkian tasolla. Haarojen uudelleennimeämiseen liittyvät muutokset voidaan suorittaa käynnissä olevan tietokannan taustalla.


Siksi globaalit ovat loistava valinta, kun haluat tallentaa objekteja, joissa on valtava määrä valinnaisia ​​ominaisuuksia.

Lisäksi haluan muistuttaa, että pääsy kaikkiin kiinteistöihin on välitöntä, koska maailmanlaajuisesti kaikki polut ovat B-puita.

Globaalit tietokannat ovat yleensä eräänlainen dokumenttipohjainen tietokanta, joka pystyy tallentamaan hierarkkisia tietoja. Siksi asiakirjapohjaiset tietokannat voivat kilpailla globaalien kanssa potilastietojen tallentamisessa. Mutta se ei silti ole aivan samaOtetaan vertailuksi MongoDB. Tällä verkkotunnuksella se häviää globaaleille seuraavista syistä:

  1. Asiakirjan koko. Tallennusyksikkö on JSON-muotoista tekstiä (tarkemmin BSON), jonka enimmäismäärä on noin 16 Mt. Rajoitus tehtiin nimenomaan siksi, että JSON-tietokanta ei hidastu jäsentämisen aikana, jos siihen on tallennettu valtava JSON-dokumentti ja sitten sitä käytetään kenttien kautta. Tämän asiakirjan tulee sisältää kaikki tiedot potilaasta. Tiedämme kaikki, kuinka paksut potilastiedot voivat olla. Kortin enimmäiskoko 16 Mt lopettaa välittömästi potilaiden, joiden sairauskortti sisältää magneettikuvauksia, röntgenkuvauksia ja muita tutkimuksia. Yhdellä globaalin haaralla voi olla gigatavuja ja teratavuja tietoa. Periaatteessa voimme lopettaa tämän, mutta jatkan.
  2. Tajunnan/muutos/uusien ominaisuuksien poistoaika potilaskaaviosta. Tällaisen tietokannan täytyy lukea koko kartta muistiin (tämä on suuri määrä!), jäsentää BSON, lisätä/muuttaa/poistaa uusi solmu, päivittää indeksit, pakata se BSONiin ja tallentaa levylle. Globaalin tarvitsee vain käyttää tiettyä ominaisuutta ja käsitellä sitä.
  3. Nopea pääsy yksittäisiin kiinteistöihin. Kun asiakirjassa on monia ominaisuuksia ja sen monitasoinen rakenne, pääsy yksittäisiin ominaisuuksiin on nopeampaa, koska jokainen polku globaalissa on B-puu. BSONissa sinun on jäsennettävä asiakirja lineaarisesti löytääksesi haluttu ominaisuus.

3.3.2 Assosiatiiviset taulukot

Assosiatiiviset taulukot (jopa sisäkkäisillä taulukoilla) sopivat täydellisesti globaaleihin. Esimerkiksi tällainen PHP:n taulukko näytetään ensimmäisessä kuvassa 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 Hierarkkiset asiakirjat: XML, JSON

Säilytetään myös helposti globaaleihin kohteisiin. Voidaan sijoittaa eri tavoin säilytystä varten.

XML
Helpoin tapa hajottaa XML globaaleiksi on tallentaa tag-attribuutit solmuihin. Ja jos tarvitaan nopea pääsy tag-attribuutteihin, voimme siirtää ne erillisiin haaroihin.

Globaalit ovat aarremiekkoja tietojen tallentamiseen. puut. Osa 2

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

COS:ssä tämä vastaisi koodia:

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

huomautus: XML-, JSON- ja assosiatiivisille taulukoille voit keksiä monia erilaisia ​​tapoja näyttää globaaleilla. Tässä tapauksessa emme heijastaneet alitunnisteiden järjestystä huomautustunnisteessa. Globaalisti ^xml alatunnisteet näytetään aakkosjärjestyksessä. Jotta tilaus näkyy tarkasti, voit käyttää esimerkiksi seuraavaa näyttöä:

Globaalit ovat aarremiekkoja tietojen tallentamiseen. puut. Osa 2
JSON.
Ensimmäinen kuva osiosta 3.3.1 näyttää heijastuksen tästä JSON-asiakirjasta:

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

3.3.4 Identtiset rakenteet, joita yhdistävät hierarkkiset suhteet

Esimerkkejä: myyntikonttoreiden rakenne, ihmisten sijainti MLM-rakenteessa, tietokanta avauksista shakissa.

Debyyttitietokanta. Voit käyttää iskuvoimaarviota globaalin solmun indeksiarvona. Sitten vahvimman liikkeen valitsemiseksi riittää, että valitset suurimman painon omaavan oksan. Globaalissa kaikki oksat kullakin tasolla lajitellaan liikkeen voimakkuuden mukaan.

Globaalit ovat aarremiekkoja tietojen tallentamiseen. puut. Osa 2

Myyntitoimistojen rakenne, ihmisten rakenne MLM:ssä. Solmut voivat tallentaa tiettyjä välimuistiarvoja, jotka kuvastavat koko alipuun ominaisuuksia. Esimerkiksi tietyn alipuun myyntimäärä. Milloin tahansa voimme saada kuvan, joka heijastaa minkä tahansa toimialan saavutuksia.

Globaalit ovat aarremiekkoja tietojen tallentamiseen. puut. Osa 2

4. Missä tapauksissa on hyödyllisintä käyttää globaaleja?

Ensimmäinen sarake esittää tapauksia, joissa saat merkittävän nopeuden lisäyksen käyttämällä globaaleja, ja toisessa sarakkeessa, kun suunnittelua tai tietomallia yksinkertaistetaan.

Nopeus
Tietojen käsittelyn/esittelyn helppous

  1. Lisäys [automaattisella lajittelulla kullakin tasolla], [indeksointi pääavaimella]
  2. Alipuiden poistaminen
  3. Objektit, joissa on paljon sisäkkäisiä ominaisuuksia, jotka vaativat yksilöllisen pääsyn
  4. Hierarkkinen rakenne, jossa on mahdollisuus ohittaa lapsihaarat mistä tahansa haarasta, jopa olemattomasta
  5. Alipuiden läpikulku syvältä
  1. Objektit/kokonaisuudet, joissa on valtava määrä valinnaisia ​​[ja/tai sisäkkäisiä] ominaisuuksia/kokonaisuuksia
  2. Kaavioton data. Kun uusia ominaisuuksia voi usein ilmaantua ja vanhat katoavat.
  3. Sinun on luotava mukautettu tietokanta.
  4. Polkupohjat ja päätöspuut. Kun on kätevää esittää polkuja puuna.
  5. Hierarkkisten rakenteiden poistaminen ilman rekursiota

Laajentaminen ”Globalit ovat aarremiekkoja tietojen tallentamiseen. Harvat taulukot. osa 3".

Vastuun kieltäminen: Tämä artikkeli ja siihen liittyvät kommentit ovat minun mielipiteitäni, eivätkä ne liity InterSystems Corporationin viralliseen kantaan.

Lähde: will.com

Lisää kommentti