Globals huma teżor-xwabel għall-ħażna tad-data. Siġar. Parti 2

Globals huma teżor-xwabel għall-ħażna tad-data. Siġar. Parti 2Kif tibda - ara l-parti 1.

3. Varjanti ta 'strutturi meta jintużaw globali

Struttura bħal siġra ordnata għandha diversi każijiet speċjali. Ejja nikkunsidraw dawk li għandhom valur prattiku meta jaħdmu ma 'globals.

3.1 Każ speċjali 1. Nodu wieħed mingħajr fergħat


Globals huma teżor-xwabel għall-ħażna tad-data. Siġar. Parti 2Globals jistgħu jintużaw mhux biss bħal firxa, iżda wkoll bħal varjabbli regolari. Per eżempju, bħala counter:

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

F'dan il-każ, il-globali, minbarra t-tifsira tiegħu, jista 'jkollu wkoll fergħat. Wieħed ma jeskludix lill-ieħor.

3.2 Każ speċjali 2. Vertiċi wieħed u ħafna fergħat

B'mod ġenerali, din hija bażi klassika ta 'valur ewlieni. U jekk niffrankaw tuple ta 'valuri bħala valur, se nġibu tabella ordinarja ħafna b'ċavetta primarja.

Globals huma teżor-xwabel għall-ħażna tad-data. Siġar. Parti 2

Biex nimplimentaw tabella fuq globali, ser ikollna niġġeneraw ringieli aħna stess mill-valuri tal-kolonna, u mbagħad issalvahom fil-globali billi tuża ċ-ċavetta primarja. Biex tagħmilha possibbli li terġa 'taqsam is-sekwenza f'kolonni meta taqra, tista' tuża:

  1. karattri delimitaturi.
    Set ^t(id1) = "col11/col21/col31"
    Set ^t(id2) = "col12/col22/col32"
  2. skema riġida li fiha kull qasam jokkupa numru predeterminat ta 'bytes. Kif isir fid-databases relazzjonali.
  3. funzjoni speċjali $LB (disponibbli fil-Cache), li toħloq sensiela ta' valuri.
    Set ^t(id1) = $LB("col11", "col21", "col31")
    Set ^t(id2) = $LB("col12", "col22", "col32")

Interessanti, mhuwiex diffiċli li tuża globali biex tagħmel xi ħaġa simili għall-indiċi sekondarji f'databases relazzjonali. Ejja nsejħu tali strutturi indiċi globali. Indiċi globali huwa siġra awżiljarja għal tiftix malajr oqsma li mhumiex parti miċ-ċavetta primarja tal-globali prinċipali. Biex timlaha u tużah, trid tikteb kodiċi addizzjonali.

Ejja noħolqu indiċi globali fuq l-ewwel kolonna.

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

Issa, biex infittxu malajr l-informazzjoni fl-ewwel kolonna, irridu nħarsu lejn id-dinja ^i u sib iċ-ċwievet primarji (id) li jikkorrispondu għall-valur mixtieq tal-ewwel kolonna.

Meta ddaħħal valur, nistgħu immedjatament noħolqu kemm il-valur kif ukoll l-indiċi globali għall-oqsma meħtieġa. U għall-affidabbiltà, ejja nagħlaqha kollha fi tranżazzjoni.

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

Dettalji dwar kif tagħmel dan fuq M tabelli dwar globali, emulazzjoni ta' indiċi sekondarji.

Tabelli bħal dawn jaħdmu malajr daqs id-databases tradizzjonali (jew saħansitra aktar malajr) jekk il-funzjonijiet biex jiddaħħlu/taġġornaw/tħassru ringieli jinkitbu f'COS/M u jiġu kkompilati.Iċċekkjajt din id-dikjarazzjoni b'testijiet fuq bulk INSERT u SELECT f'tabella waħda b'żewġ kolonni, inkluż l-użu tal-kmandi TSTART u TCOMMIT (tranżazzjonijiet).

Ma ttestjajtx xenarji aktar kumplessi b'aċċess konkorrenti u tranżazzjonijiet paralleli.

Mingħajr ma tuża tranżazzjonijiet, ir-rata ta 'inserzjoni kienet 778 inserzjoni/sekonda għal kull miljun valuri.
Bi 300 miljun valuri - 422 inserzjoni/sekonda.

Meta tuża tranżazzjonijiet - 572 inserzjonijiet/sekonda għal inserzjonijiet 082M. L-operazzjonijiet kollha saru minn kodiċi M ikkumpilat.
Il-hard drives huma regolari, mhux SSD. RAID5 b'Write-back. Proċessur Phenom II 1100T.

Biex tittestja database SQL b'mod simili, trid tikteb proċedura maħżuna li twettaq inserzjonijiet f'linja. Meta ttestja MySQL 5.5 (ħażna InnoDB), bl-użu ta 'dan il-metodu rċevejt numri mhux aktar minn inserzjonijiet 11K kull sekonda.
Iva, l-implimentazzjoni tat-tabelli fuq globali tidher aktar kumplessa milli fid-databases relazzjonali. Għalhekk, databases industrijali fuq globali għandhom aċċess SQL biex jissimplifikaw ix-xogħol b'dejta tabulari.

Globals huma teżor-xwabel għall-ħażna tad-data. Siġar. Parti 2B'mod ġenerali, jekk l-iskema tad-dejta ma tinbidelx ta 'spiss, il-veloċità tal-inserzjoni mhix kritika u d-database kollha tista' tiġi rappreżentata faċilment fil-forma ta 'tabelli normalizzati, allura huwa aktar faċli li taħdem ma' SQL, peress li tipprovdi livell ogħla ta 'estrazzjoni. .

Globals huma teżor-xwabel għall-ħażna tad-data. Siġar. Parti 2F’dan il-każ partikolari xtaqt nuri hekk globali jistgħu jaġixxu bħala kostruttur għall-ħolqien ta 'databases oħra. Bħal muntatur li fih jistgħu jinkitbu lingwi oħra. Hawn huma eżempji ta 'kif tista' toħloq analogi fuq globali key-value, listi, settijiet, tabulari, databases orjentati lejn id-dokument.

Jekk għandek bżonn toħloq xi tip ta 'database mhux standard bi sforz minimu, allura għandek tħares lejn globali.

3.3 Każ speċjali 3. Siġra fuq żewġ livelli, kull nodu tat-tieni livell għandu numru fiss ta 'fergħat

Globals huma teżor-xwabel għall-ħażna tad-data. Siġar. Parti 2Probabilment qtajt: din hija implimentazzjoni alternattiva ta 'tabelli fuq globali. Ejja nqabblu din l-implimentazzjoni ma' dik ta' qabel.

Tabelli fuq siġra fuq żewġ livelli vs. fuq siġra ta’ livell wieħed.

Cons
Pros

  1. Aktar bil-mod għall-inserzjoni, peress li għandek bżonn tissettja n-numru ta 'nodi ugwali għan-numru ta' kolonni.
  2. Aktar konsum ta 'spazju fuq disk. Peress li l-indiċijiet globali (mifhuma bħala indiċi ta' firxa) b'ismijiet ta' kolonni jieħdu spazju fuq id-diska u huma duplikati għal kull ringiela.

  1. Aċċess aktar mgħaġġel għall-valuri ta 'kolonni individwali, peress li m'hemmx bżonn li tiġi analizzata s-sekwenza. Skont it-testijiet tiegħi, huwa 11,5% aktar mgħaġġel fuq 2 kolonni u aktar fuq numru akbar ta 'kolonni.
  2. Aktar faċli biex tibdel l-iskema tad-data
  3. Kodiċi aktar ċar

Konklużjoni: mhux għal kulħadd. Peress li l-veloċità hija waħda mill-aktar benefiċċji ewlenin tal-globals, ma tantx hemm bżonn li tuża din l-implimentazzjoni, peress li x'aktarx ma twettaqx aktar malajr mit-tabelli f'databases relazzjonali.

3.4 Każ ġenerali. Siġar u siġar ordnati

Kwalunkwe struttura tad-dejta li tista 'tiġi rappreżentata bħala siġra taqbel perfettament mal-globals.

3.4.1 Oġġetti b'suboġġetti

Globals huma teżor-xwabel għall-ħażna tad-data. Siġar. Parti 2

Dan huwa l-qasam tal-użu tradizzjonali tal-globals. Fil-qasam mediku hemm numru kbir ta 'mard, mediċini, sintomi, u metodi ta' trattament. Huwa irrazzjonali li tinħoloq tabella b'miljun qasam għal kull pazjent. Barra minn hekk, 99% tal-oqsma se jkunu vojta.

Immaġina database SQL ta 'tabelli: "pazjent" ~ 100 qasam, "Mediċina" - 000 qasam, "Terapia" - 100 qasam, "Komplikazzjonijiet" - 000 qasam, eċċ. u l-bqija. Jew tista 'toħloq database ta' ħafna eluf ta 'tabelli, kull waħda għal tip speċifiku ta' pazjent (u jistgħu jikkoinċidu!), trattamenti, mediċini, u eluf ta 'tabelli aktar għal konnessjonijiet bejn dawn it-tabelli.

Globals huma ideali għall-mediċina, peress li jippermettulek toħloq għal kull pazjent deskrizzjoni preċiża tal-istorja medika tiegħu, terapiji varji, u l-azzjonijiet ta 'mediċini, fil-forma ta' siġra, mingħajr ma taħli spazju żejjed fuq disk fuq kolonni vojta, kif ikun ikun il-każ f'każ relazzjonali.

Globals huma teżor-xwabel għall-ħażna tad-data. Siġar. Parti 2Bl-użu ta 'globals huwa konvenjenti li tinħoloq database b'dejta dwar in-nies, meta huwa importanti li jakkumulaw u sistematizzaw massimu ta 'informazzjoni varji dwar il-klijent. Dan huwa fid-domanda fil-mediċina, bankarji, marketing, arkivjar u oqsma oħra

.
Naturalment, fl-SQL tista' wkoll timita siġra bi ftit tabelli biss (Estensjoni EAV, 1,2,3,4,5,6,7,8,9,10), madankollu dan huwa ferm aktar ikkumplikat u se jkun aktar bil-mod. Essenzjalment, ikollok tikteb globali li jaħdem fuq it-tabelli u taħbi x-xogħol kollu bit-tabelli taħt saff ta 'estrazzjoni. Huwa żbaljat li timita teknoloġija ta 'livell aktar baxx (globals) bl-użu ta' teknoloġija ta 'livell ogħla (SQL). Mhux xieraq.

Mhuwiex sigriet li t-tibdil tal-iskema tad-dejta fuq tabelli ġganti (ALTER TABLE) jista 'jieħu ammont ta' żmien ġust. MySQL, per eżempju, ma ALTER TABLE ADD | DROP KOLONNA billi tikkopja kompletament l-informazzjoni mit-tabella l-antika għat-tabella l-ġdida (magni MyISAM, InnoDB ttestjati). Li jista 'jwaqqaf database ta' ħidma b'biljuni ta 'rekords għal jiem, jekk mhux ġimgħat.

Globals huma teżor-xwabel għall-ħażna tad-data. Siġar. Parti 2Li nibdlu l-istruttura tad-dejta jekk nużaw il-globals ma tiswielna xejn. Fi kwalunkwe ħin nistgħu nżidu kwalunkwe proprjetajiet ġodda li għandna bżonn ma 'kull oġġett, fi kwalunkwe livell tal-ġerarkija. Bidliet assoċjati mat-tismija mill-ġdid tal-fergħat jistgħu jitmexxew fl-isfond fuq database li taħdem.


Għalhekk, meta niġu għall-ħażna ta 'oġġetti b'numru kbir ta' proprjetajiet fakultattivi, globali huma għażla kbira.

Barra minn hekk, ħalluni nfakkarkom li l-aċċess għal kwalunkwe waħda mill-proprjetajiet huwa immedjat, peress li fid-dinja l-mogħdijiet kollha huma siġar B.

Databases globali, b'mod ġenerali, huma tip ta 'database orjentata lejn id-dokumenti bil-kapaċità li jaħżnu informazzjoni ġerarkika. Għalhekk, databases orjentati lejn id-dokumenti jistgħu jikkompetu ma 'globals fil-qasam tal-ħażna ta' rekords mediċi. Imma għadu mhux l-istessEjja nieħdu MongoDB għal tqabbil. F'dan il-qasam jitlef kontra l-globals għar-raġunijiet li ġejjin:

  1. Id-daqs tad-dokument. L-unità tal-ħażna hija test f'format JSON (b'mod aktar preċiż BSON) b'volum massimu ta 'madwar 16MB. Ir-restrizzjoni saret speċifikament sabiex id-database JSON ma jonqosx waqt l-analiżi jekk dokument JSON enormi jinħażen fih u mbagħad jiġi aċċessat mill-oqsma. Dan id-dokument għandu jkun fih l-informazzjoni kollha dwar il-pazjent. Ilkoll nafu kemm jistgħu jkunu ħoxnin ir-rekords tal-pazjenti. Id-daqs massimu tal-karta ta '16MB immedjatament itemm il-pazjenti li l-karta tal-mard tagħhom tinkludi fajls MRI, skans tar-raġġi X u studji oħra. F'fergħa waħda tad-dinja jista' jkollok gigabytes u terabytes ta' informazzjoni. Fil-prinċipju, nistgħu nsemmu dan, imma jien se nkompli.
  2. Ħin tas-sensi/bidla/tħassir ta 'proprjetajiet ġodda fil-grafika tal-pazjent. Database bħal din trid taqra l-mappa kollha fil-memorja (dan huwa ammont kbir!), Parse BSON, żid / tibdel / ħassar node ġdid, taġġorna l-indiċi, ippakkjaha f'BSON, u ssejvjaha fuq disk. Globali jeħtieġ biss li taċċessa proprjetà speċifika u timmanipulaha.
  3. Aċċess rapidu għal proprjetajiet individwali. B'ħafna proprjetajiet f'dokument u l-istruttura f'diversi livelli tiegħu, l-aċċess għal proprjetajiet individwali se jkun aktar mgħaġġel minħabba l-fatt li kull mogħdija fid-dinja hija siġra B. F'BSON, għandek teżamina d-dokument b'mod lineari biex issib il-proprjetà mixtieqa.

3.3.2 Arrays assoċjati

Arrays assoċjattivi (anke b'arrays nested) jaqblu perfettament fuq globali. Pereżempju, firxa bħal din minn PHP se tintwera fl-ewwel stampa 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 Dokumenti ġerarkiċi: XML, JSON

Maħżun ukoll faċilment fil-globals. Jistgħu jitqiegħdu f'modi differenti għall-ħażna.

XML
L-eħfef mod biex tiddikomponi XML f'globals huwa li taħżen l-attributi tat-tikketta f'nodi. U jekk ikun meħtieġ aċċess rapidu għall-attributi tat-tikketta, allura nistgħu nċaqalquhom f'fergħat separati.

Globals huma teżor-xwabel għall-ħażna tad-data. Siġar. Parti 2

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

Fuq COS dan ikun jikkorrispondi mal-kodiċi:

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

Nota: Għal XML, JSON, matriċi assoċjati, tista 'toħroġ b'ħafna modi differenti ta' kif turi fuq globali. F'dan il-każ, aħna ma rriflettux l-ordni tas-subtags fit-tikketta tan-nota. Globalment ^xml subtags se jintwerew f'ordni alfabetiku. Biex tirrifletti b'mod strett l-ordni, tista 'tuża, pereżempju, il-wiri li ġej:

Globals huma teżor-xwabel għall-ħażna tad-data. Siġar. Parti 2
JSON.
L-ewwel stampa mit-taqsima 3.3.1 turi riflessjoni ta’ dan id-dokument JSON:

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

3.3.4 Strutturi identiċi konnessi minn relazzjonijiet ġerarkiċi

Eżempji: l-istruttura tal-uffiċċji tal-bejgħ, il-post tan-nies fi struttura MLM, id-database tal-ftuħ fiċ-ċess.

Debutts database. Tista' tuża l-istima tal-forza tal-puplesija bħala l-valur tal-indiċi tan-nodu globali. Imbagħad, sabiex tagħżel l-iktar mossa b'saħħitha, ikun biżżejjed li tagħżel il-fergħa bl-akbar piż. Fil-globali, il-fergħat kollha f'kull livell se jiġu magħżula skont is-saħħa tal-moviment.

Globals huma teżor-xwabel għall-ħażna tad-data. Siġar. Parti 2

L-istruttura tal-uffiċċji tal-bejgħ, l-istruttura tan-nies fl-MLM. In-nodi jistgħu jaħżnu ċerti valuri caching li jirriflettu l-karatteristiċi tas-subtree kollha. Per eżempju, il-volum tal-bejgħ ta 'subtree partikolari. Fi kwalunkwe mument nistgħu niksbu figura li tirrifletti l-kisbiet ta 'kwalunkwe fergħa.

Globals huma teżor-xwabel għall-ħażna tad-data. Siġar. Parti 2

4. F'liema każijiet huwa l-aktar ta 'benefiċċju li tuża globali?

L-ewwel kolonna tippreżenta każijiet fejn int se tikseb qligħ sinifikanti fil-veloċità billi tuża globali, u t-tieni meta d-disinn jew il-mudell tad-dejta se jiġu ssimplifikati.

Veloċità
Faċilità tal-ipproċessar/preżentazzjoni tad-dejta

  1. Inserzjoni [b'għażla awtomatika f'kull livell], [indiċjar permezz ta' ċavetta prinċipali]
  2. It-tneħħija tas-sottosiġar
  3. Oġġetti b'ħafna proprjetajiet nested li jeħtieġu aċċess individwali
  4. Struttura ġerarkika bil-kapaċità li tevita fergħat tfal minn kwalunkwe fergħa, anke dawk ineżistenti
  5. Depth-first traversal of subtrees
  1. Oġġetti/entitajiet b’numru kbir ta’ proprjetajiet/entitajiet mhux obbligatorji [u/jew imbaħħlin].
  2. Dejta mingħajr skema. Meta proprjetajiet ġodda spiss jistgħu jidhru u dawk qodma jisparixxu.
  3. Għandek bżonn toħloq database tad-dwana.
  4. Bażi tal-mogħdija u siġar tad-deċiżjonijiet. Meta jkun konvenjenti li tirrappreżenta mogħdijiet bħala siġra.
  5. It-tneħħija ta' strutturi ġerarkiċi mingħajr ma tuża r-rikors

Estensjoni “Il-globali huma xwabel tat-teżor għall-ħażna tad-dejta. Arrays skarsi. Parti 3".

Ċaħda ta 'responsabbiltà: Dan l-artikolu u l-kummenti tiegħi għalih huma l-opinjoni tiegħi u m'għandhom l-ebda relazzjoni mal-pożizzjoni uffiċjali ta' InterSystems Corporation.

Sors: www.habr.com

Żid kumment