Ang mga global kay mga treasure-sword para sa pagtipig sa datos. Mga kahoy. Bahin 2

Ang mga global kay mga treasure-sword para sa pagtipig sa datos. Mga kahoy. Bahin 2Pagsugod - tan-awa ang bahin 1.

3. Mga variant sa mga istruktura kung mogamit mga global

Ang usa ka istruktura sama sa usa ka gimando nga kahoy adunay lainlaing mga espesyal nga kaso. Atong tagdon ang mga adunay praktikal nga bili kung nagtrabaho kauban ang mga global.

3.1 Espesyal nga kaso 1. Usa ka buko nga walay mga sanga


Ang mga global kay mga treasure-sword para sa pagtipig sa datos. Mga kahoy. Bahin 2Ang mga global mahimong magamit dili lamang sama sa usa ka array, apan sama usab sa regular nga mga variable. Pananglitan, isip usa ka counter:

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

Sa kini nga kaso, ang global, dugang sa kahulogan niini, mahimo usab nga adunay mga sanga. Dili iapil sa usa ang usa.

3.2 Espesyal nga kaso 2. Usa ka vertex ug daghang mga sanga

Sa kinatibuk-an, kini usa ka klasiko nga sukaranan nga sukaranan sa yawe. Ug kung magtipig kami usa ka tuple nga kantidad ingon usa ka kantidad, makakuha kami usa ka ordinaryo nga lamesa nga adunay panguna nga yawe.

Ang mga global kay mga treasure-sword para sa pagtipig sa datos. Mga kahoy. Bahin 2

Aron ipatuman ang usa ka lamesa sa mga global, kinahanglan namon nga maghimo mga laray sa among kaugalingon gikan sa mga kantidad sa kolum, ug dayon i-save kini sa global gamit ang panguna nga yawe. Aron mahimo nga posible nga bahinon ang hilo ngadto sa mga kolum pag-usab kung magbasa, mahimo nimong gamiton ang:

  1. mga karakter sa delimiter.
    Set ^t(id1) = "col11/col21/col31"
    Set ^t(id2) = "col12/col22/col32"
  2. usa ka estrikto nga laraw diin ang matag uma nag-okupar sa gitakda nang daan nga gidaghanon sa mga byte. Sama sa gibuhat sa relational database.
  3. usa ka espesyal nga function $LB (anaa sa Cache), nga nagmugna sa usa ka hugpong sa mga kantidad.
    Set ^t(id1) = $LB("col11", "col21", "col31")
    Set ^t(id2) = $LB("col12", "col22", "col32")

Makapainteres, dili lisud ang paggamit sa mga global aron mahimo ang usa ka butang nga susama sa mga sekondaryang indeks sa mga relational database. Tawgon nato ang ingon nga mga istruktura nga indeks nga global. Ang indeks nga global usa ka auxiliary nga kahoy alang sa dali nga pagpangita sa mga natad nga dili bahin sa panguna nga yawe sa panguna nga global. Aron mapuno kini ug magamit kini, kinahanglan nimo nga magsulat dugang nga code.

Magbuhat ta ug index global sa unang column.

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

Karon, aron dali nga makapangita sa kasayuran sa una nga kolum, kinahanglan naton tan-awon ang global ^i ug pangitaa ang nag-unang mga yawe (id) nga katumbas sa gitinguha nga kantidad sa unang kolum.

Kung magbutang usa ka kantidad, mahimo dayon namon nga mahimo ang parehas nga kantidad ug indeks nga mga global alang sa kinahanglan nga mga natad. Ug alang sa pagkakasaligan, ibutang nato ang tanan sa usa ka transaksyon.

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

Mga detalye kung giunsa kini buhaton sa M mga lamesa sa globals, pagsundog sa mga sekondaryang indeks.

Ang ingon nga mga lamesa molihok dayon sama sa tradisyonal nga mga database (o mas paspas pa) kung ang mga gimbuhaton alang sa pagsal-ot / pag-update / pagtangtang sa mga linya gisulat sa COS / M ug gihugpong.Gisusi nako kini nga pahayag nga adunay mga pagsulay sa kadaghanan nga INSERT ug SELECT sa usa ka lamesa nga duha ka kolum, lakip ang paggamit sa TSTART ug TCOMMIT nga mga mando (mga transaksyon).

Wala pa nako masulayan ang mas komplikado nga mga senaryo nga adunay dungan nga pag-access ug parehas nga mga transaksyon.

Kung walay paggamit sa mga transaksyon, ang insertion rate kay 778 inserts/second per million values.
Uban sa 300 milyon nga kantidad - 422 pagsal-ot / segundo.

Kung gigamit ang mga transaksyon - 572 nga pagsal-ot/segundo alang sa 082M nga pagsal-ot. Ang tanan nga mga operasyon gihimo gikan sa giipon nga M code.
Ang mga hard drive regular, dili SSD. RAID5 uban sa Pagsulat-balik. Phenom II 1100T nga processor.

Aron masulayan ang usa ka database sa SQL sa parehas nga paagi, kinahanglan nimo nga magsulat usa ka gitipig nga pamaagi nga maghimo mga pagsal-ot sa usa ka loop. Kung gisulayan ang MySQL 5.5 (InnoDB storage), gamit kini nga pamaagi nakadawat ako mga numero nga dili molapas sa 11K nga pagsal-ot matag segundo.
Oo, ang pagpatuman sa mga lamesa sa globals tan-awon nga mas komplikado kaysa sa relational database. Busa, ang mga database sa industriya sa mga global adunay access sa SQL aron mapasimple ang trabaho gamit ang tabular data.

Ang mga global kay mga treasure-sword para sa pagtipig sa datos. Mga kahoy. Bahin 2Sa kinatibuk-an, kung ang data schema dili mag-usab kanunay, ang insertion speed dili kritikal ug ang tibuok database mahimong dali nga marepresentar sa porma sa normalized nga mga lamesa, nan kini mas sayon ​​sa pagtrabaho uban sa SQL, tungod kay kini naghatag og mas taas nga lebel sa abstraction. .

Ang mga global kay mga treasure-sword para sa pagtipig sa datos. Mga kahoy. Bahin 2Niini nga partikular nga kaso gusto nakong ipakita kana globals mahimong molihok ingon nga usa ka constructor alang sa paghimo sa ubang mga database. Sama sa usa ka assembler diin ang ubang mga pinulongan mahimong isulat. Ania ang mga pananglitan kung giunsa nimo paghimo ang mga analogue sa mga global key-value, listahan, sets, tabular, document-oriented databases.

Kung kinahanglan nimo nga maghimo usa ka matang sa dili standard nga database nga adunay gamay nga paningkamot, nan kinahanglan nimo nga tan-awon ang mga global.

3.3 Espesyal nga kaso 3. Duha ka lebel nga kahoy, ang matag buko sa ikaduhang lebel adunay usa ka piho nga gidaghanon sa mga sanga

Ang mga global kay mga treasure-sword para sa pagtipig sa datos. Mga kahoy. Bahin 2Tingali nakatag-an ka niini: kini usa ka alternatibo nga pagpatuman sa mga lamesa sa mga global. Atong itandi kini nga pagpatuman sa nauna.

Mga lamesa sa duha ka lebel nga kahoy vs. sa usa ka lebel nga kahoy.

Минусы
Плюсы

  1. Mas hinay alang sa pagsulod, tungod kay kinahanglan nimo nga itakda ang gidaghanon sa mga node nga parehas sa gidaghanon sa mga kolum.
  2. Dugang nga disk space konsumo. Tungod kay ang mga global index (nasabtan nga array index) nga adunay mga ngalan sa kolum mokuha og disk space ug gikopya alang sa matag laray.

  1. Mas paspas nga pag-access sa mga kantidad sa indibidwal nga mga kolum, tungod kay dili kinahanglan nga i-parse ang string. Sumala sa akong mga pagsulay, kini 11,5% nga mas paspas sa 2 nga mga kolum ug labaw pa sa mas daghang gidaghanon sa mga kolum.
  2. Mas sayon ​​nga usbon ang data schema
  3. Mas klaro nga code

Panapos: dili para sa tanan. Tungod kay ang katulin usa sa labing hinungdanon nga mga benepisyo sa mga global, gamay ra ang punto sa paggamit niini nga pagpatuman, tungod kay kini lagmit nga dili molihok nga labi ka paspas kaysa mga lamesa sa mga database sa relasyon.

3.4 Kinatibuk-ang kaso. Mga kahoy ug nag-order nga mga kahoy

Ang bisan unsang istruktura sa datos nga mahimong irepresentar isip usa ka kahoy hingpit nga mohaum sa mga global.

3.4.1 Mga butang nga adunay mga butang

Ang mga global kay mga treasure-sword para sa pagtipig sa datos. Mga kahoy. Bahin 2

Kini ang lugar sa tradisyonal nga paggamit sa mga global. Sa medikal nga natad adunay daghang mga sakit, tambal, sintomas, ug pamaagi sa pagtambal. Dili makatarunganon nga maghimo usa ka lamesa nga adunay usa ka milyon nga mga uma alang sa matag pasyente. Dugang pa, 99% sa mga uma mahimong walay sulod.

Hunahunaa ang usa ka database sa SQL sa mga lamesa: "pasyente" ~ 100 nga mga uma, "Medicine" - 000 nga mga uma, "Therapy" - 100 nga mga uma, "Mga komplikasyon" - 000 nga mga uma, ug uban pa. ug uban pa. O makahimo ka og database sa daghang liboan ka mga lamesa, ang matag usa para sa usa ka espesipikong matang sa pasyente (ug mahimo silang magsapaw!), mga pagtambal, tambal, ug liboan pa nga mga lamesa alang sa mga koneksyon tali niini nga mga lamesa.

Ang mga global maayo alang sa medisina, tungod kay gitugotan ka nila nga maghimo alang sa matag pasyente usa ka tukma nga paghulagway sa iyang medikal nga kasaysayan, lainlaing mga terapiya, ug ang mga aksyon sa mga tambal, sa porma sa usa ka kahoy, nga wala mag-usik og dugang nga wanang sa disk sa walay sulod nga mga kolum, sama sa buhaton. mao ang kaso sa usa ka relational nga kaso.

Ang mga global kay mga treasure-sword para sa pagtipig sa datos. Mga kahoy. Bahin 2Ang paggamit sa globals dali nga maghimo usa ka database nga adunay datos bahin sa mga tawo, kung kini hinungdanon nga magtigum ug mag-systematize sa labing kadaghan nga lainlaing kasayuran bahin sa kliyente. Gipangayo kini sa medisina, banking, marketing, archiving ug uban pang mga lugar

.
Siyempre, sa SQL mahimo usab nimo nga sundon ang usa ka kahoy nga adunay pipila lang nga mga lamesa (EAV, 1,2,3,4,5,6,7,8,9,10), bisan pa kini labi ka labi ka komplikado ug labi ka hinay. Sa tinuud, kinahanglan nimo nga magsulat usa ka global nga nagtrabaho sa mga lamesa ug itago ang tanan nga trabaho sa mga lamesa sa ilawom sa usa ka layer sa abstraction. Sayop ang pagsundog sa ubos nga lebel nga teknolohiya (globals) gamit ang mas taas nga lebel nga teknolohiya (SQL). Dili angay.

Dili kini sekreto nga ang pagbag-o sa eskema sa datos sa higanteng mga lamesa (ALTER TABLE) mahimong magkinahanglan og patas nga oras. Ang MySQL, pananglitan, naghimo sa ALTER TABLE ADD|DROP COLUMN pinaagi sa hingpit nga pagkopya sa impormasyon gikan sa daan nga lamesa ngadto sa bag-ong lamesa (gisulayan ang MyISAM, InnoDB nga mga makina). Nga mahimong magbitay sa usa ka nagtrabaho nga database nga adunay binilyon nga mga rekord sulod sa mga adlaw, kung dili mga semana.

Ang mga global kay mga treasure-sword para sa pagtipig sa datos. Mga kahoy. Bahin 2Ang pagbag-o sa istruktura sa datos kung mogamit kami mga global wala’y gasto kanamo. Bisan unsang orasa makadugang kami ug bisan unsang bag-ong kabtangan nga among gikinahanglan sa bisan unsang butang, sa bisan unsang lebel sa hierarchy. Ang mga pagbag-o nga nalangkit sa pag-usab sa mga sanga mahimong ipadagan sa background sa usa ka nagdagan nga database.


Busa, kung bahin sa pagtipig sa mga butang nga adunay daghang mga opsyonal nga kabtangan, ang mga global usa ka maayong kapilian.

Dugang pa, pahinumdoman ko ikaw nga ang pag-access sa bisan unsang mga kabtangan dali ra, tungod kay sa tibuuk kalibutan ang tanan nga mga agianan B-kahoy.

Ang mga global database, sa kinatibuk-an, usa ka tipo sa database nga nakabase sa dokumento nga adunay katakus sa pagtipig sa hierarchical nga impormasyon. Busa, ang mga database nga nakabase sa dokumento mahimong makigkompetensya sa mga global sa natad sa pagtipig sa mga medikal nga rekord. Apan dili gihapon kini parehasAtong kuhaon ang MongoDB alang sa pagtandi. Niini nga domain napildi kini sa mga global tungod sa mosunod nga mga rason:

  1. Gidak-on sa dokumento. Ang storage unit kay text sa JSON format (mas tukma nga BSON) nga may maximum volume nga mga 16MB. Ang pagdili gihimo espesipiko aron ang JSON database dili mohinay sa panahon sa pag-parse kung ang usa ka dako nga JSON nga dokumento gitipigan niini ug dayon gi-access sa mga uma. Kini nga dokumento kinahanglan adunay tanan nga kasayuran bahin sa pasyente. Kitang tanan nahibal-an kung unsa ka baga ang mga rekord sa pasyente. Ang pinakataas nga gidak-on sa kard nga 16MB diha-diha dayon nagtapos sa mga pasyente kansang kard sa sakit naglakip sa mga file sa MRI, X-ray scan ug uban pang mga pagtuon. Sa usa ka sanga sa global mahimo kang adunay gigabytes ug terabytes sa impormasyon. Sa prinsipyo, mahimo natong tapuson kini, apan magpadayon ako.
  2. Panahon sa panimuot / pagbag-o / pagtangtang sa mga bag-ong kabtangan sa tsart sa pasyente. Ang ingon nga database kinahanglan nga basahon ang tibuok nga mapa ngadto sa memorya (kini usa ka dako nga kantidad!), pag-parse sa BSON, pagdugang/pag-usab/pagtangtang sa bag-ong node, pag-update sa mga indeks, pag-pack niini sa BSON, ug i-save kini sa disk. Ang usa ka global kinahanglan lamang nga maka-access sa usa ka piho nga kabtangan ug magmaniobra niini.
  3. Dali nga pag-access sa indibidwal nga mga kabtangan. Uban sa daghang mga kabtangan sa usa ka dokumento ug ang multi-level nga istruktura niini, ang pag-access sa indibidwal nga mga kabtangan mahimong mas paspas tungod sa kamatuoran nga ang matag agianan sa kalibutan usa ka B-tree. Sa BSON, kinahanglan nimo nga linearly parse ang dokumento aron makit-an ang gusto nga kabtangan.

3.3.2 Kauban nga mga han-ay

Ang mga associative arrays (bisan sa mga nested arrays) haum kaayo sa globals. Pananglitan, ang maong array gikan sa PHP ipakita sa unang hulagway 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 Hierarchical nga mga dokumento: XML, JSON

Dali usab nga gitipigan sa mga global. Mahimong ibutang sa lainlaing mga paagi alang sa pagtipig.

XML
Ang pinakasayon ​​nga paagi sa pag-decompose sa XML ngadto sa globals mao ang pagtipig sa tag attributes sa mga node. Ug kung gikinahanglan ang dali nga pag-access sa mga hiyas sa tag, mahimo naton kini ibalhin sa lainlaing mga sanga.

Ang mga global kay mga treasure-sword para sa pagtipig sa datos. Mga kahoy. Bahin 2

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

Sa COS kini katumbas sa code:

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

Komento: Para sa XML, JSON, associative arrays, makahimo ka og daghang lain-laing mga paagi sa pagpakita sa mga global. Niini nga kaso, wala namo gipakita ang han-ay sa mga subtag sa note tag. Sa tibuok kalibutan ^xml ang mga subtag ipakita sa alpabetikong han-ay. Aron estrikto nga ipakita ang han-ay, mahimo nimong gamiton, pananglitan, ang mosunod nga display:

Ang mga global kay mga treasure-sword para sa pagtipig sa datos. Mga kahoy. Bahin 2
JSON.
Ang unang hulagway gikan sa seksyon 3.3.1 nagpakita sa usa ka pagpamalandong niini nga JSON nga dokumento:

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

3.3.4 Parehas nga mga istruktura nga konektado sa hierarchical nga mga relasyon

Mga pananglitan: ang istruktura sa mga opisina sa pagpamaligya, ang lokasyon sa mga tawo sa istruktura sa MLM, ang database sa mga pag-abli sa chess.

Debut database. Mahimo nimong gamiton ang stroke force estimate isip index value sa global node. Unya, aron mapili ang labing kusog nga paglihok, igo na ang pagpili sa sanga nga adunay labing kadako nga gibug-aton. Sa pangkalibutanon, ang tanan nga mga sanga sa matag lebel paghan-ay sa kusog sa paglihok.

Ang mga global kay mga treasure-sword para sa pagtipig sa datos. Mga kahoy. Bahin 2

Ang istruktura sa mga opisina sa pagbaligya, ang istruktura sa mga tawo sa MLM. Ang mga node mahimong magtipig pipila nga mga kantidad sa caching nga nagpakita sa mga kinaiya sa tibuuk nga subtree. Pananglitan, ang gidaghanon sa pagbaligya sa usa ka gihatag nga subtree. Sa bisan unsang orasa makakuha kita ug numero nga nagpakita sa mga nahimo sa bisan unsang sanga.

Ang mga global kay mga treasure-sword para sa pagtipig sa datos. Mga kahoy. Bahin 2

4. Sa unsang mga kaso nga labing mapuslanon ang paggamit sa globals?

Ang una nga kolum nagpresentar sa mga kaso diin makakuha ka usa ka hinungdanon nga pagtaas sa tulin pinaagi sa paggamit sa mga global, ug ang ikaduha kung ang disenyo o modelo sa datos mapasimple.

Dali
Kasayon ​​sa pagproseso/pagpresentar sa datos

  1. Pagsulod [uban ang awtomatik nga paghan-ay sa matag lebel], [pag-indeks pinaagi sa master key]
  2. Pagtangtang sa mga subtree
  3. Mga butang nga adunay daghang mga salag nga mga kabtangan nga nanginahanglan indibidwal nga pag-access
  4. Hierarchical nga istruktura nga adunay abilidad sa pag-bypass sa mga sanga sa bata gikan sa bisan unsang sanga, bisan sa wala pa
  5. Ang giladmon-unang pag-agi sa mga subtree
  1. Mga butang/entidad nga adunay daghang opsyonal [ug/o nested] nga mga kabtangan/entidad
  2. Data nga walay schema. Kung ang bag-ong mga kabtangan kanunay nga makita ug ang mga daan mawala.
  3. Kinahanglan ka nga maghimo usa ka naandan nga database.
  4. Mga sukaranan sa agianan ug mga punoan sa desisyon. Kung kini kombenyente nga magrepresentar sa mga agianan ingon usa ka kahoy.
  5. Pagtangtang sa hierarchical nga mga istruktura nga wala gigamit ang recursion

Pagpadayon "Ang mga global mao ang mga espada sa bahandi alang sa pagtipig sa datos. Talagsaon nga mga han-ay. Bahin 3".

Disclaimer: Kini nga artikulo ug ang akong mga komento niini mao ang akong opinyon ug walay kalabotan sa opisyal nga posisyon sa InterSystems Corporation.

Source: www.habr.com

Idugang sa usa ka comment