Գլոբալները գանձ-սրեր են տվյալների պահպանման համար: Ծառեր. Մաս 2

Գլոբալները գանձ-սրեր են տվյալների պահպանման համար: Ծառեր. Մաս 2Սկսում ենք - տես մաս 1:

3. Կառուցվածքների տարբերակները գլոբալներ օգտագործելիս

Նման կառույցը, ինչպիսին է պատվիրված ծառը, ունի տարբեր հատուկ դեպքեր: Դիտարկենք դրանք, որոնք գործնական արժեք ունեն գլոբալների հետ աշխատելիս։

3.1 Հատուկ դեպք 1. Մեկ հանգույց առանց ճյուղերի


Գլոբալները գանձ-սրեր են տվյալների պահպանման համար: Ծառեր. Մաս 2Գլոբալները կարող են օգտագործվել ոչ միայն զանգվածի, այլև սովորական փոփոխականների նման։ Օրինակ, որպես հաշվիչ.

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

Այս դեպքում գլոբալը, բացի իր իմաստից, կարող է ունենալ նաև ճյուղեր։ Մեկը մյուսին չի բացառում.

3.2 Հատուկ դեպք 2. Մեկ գագաթ և բազմաթիվ ճյուղեր

Ընդհանուր առմամբ, սա դասական բանալի-արժեքի հիմք է: Եվ եթե որպես արժեք պահենք մի քանի արժեք, ապա կստանանք շատ սովորական աղյուսակ՝ առաջնային բանալիով:

Գլոբալները գանձ-սրեր են տվյալների պահպանման համար: Ծառեր. Մաս 2

Գլոբալների վերաբերյալ աղյուսակ իրականացնելու համար մենք պետք է ինքներս տողեր ստեղծենք սյունակի արժեքներից, այնուհետև դրանք պահպանենք գլոբալում՝ օգտագործելով հիմնական բանալին: Որպեսզի հնարավոր լինի կարդալ տողը կրկին սյունակների բաժանել, կարող եք օգտագործել.

  1. սահմանազատող նիշեր.
    Set ^t(id1) = "col11/col21/col31"
    Set ^t(id2) = "col12/col22/col32"
  2. կոշտ սխեմա, որտեղ յուրաքանչյուր դաշտ զբաղեցնում է բայթերի կանխորոշված ​​քանակություն: Ինչպես արվում է հարաբերական տվյալների բազաներում:
  3. հատուկ գործառույթ $LB (հասանելի է Cache-ում), որը ստեղծում է արժեքների շարան։
    Set ^t(id1) = $LB("col11", "col21", "col31")
    Set ^t(id2) = $LB("col12", "col22", "col32")

Հետաքրքիր է, որ դժվար չէ օգտագործել գլոբալները՝ հարաբերական տվյալների բազաներում երկրորդական ինդեքսների նման բան անելու համար: Նման կառույցները անվանենք ինդեքսային գլոբալներ։ Գլոբալ ինդեքսը օժանդակ ծառ է այն դաշտերի արագ որոնման համար, որոնք հիմնական գլոբալ հիմնական բանալին չեն: Այն լրացնելու և օգտագործելու համար անհրաժեշտ է լրացուցիչ կոդ գրել։

Եկեք ստեղծենք գլոբալ ինդեքս առաջին սյունակում:

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

Այժմ, առաջին սյունակում տեղեկատվություն արագ որոնելու համար մենք պետք է նայենք գլոբալին ^i և գտե՛ք առաջին սյունակի ցանկալի արժեքին համապատասխանող առաջնային ստեղները (id):

Արժեք տեղադրելիս մենք կարող ենք անմիջապես ստեղծել ինչպես արժեք, այնպես էլ ինդեքսային գլոբալներ պահանջվող դաշտերի համար: Եվ հուսալիության համար, եկեք այդ ամենը փաթեթավորենք գործարքի մեջ:

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

Մանրամասներ, թե ինչպես դա անել Մ գլոբալների վերաբերյալ աղյուսակներ, երկրորդական ինդեքսների էմուլյացիա.

Նման աղյուսակները կաշխատեն նույնքան արագ, որքան ավանդական տվյալների բազաներում (կամ նույնիսկ ավելի արագ), եթե տողերի տեղադրման/թարմացման/ջնջման գործառույթները գրվեն COS/M-ով և կազմվեն։Ես ստուգեցի այս հայտարարությունը զանգվածային INSERT-ի և SELECT-ի փորձարկումներով մեկ երկսյունանի աղյուսակում, ներառյալ TSTART և TCOMMIT հրամանները (գործարքները):

Ես չեմ փորձարկել ավելի բարդ սցենարներ միաժամանակյա մուտքով և զուգահեռ գործարքներով:

Առանց գործարքների օգտագործման, ներդրման տոկոսադրույքը կազմել է 778 ներդիր/վայրկյան մեկ միլիոն արժեքի համար:
300 միլիոն արժեքներով՝ 422 ներդիր/վրկ:

Գործարքներ օգտագործելիս - 572 ներդիր/վրկ 082M ներդիրների համար: Բոլոր գործողությունները կատարվել են կոմպիլացված M կոդից։
Կոշտ սկավառակները սովորական են, ոչ թե SSD: RAID5 հետ գրելու հետ: Phenom II 1100T պրոցեսոր:

SQL տվյալների բազան նմանատիպ եղանակով փորձարկելու համար դուք պետք է գրեք պահպանված պրոցեդուրա, որը կկատարի ներդիրներ օղակում: MySQL 5.5-ը (InnoDB պահեստավորում) փորձարկելիս, օգտագործելով այս մեթոդը, ես ստացա թվեր ոչ ավելի, քան 11K ներդիր վայրկյանում:
Այո, գլոբալների վրա աղյուսակների իրականացումն ավելի բարդ է թվում, քան հարաբերական տվյալների բազաներում: Հետևաբար, գլոբալների արդյունաբերական տվյալների բազաները ունեն SQL մուտք՝ աղյուսակային տվյալների հետ աշխատանքը պարզեցնելու համար:

Գլոբալները գանձ-սրեր են տվյալների պահպանման համար: Ծառեր. Մաս 2Ընդհանուր առմամբ, եթե տվյալների սխեման հաճախ չի փոխվի, տեղադրման արագությունը կարևոր չէ, և ամբողջ տվյալների բազան կարելի է հեշտությամբ ներկայացնել նորմալացված աղյուսակների տեսքով, ապա ավելի հեշտ է աշխատել SQL-ի հետ, քանի որ այն ապահովում է վերացականության ավելի բարձր մակարդակ: .

Գլոբալները գանձ-սրեր են տվյալների պահպանման համար: Ծառեր. Մաս 2Կոնկրետ այս դեպքում ես ուզում էի դա ցույց տալ գլոբալները կարող են հանդես գալ որպես կոնստրուկտոր՝ այլ տվյալների բազաներ ստեղծելու համար. Ասեմբլերի նման, որով կարող են գրվել այլ լեզուներ: Ահա օրինակներ, թե ինչպես կարող եք անալոգներ ստեղծել գլոբալների վրա բանալի-արժեք, ցուցակներ, հավաքածուներ, աղյուսակային, փաստաթղթերի վրա հիմնված տվյալների բազաներ:

Եթե ​​Ձեզ անհրաժեշտ է ստեղծել ինչ-որ ոչ ստանդարտ տվյալների բազա՝ նվազագույն ջանքերով, ապա դուք պետք է նայեք դեպի գլոբալները:

3.3 Հատուկ դեպք 3. Երկաստիճան ծառ, երկրորդ մակարդակի յուրաքանչյուր հանգույց ունի ֆիքսված թվով ճյուղեր.

Գլոբալները գանձ-սրեր են տվյալների պահպանման համար: Ծառեր. Մաս 2Դուք հավանաբար կռահեցիք. սա գլոբալների վերաբերյալ աղյուսակների այլընտրանքային իրականացում է: Համեմատենք այս իրականացումը նախորդի հետ։

Սեղաններ երկաստիճան ծառի վրա ընդդեմ. մի մակարդակի ծառի վրա:

Դեմ
Կոալիցիայում

  1. Ներդրման համար ավելի դանդաղ, քանի որ դուք պետք է սահմանեք հանգույցների թիվը հավասար սյունակների թվին:
  2. Ավելի շատ սկավառակի տարածության սպառում: Քանի որ սյունակների անուններով գլոբալ ինդեքսները (հասկացվում են որպես զանգվածի ինդեքսներ) զբաղեցնում են սկավառակի տարածք և կրկնօրինակվում են յուրաքանչյուր տողի համար:

  1. Առանձին սյունակների արժեքների ավելի արագ մուտք, քանի որ տողը վերլուծելու կարիք չկա: Իմ թեստերի համաձայն՝ այն 11,5%-ով ավելի արագ է 2 սյունակների վրա և ավելի շատ՝ ավելի մեծ թվով սյունակներում:
  2. Ավելի հեշտ է փոխել տվյալների սխեման
  3. Ավելի հստակ ծածկագիր

Եզրակացություն. ոչ բոլորի համար: Քանի որ արագությունը գլոբալների ամենակարևոր առավելություններից մեկն է, այս ներդրումն օգտագործելը քիչ իմաստ ունի, քանի որ, ամենայն հավանականությամբ, այն կգործի ոչ ավելի արագ, քան հարաբերական տվյալների բազաների աղյուսակները:

3.4 Ընդհանուր դեպք. Ծառեր և պատվիրված ծառեր

Ցանկացած տվյալների կառուցվածք, որը կարող է ներկայացվել որպես ծառ, լիովին համապատասխանում է գլոբալներին:

3.4.1 Օբյեկտներ ենթաօբյեկտներով

Գլոբալները գանձ-սրեր են տվյալների պահպանման համար: Ծառեր. Մաս 2

Սա գլոբալների ավանդական օգտագործման տարածքն է: Բժշկական ոլորտում առկա են հիվանդությունների, դեղորայքի, ախտանշանների և բուժման մեթոդների հսկայական քանակ։ Իռացիոնալ է յուրաքանչյուր հիվանդի համար միլիոն դաշտերով աղյուսակ ստեղծելը: Ընդ որում, դաշտերի 99 տոկոսը դատարկ կլինի։

Պատկերացրեք աղյուսակների SQL տվյալների բազա՝ «հիվանդ» ~ 100 դաշտ, «Բժշկություն»՝ 000 դաշտ, «Թերապիա»՝ 100 դաշտ, «Բարդություններ»՝ 000 դաշտ և այլն։ եւ այլն։ Կամ դուք կարող եք ստեղծել հազարավոր աղյուսակների տվյալների բազա, որոնցից յուրաքանչյուրը հիվանդի որոշակի տեսակի համար է (և դրանք կարող են համընկնել), բուժումներ, դեղամիջոցներ և հազարավոր այլ աղյուսակներ այս աղյուսակների միջև կապերի համար:

Գլոբալները իդեալական են բժշկության համար, քանի որ թույլ են տալիս յուրաքանչյուր հիվանդի համար ստեղծել նրա բժշկական պատմության, տարբեր թերապիաների և դեղամիջոցների գործողությունների ճշգրիտ նկարագրությունը ծառի տեսքով, առանց սկավառակի ավելորդ տարածություն վատնելու դատարկ սյուների վրա, ինչպես դա կլիներ: լինի գործը հարաբերական դեպքում:

Գլոբալները գանձ-սրեր են տվյալների պահպանման համար: Ծառեր. Մաս 2Օգտվելով գլոբալներից՝ հարմար է մարդկանց մասին տվյալների բազա ստեղծել, երբ կարևոր է հաճախորդի մասին առավելագույնը տարբեր տեղեկություններ կուտակել և համակարգել։ Սա պահանջված է բժշկության, բանկային, մարքեթինգի, արխիվային և այլ ոլորտներում

.
Իհարկե, SQL-ում կարող եք նաև ընդօրինակել ծառը ընդամենը մի քանի աղյուսակով (EAV, 1,2,3,4,5,6,7,8,9,10), սակայն սա զգալիորեն ավելի բարդ է և կլինի ավելի դանդաղ: Ըստ էության, դուք պետք է գրեք գլոբալ, որն աշխատում է աղյուսակների վրա և աբստրակցիոն շերտի տակ թաքցնում է աղյուսակների հետ կատարված բոլոր աշխատանքները: Սխալ է ավելի ցածր մակարդակի տեխնոլոգիաների (գլոբալների) նմանակումը՝ օգտագործելով ավելի բարձր մակարդակի տեխնոլոգիան (SQL): Անպատշաճ.

Գաղտնիք չէ, որ հսկա աղյուսակների վրա տվյալների սխեման փոխելը (ALTER TABLE) կարող է բավականին ժամանակ պահանջել: MySQL-ն, օրինակ, կատարում է ALTER TABLE ADD|Drop COLUMN-ը՝ ամբողջությամբ պատճենելով տեղեկատվությունը հին աղյուսակից նոր աղյուսակում (փորձարկված MyISAM, InnoDB շարժիչներ): Որը կարող է օրերով, եթե ոչ շաբաթներով կախել աշխատանքային տվյալների բազան միլիարդավոր գրառումներով:

Գլոբալները գանձ-սրեր են տվյալների պահպանման համար: Ծառեր. Մաս 2Տվյալների կառուցվածքը փոխելը, եթե մենք օգտագործում ենք գլոբալներ, մեզ ոչինչ չի պահանջում: Ցանկացած ժամանակ մենք կարող ենք մեզ անհրաժեշտ ցանկացած նոր հատկություն ավելացնել ցանկացած օբյեկտի, հիերարխիայի ցանկացած մակարդակում: Մասնաճյուղերի անվանափոխման հետ կապված փոփոխությունները կարող են գործարկվել ֆոնային ռեժիմում՝ գործող տվյալների բազայում:


Հետևաբար, երբ խոսքը վերաբերում է հսկայական թվով կամընտիր հատկություններով օբյեկտների պահպանմանը, գլոբալները հիանալի ընտրություն են:

Ավելին, հիշեցնեմ, որ ցանկացած հատկանիշի հասանելիությունը ակնթարթային է, քանի որ գլոբալում բոլոր ուղիները B-ծառեր են:

Համաշխարհային տվյալների շտեմարանները, ընդհանուր առմամբ, փաստաթղթերի վրա հիմնված տվյալների բազայի տեսակ են՝ հիերարխիկ տեղեկատվություն պահելու ունակությամբ: Հետևաբար, փաստաթղթերի վրա հիմնված տվյալների բազաները կարող են մրցակցել գլոբալների հետ բժշկական գրառումների պահպանման ոլորտում: Բայց դա դեռ այնքան էլ նույնը չէՀամեմատության համար վերցնենք MongoDB-ն: Այս տիրույթում այն պարտվում է գլոբալներին հետևյալ պատճառներով.

  1. Փաստաթղթի չափը. Պահպանման միավորը JSON ձևաչափով (ավելի ճիշտ՝ BSON) տեքստ է՝ մոտ 16 ՄԲ առավելագույն ծավալով։ Սահմանափակումն արվել է հատուկ, որպեսզի JSON տվյալների բազան չդանդաղի վերլուծության ընթացքում, եթե այնտեղ պահվում է հսկայական JSON փաստաթուղթ, այնուհետև հասանելի է դաշտերի միջոցով: Այս փաստաթուղթը պետք է պարունակի հիվանդի մասին բոլոր տեղեկությունները: Մենք բոլորս գիտենք, թե որքան հաստ են հիվանդների գրառումները: Քարտի առավելագույն չափը՝ 16 ՄԲ, անմիջապես վերջ է դնում այն ​​հիվանդներին, որոնց հիվանդության քարտը ներառում է MRI ֆայլեր, ռենտգեն հետազոտություններ և այլ հետազոտություններ: Գլոբալի մեկ ճյուղում դուք կարող եք ունենալ գիգաբայթ և տերաբայթ տեղեկատվություն: Սրան սկզբունքորեն կարող ենք վերջ տալ, բայց ես կշարունակեմ։
  2. Հիվանդի աղյուսակում նոր հատկությունների գիտակցության/փոփոխման/ջնջման ժամանակը: Նման տվյալների բազան պետք է կարդա ամբողջ քարտեզը հիշողության մեջ (սա մեծ քանակություն է), վերլուծի BSON-ը, ավելացնի/փոխի/ջնջի նոր հանգույց, թարմացնի ինդեքսները, փաթեթավորի այն BSON-ում և պահի այն սկավառակի վրա: Գլոբալը միայն պետք է մուտք գործի որոշակի սեփականություն և շահարկի այն:
  3. Արագ մուտք դեպի անհատական ​​հատկություններ: Փաստաթղթի բազմաթիվ հատկություններով և դրա բազմաստիճան կառուցվածքով, անհատական ​​հատկությունների հասանելիությունն ավելի արագ կլինի, քանի որ գլոբալ յուրաքանչյուր ուղի B-ծառ է: BSON-ում դուք պետք է գծային կերպով վերլուծեք փաստաթուղթը՝ ցանկալի հատկությունը գտնելու համար:

3.3.2 Ասոցիատիվ զանգվածներ

Ասոցիատիվ զանգվածները (նույնիսկ ներդիր զանգվածներով) հիանալի տեղավորվում են գլոբալների վրա: Օրինակ, PHP-ի նման զանգվածը կցուցադրվի առաջին նկարում 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 Հիերարխիկ փաստաթղթեր՝ XML, JSON

Նաև հեշտությամբ պահվում է գլոբալներում: Պահպանման համար կարող է տեղադրվել տարբեր ձևերով:

XML
XML-ը գլոբալների տարրալուծելու ամենադյուրին ճանապարհը պիտակների ատրիբուտները հանգույցներում պահելն է: Եվ եթե անհրաժեշտ է արագ մուտք դեպի պիտակների ատրիբուտներ, ապա մենք կարող ենք դրանք տեղափոխել առանձին ճյուղեր:

Գլոբալները գանձ-սրեր են տվյալների պահպանման համար: Ծառեր. Մաս 2

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

COS-ում սա կհամապատասխանի կոդի.

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

Նշում: XML, JSON, ասոցիատիվ զանգվածների համար կարող եք գլոբալների վրա ցուցադրելու շատ տարբեր եղանակներ գտնել: Այս դեպքում մենք չենք արտացոլել ենթապիտակների հերթականությունը նշումների պիտակում: Գլոբալ առումով ^ xml ենթապիտակները կցուցադրվեն այբբենական կարգով: Պատվերը խստորեն արտացոլելու համար կարող եք օգտագործել, օրինակ, հետևյալ էկրանը.

Գլոբալները գանձ-սրեր են տվյալների պահպանման համար: Ծառեր. Մաս 2
JSON.
3.3.1 բաժնի առաջին նկարը ցույց է տալիս այս JSON փաստաթղթի արտացոլումը.

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

3.3.4 Հիերարխիկ հարաբերություններով կապված նույնական կառույցներ

Օրինակներ՝ վաճառքի գրասենյակների կառուցվածքը, MLM կառուցվածքում մարդկանց գտնվելու վայրը, շախմատի բացվածքների բազան:

Դեբյուտային տվյալների բազա: Դուք կարող եք օգտագործել հարվածի ուժի գնահատումը որպես գլոբալ հանգույցի ինդեքսի արժեք: Հետո ամենաուժեղ քայլը ընտրելու համար բավական կլինի ընտրել ամենամեծ քաշ ունեցող ճյուղը։ Գլոբալում յուրաքանչյուր մակարդակի բոլոր ճյուղերը դասակարգվելու են ըստ շարժման ուժի:

Գլոբալները գանձ-սրեր են տվյալների պահպանման համար: Ծառեր. Մաս 2

Վաճառքի գրասենյակների կառուցվածքը, մարդկանց կառուցվածքը MLM-ում: Հանգույցները կարող են պահել որոշակի քեշավորման արժեքներ, որոնք արտացոլում են ամբողջ ենթածառի բնութագրերը: Օրինակ՝ տվյալ ենթածառի վաճառքի ծավալը։ Ցանկացած պահի մենք կարող ենք ստանալ ցանկացած ճյուղի ձեռքբերումներն արտացոլող գործիչ։

Գլոբալները գանձ-սրեր են տվյալների պահպանման համար: Ծառեր. Մաս 2

4. Ո՞ր դեպքերում է առավել շահավետ օգտագործել գլոբալները:

Առաջին սյունակում ներկայացված են դեպքեր, երբ դուք կստանաք զգալի արագություն՝ օգտագործելով գլոբալները, իսկ երկրորդը, երբ դիզայնը կամ տվյալների մոդելը կպարզեցվեն:

Բարեմաղթել
Տվյալների մշակման/ներկայացման հեշտությունը

  1. Տեղադրում [յուրաքանչյուր մակարդակում ավտոմատ տեսակավորմամբ], [ինդեքսավորում ըստ հիմնական բանալի]
  2. Ենթածառերի հեռացում
  3. Բազմաթիվ բնադրված հատկություններով օբյեկտներ, որոնք պահանջում են անհատական ​​մուտք
  4. Հիերարխիկ կառուցվածք՝ ցանկացած ճյուղից, նույնիսկ գոյություն չունեցող ճյուղերից շրջանցելու ունակությամբ
  5. Ենթածառերի խորքային անցում
  1. Օբյեկտներ/սուբյեկտներ մեծ թվով կամընտիր [և/կամ ներկառուցված] հատկություններով/սուբյեկտներով
  2. Տվյալներ առանց սխեմայի: Երբ նոր հատկությունները հաճախ կարող են հայտնվել, իսկ հները անհետանալ:
  3. Դուք պետք է ստեղծեք անհատական ​​տվյալների բազա:
  4. Ուղու հիմքերը և որոշումների ծառերը: Երբ հարմար է ուղիները ծառի տեսքով ներկայացնել։
  5. Հիերարխիկ կառույցների հեռացում առանց ռեկուրսիայի օգտագործման

Շարունակությունը «Գլոբալները գանձ-սրեր են տվյալների պահպանման համար: Նվազ զանգվածներ. Մաս 3».

Հրաժարում պատասխանատվությունից: Այս հոդվածը և դրա վերաբերյալ իմ մեկնաբանությունները իմ կարծիքն են և որևէ առնչություն չունեն InterSystems Corporation-ի պաշտոնական դիրքորոշման հետ:

Source: www.habr.com

Добавить комментарий