Ғаламшарлар деректерді сақтауға арналған қазына қылыштары болып табылады. Ағаштар. 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 функциясы (Кэште қол жетімді).
    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

Мұны қалай жасау керектігі туралы егжей-тегжейлі мәліметтер M жаһандық кестелер, қайталама индекстердің эмуляциясы.

Жолдарды кірістіру/жаңарту/жою функциялары COS/M тілінде жазылса және құрастырылса, мұндай кестелер дәстүрлі дерекқорлардағыдай жылдам (немесе одан да жылдам) жұмыс істейді.Мен бұл мәлімдемені TSTART және TCOMMIT пәрмендерін (транзакцияларды) пайдалануды қоса алғанда, бір екі бағанды ​​кестеге жаппай INSERT және SELECT сынақтарымен тексердім.

Мен бір мезгілде қол жеткізу және параллель транзакциялары бар күрделі сценарийлерді сынамадым.

Транзакцияларды пайдаланбай, кірістіру жылдамдығы миллион мәнге 778 361 кірістіру/секунды құрады.
300 миллион мәнмен - 422 141 кірістіру/секунд.

Транзакцияларды пайдалану кезінде – 572 млн кірістіру үшін 082 50 кірістіру/секунд. Барлық операциялар құрастырылған М кодынан орындалды.
Қатты дискілер SSD емес, кәдімгі. Қайта жазу мүмкіндігі бар RAID5. Phenom II 1100T процессоры.

SQL дерекқорын ұқсас жолмен тексеру үшін циклде кірістірулерді орындайтын сақталатын процедураны жазу керек. MySQL 5.5 (InnoDB қоймасы) тестілеу кезінде осы әдісті қолдана отырып, мен секундына 11K кірістіруден аспайтын сандарды алдым.
Иә, реляциялық дерекқорларға қарағанда ғаламдық кестелерді іске асыру күрделірек көрінеді. Сондықтан ғаламдық жүйелердегі өнеркәсіптік дерекқорларда кестелік деректермен жұмысты жеңілдету үшін SQL қатынасы бар.

Ғаламшарлар деректерді сақтауға арналған қазына қылыштары болып табылады. Ағаштар. 2-бөлімЖалпы, деректер схемасы жиі өзгермейтін болса, кірістіру жылдамдығы маңызды емес және бүкіл дерекқор қалыпты кестелер түрінде оңай ұсынылуы мүмкін болса, SQL-мен жұмыс істеу оңайырақ, өйткені ол абстракцияның жоғары деңгейін қамтамасыз етеді. .

Ғаламшарлар деректерді сақтауға арналған қазына қылыштары болып табылады. Ағаштар. 2-бөлімБұл жағдайда мен мұны көрсеткім келді globals басқа дерекқорларды жасау үшін конструктор ретінде әрекет ете алады. Басқа тілдерді жазуға болатын ассемблер сияқты. Мұнда ғаламдық желілерде аналогтарды қалай жасауға болатынының мысалдары берілген кілт-мән, тізімдер, жиындар, кестелік, құжатқа бағытталған мәліметтер базасы.

Егер сізге стандартты емес дерекқордың қандай да бір түрін ең аз күшпен жасау қажет болса, онда сіз ғаламдық деректерге жүгінуіңіз керек.

3.3 Ерекше жағдай 3. Екі деңгейлі ағаш, екінші деңгейдің әрбір түйінінде бұтақтардың бекітілген саны бар

Ғаламшарлар деректерді сақтауға арналған қазына қылыштары болып табылады. Ағаштар. 2-бөлімСіз оны болжаған шығарсыз: бұл ғаламдық кестелердің баламалы орындалуы. Бұл іске асыруды алдыңғысымен салыстырайық.

Екі деңгейлі ағаштағы кестелер және бір деңгейлі ағашта.

Минусы
Плюсы

  1. Енгізу баяуырақ, себебі түйіндер санын бағандар санына тең етіп орнату керек.
  2. Дискілік кеңістікті көбірек тұтыну. Өйткені баған атаулары бар жаһандық индекстер (массив индекстері ретінде түсініледі) дискілік кеңістікті алады және әрбір жол үшін қайталанады.

  1. Жеке бағандардың мәндеріне жылдам қол жеткізу, өйткені жолды талдаудың қажеті жоқ. Менің сынақтарыма сәйкес, ол 11,5 бағанда 2% жылдамырақ және бағандардың көп санында одан да көп.
  2. Деректер схемасын өзгерту оңайырақ
  3. Нақтырақ код

Қорытынды: барлығына емес. Жылдамдық ғаламдық жүйенің ең маңызды артықшылықтарының бірі болғандықтан, бұл іске қосуды пайдаланудың қажеті шамалы, өйткені ол реляциялық дерекқорлардағы кестелерден жылдам орындалмауы мүмкін.

3.4 Жалпы жағдай. Ағаштар және реттелген ағаштар

Ағаш ретінде ұсынылуы мүмкін кез келген деректер құрылымы жаһандық өлшемдерге тамаша сәйкес келеді.

3.4.1 Ішкі объектілері бар объектілер

Ғаламшарлар деректерді сақтауға арналған қазына қылыштары болып табылады. Ағаштар. 2-бөлім

Бұл жаһандықтардың дәстүрлі пайдалану аймағы. Медицинада көптеген аурулар, дәрі-дәрмектер, белгілер және емдеу әдістері бар. Әрбір науқас үшін миллион өрісі бар кесте құру қисынсыз. Оның үстіне егіс алқаптарының 99 пайызы бос болады.

Кестелердің SQL деректер базасын елестетіңіз: «пациент» ~ 100 000 өріс, «Медицина» - 100 000 өріс, «Терапия» - 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 МБ ауру картасы МРТ файлдары, рентгендік сканерлеу және басқа зерттеулерді қамтитын науқастарды дереу тоқтатады. Ғаламдық бір тармақта сізде гигабайттар мен терабайттар ақпарат болуы мүмкін. Негізінде, біз бұған нүкте қоя аламыз, бірақ мен жалғастырамын.
  2. Науқас кестесіндегі жаңа қасиеттердің сана/өзгеруі/жою уақыты. Мұндай дерекқор бүкіл картаны жадқа оқуы керек (бұл үлкен сома!), BSON талдауы, жаңа түйінді қосу/өзгерту/жою, индекстерді жаңарту, оны BSON-ға жинақтау және дискіге сақтау. Ғаламдық тек белгілі бір сипатқа қол жеткізіп, оны басқаруы керек.
  3. Жеке қасиеттерге жылдам қол жеткізу. Құжаттағы көптеген сипаттармен және оның көп деңгейлі құрылымымен жеке сипаттарға қол жеткізу жаһандық жолдың әрбір жолы B-ағаш болып табылатындығына байланысты жылдамырақ болады. BSON бағдарламасында қажетті сипатты табу үшін құжатты сызықтық талдау керек.

3.3.2 Ассоциативті массивтер

Ассоциативті массивтер (тіпті кірістірілген массивтермен) жаһандық өлшемдерге тамаша сәйкес келеді. Мысалы, РНР-ден мұндай массив 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 корпорациясының ресми ұстанымына қатысы жоқ.

Ақпарат көзі: www.habr.com

пікір қалдыру