Глобали су ризнице за складиштење података. Дрвеће. Део 1

Глобали су ризнице за складиштење података. Дрвеће. Део 1 Прави мачеви базе података - глобали - одавно су познати, али и даље мало ко зна како да их ефикасно користи или уопште не поседује ово супероружје.

Ако користите глобалне методе у решавању оних проблема у којима су они заиста добри, можете постићи изванредне резултате. Било у продуктивности или у поједностављивању решења проблема (1, 2).

Глобалне вредности су посебан начин чувања и обраде података, потпуно другачији од табела у СКЛ-у. Појавили су се 1966. године на језику М(УМПС) (еволутивни развој - Цацхе ОбјецтСцрипт, у даљем тексту ЦОС) у медицинској бази података и још увек постоји активно користе, а продро је и у неке друге области где се захтевају поузданост и високе перформансе: финансије, трговина итд.

Глобални елементи у модерним ДБМС-овима подржавају трансакције, евидентирање, репликацију и партиционисање. Оне. могу се користити за изградњу модерних, поузданих, дистрибуираних и брзих система.

Глобалне вредности вас не ограничавају на релациони модел. Они вам дају слободу да развијете структуре података које су оптимизоване за специфичне задатке. За многе апликације, паметна употреба глобала заиста може бити тајно оружје, пружајући перформансе о којима програмери релационих апликација могу само да сањају.

Глобалне вредности као начин складиштења података могу се користити у многим модерним програмским језицима, и на високом и на ниском нивоу. Стога ћу се у овом чланку посебно фокусирати на глобале, а не на језик из којег су некада долазили.

2. Како функционишу глобали

Хајде да прво схватимо како функционишу глобали и које су њихове предности. Глобалности се могу посматрати из различитих углова. У овом делу чланка ћемо их посматрати као дрвеће. Или као хијерархијска складишта података.

Једноставно речено, глобал је упоран низ. Низ који се аутоматски чува на диску.
Тешко је замислити нешто једноставније за складиштење података. У коду (на ЦОС/М језицима) разликује се од регуларног асоцијативног низа само по симболу ^ пре имена.

Да бисте сачували податке у глобалу, не морате да научите СКЛ језик упита; команде за рад са њима су веома једноставне. Могу се научити за сат времена.

Почнимо са најједноставнијим примером. Једнослојно дрво са 2 гране. Примери су написани у ЦОС.

Глобали су ризнице за складиштење података. Дрвеће. Део 1

Set ^a("+7926X") = "John Sidorov"
Set ^a("+7916Y") = "Sergey Smith"



Када убаците информације у глобалну (команда Сет), 3 ствари се аутоматски дешавају:

  1. Чување података на диску.
  2. Индексирање. Оно што је у загради је кључ (у енглеској литератури - „субсцрипт“), а десно од једнаких је вредност („вредност чвора“).
  3. Сорт. Подаци су сортирани по кључу. У будућности, приликом преласка низа, први елемент ће бити „Сергеи Смитх“, а други „Јохн Сидоров“. Приликом пријема листе корисника из глобала, база података не губи време на сортирање. Штавише, можете захтевати излаз сортиране листе, почевши од било ког кључа, чак и непостојећег (излаз ће почети од првог правог кључа, који долази после непостојећег).

Све ове операције се дешавају невероватно брзо. На свом кућном рачунару добијао сам вредности до 750 уметања у секунди у једном процесу. На вишејезгарним процесорима вредности могу достићи десетине милиона уметци/сек.

Наравно, сама брзина уметања не говори много. Можете, на пример, веома брзо да упишете информације у текстуалне фајлове – овако гласине Обрада виза ради. Али у случају глобалних јединица, као резултат добијамо структурирано индексирано складиште, са којим се може лако и брзо радити у будућности.

Глобали су ризнице за складиштење података. Дрвеће. Део 1

  • Највећа снага глобала је брзина којом се нови чворови могу убацити.
  • Подаци у глобалу су увек индексирани. Прелазак преко њих, како на једном нивоу тако и дубоко у дрво, увек је брз.

Хајде да глобалном додамо још неколико грана другог и трећег нивоа.

Set ^a("+7926X", "city") = "Moscow"
Set ^a("+7926X", "city", "street") = "Req Square"
Set ^a("+7926X", "age") = 25
Set ^a("+7916Y", "city") = "London"
Set ^a("+7916Y", "city", "street") = "Baker Street"
Set ^a("+7916Y", "age") = 36

Глобали су ризнице за складиштење података. Дрвеће. Део 1

Очигледно је да се стабла на више нивоа могу градити на основу глобала. Штавише, приступ било ком чвору је скоро тренутан због аутоматског индексирања током уметања. И на било ком нивоу стабла, све гране су сортиране по кључу.

Као што видите, информације се могу чувати и у кључу и у вредности. Укупна дужина кључа (збир дужина свих индекса) може да достигне КСНУМКС бите, и вредности КСНУМКС МБ за Цацхе. Број нивоа у стаблу (број димензија) је 31.

Још једна занимљива тачка. Можете направити стабло без навођења вредности чворова горњих нивоа.

Глобали су ризнице за складиштење података. Дрвеће. Део 1

Set ^b("a", "b", "c", "d") = 1
Set ^b("a", "b", "c", "e") = 2
Set ^b("a", "b", "f", "g") = 3

Празни кругови су чворови којима није додељена вредност.

Да бисмо боље разумели глобалне вредности, упоредимо их са другим дрвећем: баштенским дрвећем и дрвећем имена система датотека.

Хајде да упоредимо дрвеће на глобалима са нама најпознатијим хијерархијским структурама: са обичним дрвећем које расте у баштама и пољима, као и са системима датотека.

Глобали су ризнице за складиштење података. Дрвеће. Део 1

Као што видимо на баштенским дрвећем, лишће и плодови се налазе само на крајевима грана.
Системи датотека – информације се чувају само на крајевима грана, који су потпуно квалификована имена датотека.

А ево и глобалне структуре података.

Глобали су ризнице за складиштење података. Дрвеће. Део 1Разлике:

  1. Унутрашњи чворови: информације у глобалу могу бити ускладиштене у сваком чвору, не само на крајевима грана.
  2. Спољни чворови: Глобал мора да има дефинисане вредности на крајевима грана, док ФС и баштенско дрвеће немају.



Што се тиче унутрашњих чворова, можемо рећи да је глобална структура надскуп структуре стабала имена у системима датотека и баштенским дрвећем. Оне. флексибилнији.

Генерално, глобално је уређено стабло са могућношћу складиштења података у сваком чвору.

Да бисте боље разумели рад глобала, замислите шта би се догодило када би креатори система датотека користили приступ сличан глобалима за складиштење информација?

  1. Брисањем једне датотеке у директоријуму би се аутоматски избрисао директоријум, као и сви директоријуми који се налазе изнад који садрже само један директоријум који је управо обрисан.
  2. Не би било потребе за именицима. Једноставно би постојале датотеке са поддатотекама и датотеке без поддатотека. Ако се упореди са обичним дрветом, онда би свака грана постала плод.

    Глобали су ризнице за складиштење података. Дрвеће. Део 1

  3. Ствари попут РЕАДМЕ.ткт датотека можда неће бити потребне. Све што је требало да се каже о садржају директоријума могло би се записати у сам фајл директоријума. У простору путање, име датотеке се не разликује од имена директоријума, тако да је било могуће проћи само са датотекама.
  4. Брзина брисања директоријума са угнежђеним поддиректоријумима и датотекама би се драматично повећала. Много пута на Хабреу је било чланака о томе колико је дуго и тешко избрисати милионе малих датотека (1, 2). Међутим, ако направите систем псеудо-датотека на глобалном нивоу, биће потребно неколико секунди или делића. Када сам тестирао брисање подстабала на кућном рачунару, уклонио је 1-96 милион чворова са двослојног стабла на ХДД-у (не ССД-у) за 341 секунду. Штавише, говоримо о брисању дела стабла, а не само целе датотеке са глобалима.

Глобали су ризнице за складиштење података. Дрвеће. Део 1
Уклањање подстабала је још једна јача страна глобала. За ово вам није потребна рекурзија. Ово се дешава невероватно брзо.

У нашем стаблу то се може урадити помоћу команде убити.

Kill ^a("+7926X")

Глобали су ризнице за складиштење података. Дрвеће. Део 1

Да бисмо боље разумели које су нам акције доступне преко глобала, даћу кратку табелу.

Основне команде и функције за рад са глобалима у ЦОС-у

Сет
Постављање грана на чвор (ако још није дефинисан) и вредности чвора

Стопити
Копирање подстабла

убити
Уклањање подстабла

ЗКилл
Брисање вредности одређеног чвора. Подстабло које излази из чвора се не додирује

$Куери
Потпуни обилазак дрвета, улазак дубоко у дрво

$Ордер
Прелазак грана одређеног чвора

$Дата
Провера да ли је чвор дефинисан

$Инцремент
Атомско повећање вредности чвора. Да бисте избегли читање и писање, за АЦИД. Недавно је препоручено да се промени на $Секуенце

Хвала вам на пажњи, спремни смо да одговоримо на ваша питања.

Одрицање од одговорности: Овај чланак и моји коментари на њега су моје мишљење и немају никакве везе са званичним ставом ИнтерСистемс Цорпоратион.

Продужетак Глобали су ризнице за складиштење података. Дрвеће. Део 2. Научићете који типови података се могу приказати на глобалима и на којим задацима они пружају максималну корист.

Извор: ввв.хабр.цом

Додај коментар