Глобалите са мечове-съкровища за съхранение на данни. дървета. Част 1

Глобалите са мечове-съкровища за съхранение на данни. дървета. Част 1 Истинските мечове за база данни - глобали - отдавна са известни, но все още малцина знаят как да ги използват ефективно или изобщо не притежават това супероръжие.

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

Глобалите са специален начин за съхранение и обработка на данни, напълно различен от таблиците в SQL. Появяват се през 1966 г. в езика M (UMPS) (еволюционно развитие - Кеширайте ObjectScript, по-нататък COS) в медицинската база данни и все още е там използван активно, а също така проникна в някои други области, където се изисква надеждност и висока производителност: финанси, търговия и др.

Глобалите в съвременните СУБД поддържат транзакции, регистриране, репликация и разделяне. Тези. те могат да се използват за изграждане на модерни, надеждни, разпределени и бързи системи.

Глобалите не ви ограничават до релационния модел. Те ви дават свободата да разработвате структури от данни, които са оптимизирани за конкретни задачи. За много приложения интелигентното използване на глобали може наистина да бъде тайно оръжие, осигуряващо производителност, за която разработчиците на релационни приложения могат само да мечтаят.

Глобалите като начин за съхраняване на данни могат да се използват в много съвременни езици за програмиране, както на високо, така и на ниско ниво. Затова в тази статия ще се съсредоточа конкретно върху глобалните, а не върху езика, от който някога са произлезли.

2. Как работят глобалните

Нека първо разберем как работят глобалните и какви са техните силни страни. Глобалите могат да се разглеждат от различни гледни точки. В тази част на статията ще ги разгледаме като дървета. Или като йерархични хранилища за данни.

Казано по-просто, глобалът е постоянен масив. Масив, който автоматично се записва на диск.
Трудно е да си представим нещо по-просто за съхранение на данни. В кода (на езиците COS/M) се различава от обикновения асоциативен масив само по символа ^ преди името.

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

Да започнем с най-простия пример. Дърво на едно ниво с 2 клона. Примерите са написани на COS.

Глобалите са мечове-съкровища за съхранение на данни. дървета. Част 1

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



При вмъкване на информация в глобален (команда Set), автоматично се случват 3 неща:

  1. Запазване на данни на диск.
  2. Индексиране. Това, което е в скобите, е ключът (в англоезичната литература - “subscript”), а вдясно от равни е стойността (“node value”).
  3. Подреждане. Данните са сортирани по ключ. В бъдеще при обхождане на масива първият елемент ще бъде „Сергей Смит“, а вторият „Джон Сидоров“. При получаване на списък с потребители от глобалната база данни не губи време за сортиране. Освен това можете да поискате извеждане на сортиран списък, започвайки от произволен ключ, дори и несъществуващ (извеждането ще започне от първия реален ключ, който идва след несъществуващия).

Всички тези операции се извършват невероятно бързо. На моя домашен компютър получавах стойности до 750 000 вмъквания/сек в един процес. При многоядрени процесори стойностите могат да достигнат десетки милиони вложки/сек.

Разбира се, самата скорост на вмъкване не казва много. Можете например много бързо да записвате информация в текстови файлове - така слухове Обработка на визи работи. Но в случай на глобални, като резултат получаваме структурирано индексирано хранилище, с което може лесно и бързо да се работи в бъдеще.

Глобалите са мечове-съкровища за съхранение на данни. дървета. Част 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

комплект
Задаване на клонове към възел (ако все още не е дефиниран) и стойности на възел

Обединяване
Копиране на поддърво

Убий
Премахване на поддърво

ZKill
Изтриване на стойността на конкретен възел. Поддървото, излизащо от възела, не се докосва

$Query
Пълно обхождане на дървото, навлизане дълбоко в дървото

$Поръчка
Преминаване по клонове на конкретен възел

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

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

Благодарим ви за вниманието, ние сме готови да отговорим на вашите въпроси.

Отказ от отговорност: Тази статия и моите коментари към нея са мое мнение и не представляват официалната позиция на InterSystems Corporation.

Разширение Глобалите са мечове-съкровища за съхранение на данни. дървета. Част 2. Ще научите какви типове данни могат да се показват на глобали и за какви задачи осигуряват максимална полза.

Източник: www.habr.com

Добавяне на нов коментар