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

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

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

Глобалите се посебен начин на складирање и обработка на податоци, сосема различен од табелите во SQL. Тие се појавија во 1966 година на јазикот М(UMPS) (еволутивен развој - Кеш ObjectScript, во понатамошниот текст COS) во медицинската база на податоци и сè уште е таму активно се користи, а исто така навлезе и во некои други области каде што се бара доверливост и високи перформанси: финансии, трговија итн.

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

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

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

2. Како функционираат глобалните

Ајде прво да разбереме како функционираат глобалните и кои се нивните силни страни. Глобалите може да се гледаат од различни гледишта. Во овој дел од статијата ќе ги гледаме како дрвја. Или како хиерархиски складишта на податоци.

Едноставно кажано, глобалната е постојана низа. Низа што автоматски се зачувува на дискот.
Тешко е да се замисли нешто поедноставно за складирање податоци. Во кодот (во јазиците COS/M) се разликува од обична асоцијативна низа само во симболот ^ пред името.

За да зачувате податоци во глобално ниво, не треба да го научите јазикот за пребарување на SQL, наредбите за работа со нив се многу едноставни. Тие можат да се научат за еден час.

Да почнеме со наједноставниот пример. Дрво на едно ниво со 2 гранки. Примерите се напишани во COS.

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

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



Кога вметнувате информации во глобална (команда Set), автоматски се случуваат 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

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

Како што можете да видите, информациите може да се складираат и во клуч и во вредност. Вкупната должина на клучот (збирот на должините на сите индекси) може да достигне 511 бајти, и вредностите 3.6 MB за Кеш. Бројот на нивоа во дрвото (број на димензии) е 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. Надворешни јазли: Глобалниот мора да има дефинирани вредности на краевите на гранките, додека FS и градинарски дрвја немаат.



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

Во принцип, глобалната е нарачано дрво со можност за складирање податоци во секој јазол.

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

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

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

  3. Работи како датотеките README.txt можеби нема да бидат потребни. Сè што требаше да се каже за содржината на директориумот може да се запише во самата датотека на директориумот. Во просторот на патеката, името на датотеката не се разликува од името на директориумот, така што беше можно да се помине само со датотеки.
  4. Брзината на бришење директориуми со вгнездени поддиректориуми и датотеки драстично ќе се зголеми. Многупати на Habré имало написи за тоа колку долго и тешко е да се избришат милиони мали датотеки (1, 2). Меѓутоа, ако направите псевдо-датотечен систем на глобално ниво, ќе бидат потребни секунди или делови од него. Кога тестирав бришење поддрва на домашен компјутер, отстрани 1-96 милиони јазли од двостепено дрво на HDD (не SSD) за 341 секунда. Згора на тоа, зборуваме за бришење на дел од дрвото, а не само на целата датотека со глобалните.

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

Во нашето дрво ова може да се направи со командата Убие.

Kill ^a("+7926X")

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

За подобро разбирање за тоа какви активности ни се достапни во однос на глобалните земји, ќе дадам кратка табела.

Основни команди и функции за работа со глобални во COS

Намести
Поставување гранки на јазол (ако сè уште не е дефинирано) и вредности на јазол

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

Убие
Отстранување на поддрво

ЗКил
Бришење на вредноста на одреден јазол. Поддрвото што излегува од јазолот не е допрено

$Query
Целосно преминување на дрвото, одење длабоко во дрвото

$Order
Преминување гранки на одреден јазол

$Data
Проверка дали е дефиниран јазол

$ Прираст
Атомски зголемување на вредноста на јазолот. За да избегнете читање и пишување, за ACID. Неодамна се препорачува да се промени во $Секвенца

Ви благодариме за вниманието, подготвени сме да одговориме на вашите прашања.

Општи услови: Оваа статија и моите коментари за неа се мое мислење и немаат врска со официјалниот став на InterSystems Corporation.

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

Извор: www.habr.com

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