Глобалдар маалыматтарды сактоо үчүн кенч-кылычтар болуп саналат. Дарактар. 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

Аны кантип жасоо керектиги жөнүндө М глобалдык таблицалар, экинчилик көрсөткүчтөрдү эмуляциялоо.

Катарларды киргизүү/жаңыртуу/жок кылуу функциялары COS/Mде жазылып, компиляцияланса, мындай таблицалар салттуу маалымат базаларындагыдай тез (же андан да тезирээк) иштейт.Мен бул билдирүүнү жапырт INSERT жана SELECT тесттери менен бир эки тилкелүү таблицага, анын ичинде TSTART жана TCOMMIT буйруктарын (транзакцияларды) колдонуу менен текшердим.

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

Транзакцияларды колдонбостон, киргизүү курсу миллион мааниге 778 361 кыстарма/секундду түздү.
300 миллион маанилери менен - ​​422 141 кыстарма/сек.

бүтүмдөрдү колдонууда - 572 082 койгучтар / секундасына 50M койгучтар үчүн. Бардык операциялар компиляцияланган М кодунан аткарылган.
Катуу дисктер SSD эмес, кадимки. Артка жазуу менен RAID5. Phenom II 1100T процессору.

Ушундай эле жол менен SQL маалымат базасын сынап көрүү үчүн, циклге киргизүүнү аткарган сакталган процедураны жазышыңыз керек. MySQL 5.5 (InnoDB сактагычы) сынап жатканда, бул ыкманы колдонуп, мен секундасына 11K кыстармадан ашык эмес сандарды алдым.
Ооба, глобалдык таблицаларды ишке ашыруу реляциялык маалымат базаларына караганда татаалыраак көрүнөт. Ошондуктан, глобалдык тармактардагы өнөр жай маалымат базалары таблицадагы маалыматтар менен иштөөнү жөнөкөйлөтүү үчүн SQL мүмкүнчүлүгүнө ээ.

Глобалдар маалыматтарды сактоо үчүн кенч-кылычтар болуп саналат. Дарактар. 2 бөлүкЖалпысынан, маалымат схемасы тез-тез өзгөрбөсө, киргизүү ылдамдыгы маанилүү эмес жана бардык маалымат базасы нормалдаштырылган таблицалар түрүндө оңой көрсөтүлсө, анда SQL менен иштөө оңой, анткени ал абстракциянын жогорку деңгээлин камсыз кылат. .

Глобалдар маалыматтарды сактоо үчүн кенч-кылычтар болуп саналат. Дарактар. 2 бөлүкБул учурда мен муну көрсөткүм келди Globals башка маалымат базаларын түзүү үчүн конструктор катары иштей алат. Башка тилдерде жазыла турган ассемблер сыяктуу. Бул жерде сиз глобалдык аналогдорду кантип түзө аларыңыздын мисалдары келтирилген ачкыч-маани, тизмелер, топтомдор, таблица, документке багытталган маалымат базалары.

Эгер сиз минималдуу күч менен кандайдыр бир стандарттуу эмес маалымат базасын түзүшүңүз керек болсо, анда сиз глобалдык багытты карашыңыз керек.

3.3 Өзгөчө жагдай 3. Эки деңгээлдүү дарак, экинчи деңгээлдеги ар бир түйүн бутактарынын белгиленген санына ээ.

Глобалдар маалыматтарды сактоо үчүн кенч-кылычтар болуп саналат. Дарактар. 2 бөлүкСиз муну болжолдогон чыгарсыз: бул глобалдык таблицалардын альтернативалуу ишке ашырылышы. Бул ишке ашырууну мурунку менен салыштырып көрөлү.

Эки деңгээлдүү дарактын үстүндөгү столдор vs. бир даражалуу дарактын үстүндө.

Минусы
Плюсы

  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 МБ дароо оору картасына 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

Комментарий кошуу