Qloballar məlumatların saxlanması üçün xəzinə qılınclarıdır. Ağaclar. 2-ci hissə

Qloballar məlumatların saxlanması üçün xəzinə qılınclarıdır. Ağaclar. 2-ci hissəBaşlayın - 1-ci hissəyə baxın.

3. Qloballardan istifadə edərkən strukturların variantları

Sifarişli ağac kimi bir quruluşun müxtəlif xüsusi halları var. Qloballarla işləyərkən praktiki dəyəri olanları nəzərdən keçirək.

3.1 Xüsusi hal 1. Budaqları olmayan bir qovşaq


Qloballar məlumatların saxlanması üçün xəzinə qılınclarıdır. Ağaclar. 2-ci hissəQloballar yalnız massiv kimi deyil, həm də müntəzəm dəyişənlər kimi istifadə edilə bilər. Məsələn, sayğac kimi:

Set ^counter = 0  ; установка счётчика
Set id=$Increment(^counter) ;  атомарное инкрементирование

Bu halda qlobal, mənası ilə yanaşı, qolları da ola bilər. Biri digərini istisna etmir.

3.2 Xüsusi hal 2. Bir təpə və çoxlu budaqlar

Ümumiyyətlə, bu klassik açar-dəyər bazasıdır. Bir dəyər dəstini dəyər kimi saxlasaq, əsas açarı olan çox adi bir cədvəl alacağıq.

Qloballar məlumatların saxlanması üçün xəzinə qılınclarıdır. Ağaclar. 2-ci hissə

Qloballar üzrə cədvəl tətbiq etmək üçün sütun dəyərlərindən özümüz sətirlər yaratmalı və sonra onları əsas açardan istifadə edərək qlobal olaraq saxlamalıyıq. Oxuyarkən sətri yenidən sütunlara bölməyi mümkün etmək üçün aşağıdakılardan istifadə edə bilərsiniz:

  1. ayırıcı simvollar.
    Set ^t(id1) = "col11/col21/col31"
    Set ^t(id2) = "col12/col22/col32"
  2. hər bir sahənin əvvəlcədən müəyyən edilmiş sayda bayt tutduğu sərt sxem. Relational verilənlər bazalarında olduğu kimi.
  3. qiymətlər silsiləsi yaradan xüsusi funksiya $LB (Keşdə mövcuddur).
    Set ^t(id1) = $LB("col11", "col21", "col31")
    Set ^t(id2) = $LB("col12", "col22", "col32")

Maraqlıdır ki, əlaqəli verilənlər bazalarında ikinci dərəcəli indekslərə bənzər bir şey etmək üçün qloballardan istifadə etmək çətin deyil. Belə strukturları qlobal indeks adlandıraq. Qlobal indeks əsas qlobal əsas açarın bir hissəsi olmayan sahələrin tez axtarışı üçün köməkçi ağacdır. Onu doldurmaq və istifadə etmək üçün əlavə kod yazmalısınız.

Birinci sütunda qlobal indeks yaradaq.

Set ^i("col11", id1) = 1
Set ^i("col12", id2) = 1

İndi birinci sütunda məlumatı tez axtarmaq üçün biz qlobala baxmalıyıq ^i və birinci sütunun istədiyiniz dəyərinə uyğun olan əsas açarları (id) tapın.

Dəyər daxil edərkən biz dərhal tələb olunan sahələr üçün həm dəyər, həm də indeks qloballarını yarada bilərik. Etibarlılıq üçün gəlin hamısını bir əməliyyata bağlayaq.

TSTART
Set ^t(id1) = $LB("col11", "col21", "col31")
Set ^i("col11", id1) = 1
TCOMMIT

Bunu necə etmək barədə təfərrüatlar M qlobal cədvəllər, ikinci dərəcəli indekslərin emulyasiyası.

Sətirlərin daxil edilməsi/yenilənməsi/silinməsi funksiyaları COS/M-də yazılsa və tərtib olunarsa, belə cədvəllər ənənəvi verilənlər bazalarında olduğu kimi tez (və ya daha sürətli) işləyəcək.Mən bu ifadəni TSTART və TCOMMIT əmrlərindən (əməliyyatlar) istifadə etməklə, iki sütunlu bir cədvələ toplu INSERT və SELECT testləri ilə yoxladım.

Paralel giriş və paralel əməliyyatlarla daha mürəkkəb ssenariləri sınaqdan keçirməmişəm.

Tranzaksiyalardan istifadə etmədən daxiletmə dərəcəsi milyon dəyərə 778 əlavə/saniyəyə bərabər idi.
300 milyon dəyərlə - 422 əlavə/saniyə.

Tranzaksiyalardan istifadə edərkən - 572 milyon əlavə üçün 082 50 insert/saniyədə. Bütün əməliyyatlar tərtib edilmiş M kodundan həyata keçirilirdi.
Sərt disklər SSD deyil, müntəzəmdir. Geri yazma ilə RAID5. Phenom II 1100T prosessoru.

SQL verilənlər bazasını oxşar şəkildə sınaqdan keçirmək üçün siz dövrəyə daxiletmələri yerinə yetirəcək saxlanılan prosedur yazmalısınız. MySQL 5.5 (InnoDB yaddaşı) sınaqdan keçirərkən, bu metoddan istifadə edərək saniyədə 11K əlavədən çox olmayan nömrələr aldım.
Bəli, qloballar üzrə cədvəllərin tətbiqi əlaqəli verilənlər bazalarından daha mürəkkəb görünür. Buna görə də, qlobal miqyasda olan sənaye verilənlər bazaları cədvəl məlumatları ilə işi asanlaşdırmaq üçün SQL-ə giriş imkanına malikdir.

Qloballar məlumatların saxlanması üçün xəzinə qılınclarıdır. Ağaclar. 2-ci hissəÜmumiyyətlə, məlumat sxemi tez-tez dəyişməyəcəksə, daxiletmə sürəti kritik deyilsə və bütün verilənlər bazası normallaşdırılmış cədvəllər şəklində asanlıqla təmsil oluna bilərsə, SQL ilə işləmək daha asandır, çünki daha yüksək səviyyəli abstraksiya təmin edir. .

Qloballar məlumatların saxlanması üçün xəzinə qılınclarıdır. Ağaclar. 2-ci hissəBu konkret halda mən bunu göstərmək istədim qloballar digər verilənlər bazalarını yaratmaq üçün konstruktor kimi çıxış edə bilər. Başqa dillərin yazıla biləcəyi assembler kimi. Qloballarda analoqları necə yarada biləcəyinizlə bağlı nümunələr açar-dəyər, siyahılar, dəstlər, cədvəl, sənəd yönümlü verilənlər bazaları.

Əgər minimum səylə bir növ qeyri-standart verilənlər bazası yaratmalısınızsa, o zaman qloballara baxmalısınız.

3.3 Xüsusi hal 3. İki səviyyəli ağac, ikinci səviyyənin hər qovşağında sabit sayda budaq var

Qloballar məlumatların saxlanması üçün xəzinə qılınclarıdır. Ağaclar. 2-ci hissəYəqin ki, bunu təxmin etdiniz: bu qlobal cədvəllərin alternativ tətbiqidir. Bu tətbiqi əvvəlki ilə müqayisə edək.

İki səviyyəli ağacdakı masalar vs. bir səviyyəli ağacda.

Eksiler
Pros

  1. Daxil etmək daha yavaşdır, çünki qovşaqların sayını sütunların sayına bərabər təyin etməlisiniz.
  2. Daha çox disk sahəsi istehlakı. Çünki sütun adları olan qlobal indekslər (massiv indeksləri kimi başa düşülür) diskdə yer tutur və hər sətir üçün təkrarlanır.

  1. Fərdi sütunların dəyərlərinə daha sürətli giriş, çünki sətri təhlil etməyə ehtiyac yoxdur. Testlərimə görə, 11,5 sütunda 2% və daha çox sütunda daha sürətlidir.
  2. Məlumat sxemini dəyişdirmək daha asandır
  3. Daha aydın kod

Nəticə: hamı üçün deyil. Sürət qlobalların ən əsas üstünlüklərindən biri olduğundan, bu tətbiqdən istifadə etməyin mənası yoxdur, çünki o, çox güman ki, əlaqəli verilənlər bazalarındakı cədvəllərdən daha sürətli işləməyəcək.

3.4 Ümumi hal. Ağaclar və sifarişli ağaclar

Ağac kimi təqdim edilə bilən hər hansı bir məlumat strukturu qloballarla mükəmməl uyğunlaşır.

3.4.1 Alt obyektləri olan obyektlər

Qloballar məlumatların saxlanması üçün xəzinə qılınclarıdır. Ağaclar. 2-ci hissə

Bu, qlobalların ənənəvi istifadə sahəsidir. Tibb sahəsində çoxlu sayda xəstəliklər, dərmanlar, simptomlar və müalicə üsulları var. Hər bir xəstə üçün bir milyon sahə ilə cədvəl yaratmaq məntiqsizdir. Üstəlik, əkin sahələrinin 99 faizi boş qalacaq.

Cədvəllərdən ibarət SQL verilənlər bazasını təsəvvür edin: “xəstə” ~ 100 sahə, “Tibb” - 000 sahə, “Terapiya” - 100 sahə, “Fərdlər” - 000 sahə və s. və s. Yaxud siz hər biri müəyyən bir xəstə növü üçün (və onlar üst-üstə düşə bilər!), müalicələr, dərmanlar və bu cədvəllər arasında əlaqə üçün minlərlə cədvəldən ibarət verilənlər bazası yarada bilərsiniz.

Qloballar tibb üçün idealdır, çünki onlar hər bir xəstə üçün onun xəstəlik tarixinin, müxtəlif müalicə üsullarının və dərmanların hərəkətlərinin dəqiq təsvirini ağac şəklində, boş sütunlara əlavə disk sahəsi sərf etmədən yaratmağa imkan verir. əlaqəli bir halda vəziyyət olsun.

Qloballar məlumatların saxlanması üçün xəzinə qılınclarıdır. Ağaclar. 2-ci hissəQloballardan istifadə etməklə insanlar haqqında məlumat bazası yaratmaq rahatdır, müştəri haqqında maksimum müxtəlif məlumatların toplanması və sistemləşdirilməsi vacib olduqda. Buna tibb, bankçılıq, marketinq, arxivçilik və digər sahələrdə tələbat var

.
Əlbəttə ki, SQL-də bir neçə cədvəllə ağacı təqlid edə bilərsiniz (EAV, 1,2,3,4,5,6,7,8,9,10), lakin bu, əhəmiyyətli dərəcədə daha mürəkkəbdir və daha yavaş olacaq. Əslində, siz cədvəllər üzərində işləyən qlobal yazmalı və cədvəllərlə bütün işləri abstraksiya təbəqəsi altında gizlətməli olacaqsınız. Daha yüksək səviyyəli texnologiyadan (SQL) istifadə edərək aşağı səviyyəli texnologiyanı (qlobalları) təqlid etmək yanlışdır. Uyğunsuz.

Heç kimə sirr deyil ki, nəhəng cədvəllərdə məlumat sxeminin dəyişdirilməsi (ALTER TABLE) kifayət qədər vaxt apara bilər. MySQL, məsələn, köhnə cədvəldən məlumatları tamamilə yeni cədvələ kopyalayaraq ALTER TABLE ADD|DROP COLUMN edir (sınaq MyISAM, InnoDB mühərrikləri). Bu, milyardlarla qeydləri olan işləyən verilənlər bazasını həftələr olmasa da, günlərlə dayandıra bilər.

Qloballar məlumatların saxlanması üçün xəzinə qılınclarıdır. Ağaclar. 2-ci hissəQloballardan istifadə etsək, məlumat strukturunun dəyişdirilməsi bizə heç bir xərc çəkmir. İstənilən vaxt iyerarxiyanın istənilən səviyyəsində istənilən obyektə lazım olan hər hansı yeni xassələri əlavə edə bilərik. Filialların adının dəyişdirilməsi ilə bağlı dəyişikliklər işləyən verilənlər bazasında arxa planda işlədilə bilər.


Buna görə də, çoxlu sayda isteğe bağlı xüsusiyyətlərə malik obyektlərin saxlanmasına gəldikdə, qloballar əla seçimdir.

Üstəlik, xatırlatmaq istərdim ki, hər hansı bir xüsusiyyətə giriş ani olur, çünki qlobal miqyasda bütün yollar B-ağaclarıdır.

Qlobal verilənlər bazaları, ümumiyyətlə, iyerarxik məlumatları saxlamaq imkanı olan sənəd yönümlü verilənlər bazası növüdür. Buna görə də, sənəd yönümlü məlumat bazaları tibbi qeydlərin saxlanması sahəsində qloballarla rəqabət apara bilər. Amma yenə də tam eyni deyilMüqayisə üçün MongoDB-ni götürək. Bu domendə aşağıdakı səbəblərə görə qloballara uduzur:

  1. Sənəd ölçüsü. Yaddaş vahidi maksimum həcmi təxminən 16 MB olan JSON formatında (daha doğrusu BSON) mətndir. Məhdudiyyət xüsusi olaraq ona görə edilmişdir ki, JSON verilənlər bazası təhlil zamanı nəhəng JSON sənədi saxlanılırsa və sonra sahələr vasitəsilə əldə edilirsə, yavaşlamasın. Bu sənəddə xəstə haqqında bütün məlumatlar olmalıdır. Xəstə qeydlərinin nə qədər qalın ola biləcəyini hamımız bilirik. Maksimum kart ölçüsü 16 MB, xəstəlik kartında MRT faylları, rentgen skanları və digər tədqiqatlar olan xəstələrə dərhal son qoyur. Qlobal bir sahədə gigabayt və terabayt məlumatınız ola bilər. Prinsipcə, buna son qoya bilərik, amma davam edəcəm.
  2. Xəstənin cədvəlində yeni xassələrin şüur/dəyişiklik/silmə vaxtı. Belə verilənlər bazası bütün xəritəni yaddaşda oxumalı (bu, böyük məbləğdir!), BSON-u təhlil etməli, yeni node əlavə etməli/dəyişdirməli/silməli, indeksləri yeniləməli, onu BSON-da paketləməli və diskdə saxlamalıdır. Qlobal yalnız müəyyən bir xüsusiyyətə daxil olmaq və onu manipulyasiya etmək lazımdır.
  3. Fərdi mülklərə sürətli giriş. Sənəddə çoxlu xüsusiyyətlər və onun çoxsəviyyəli strukturu ilə qlobal miqyasda hər bir yolun B-ağacı olması səbəbindən fərdi xüsusiyyətlərə çıxış daha sürətli olacaq. BSON-da istədiyiniz xüsusiyyəti tapmaq üçün sənədi xətti olaraq təhlil etməlisiniz.

3.3.2 Assosiativ massivlər

Assosiativ massivlər (hətta iç-içə massivlərlə) qloballara mükəmməl uyğun gəlir. Məsələn, PHP-dən belə bir massiv birinci şəkil 3.3.1-də göstəriləcək.

$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 İerarxik sənədlər: XML, JSON

Qloballarda da asanlıqla saxlanılır. Saxlama üçün müxtəlif yollarla yerləşdirilə bilər.

XML
XML-i qloballara ayırmağın ən asan yolu etiket atributlarını qovşaqlarda saxlamaqdır. Və etiket atributlarına sürətli giriş lazımdırsa, biz onları ayrı-ayrı filiallara köçürə bilərik.

Qloballar məlumatların saxlanması üçün xəzinə qılınclarıdır. Ağaclar. 2-ci hissə

<note id=5>
<to>Вася</to>
<from>Света</from>
<heading>Напоминание</heading>
<body>Позвони мне завтра!</body>
</note>

COS-da bu koda uyğun gəlir:

Set ^xml("note")="id=5"
Set ^xml("note","to")="Саша"
Set ^xml("note","from")="Света"
Set ^xml("note","heading")="Напоминание"
Set ^xml("note","body")="Позвони мне завтра!"

Şərh: XML, JSON, assosiativ massivlər üçün siz qloballarda göstərməyin bir çox müxtəlif yollarını tapa bilərsiniz. Bu halda qeyd teqində alt teqlərin sırasını əks etdirməmişik. Qlobal olaraq ^xml alt etiketlər əlifba sırası ilə göstəriləcək. Sifarişi ciddi şəkildə əks etdirmək üçün, məsələn, aşağıdakı ekrandan istifadə edə bilərsiniz:

Qloballar məlumatların saxlanması üçün xəzinə qılınclarıdır. Ağaclar. 2-ci hissə
JSON.
3.3.1 bölməsindəki ilk şəkil bu JSON sənədinin əksini göstərir:

var document = {
  "name": "Vince Medvedev",
  "city": "Moscow",
  "threatments": {
    "surgeries": ["apedicectomy", "biopsy"],
    "radiation": ["gamma", "x-rays"],
    "physiotherapy": ["knee", "shoulder"]
  },
};

3.3.4 İerarxik əlaqələrlə əlaqəli eyni strukturlar

Nümunələr: satış ofislərinin strukturu, MLM strukturunda insanların yerləşməsi, şahmatda açılışların verilənlər bazası.

Debüt verilənlər bazası. Qlobal qovşağın indeks dəyəri kimi vuruş gücünün təxminindən istifadə edə bilərsiniz. Daha sonra, ən güclü hərəkəti seçmək üçün ən böyük çəkisi olan filialı seçmək kifayət edəcəkdir. Qlobal olaraq, hər səviyyədəki bütün filiallar hərəkət gücünə görə sıralanacaq.

Qloballar məlumatların saxlanması üçün xəzinə qılınclarıdır. Ağaclar. 2-ci hissə

Satış ofislərinin strukturu, MLM-də insanların strukturu. Düyünlər bütün alt ağacın xüsusiyyətlərini əks etdirən müəyyən keşləmə dəyərlərini saxlaya bilər. Məsələn, müəyyən bir alt ağacın satış həcmi. İstənilən vaxt istənilən filialın nailiyyətlərini əks etdirən rəqəm əldə edə bilərik.

Qloballar məlumatların saxlanması üçün xəzinə qılınclarıdır. Ağaclar. 2-ci hissə

4. Hansı hallarda qloballardan istifadə etmək daha sərfəlidir?

Birinci sütun qloballardan istifadə etməklə əhəmiyyətli sürət qazanacağınız halları, ikincisi isə dizayn və ya məlumat modelinin sadələşdiriləcəyi halları təqdim edir.

Sürət
Məlumatların işlənməsi/təqdimatının asanlığı

  1. Daxiletmə [hər səviyyədə avtomatik çeşidləmə ilə], [master açarla indeksləşdirmə]
  2. Alt ağacların çıxarılması
  3. Fərdi giriş tələb edən çoxlu daxili xüsusiyyətlərə malik obyektlər
  4. İstənilən budaqdan, hətta mövcud olmayanlardan da uşaq budaqlarını keçmək imkanı ilə iyerarxik quruluş
  5. Dərinlik-alt ağacların birinci keçidi
  1. Çoxlu sayda isteğe bağlı [və/yaxud iç-içə] xassələri/obyektləri olan obyektlər/obyektlər
  2. Sxemsiz məlumat. Yeni xüsusiyyətlər tez-tez görünə bilən və köhnələr yox olduqda.
  3. Fərdi verilənlər bazası yaratmalısınız.
  4. Yol əsasları və qərar ağacları. Yolları bir ağac kimi təmsil etmək əlverişli olduqda.
  5. Rekursiyadan istifadə etmədən iyerarxik strukturların çıxarılması

Artırma “Qloballar məlumatların saxlanması üçün xəzinə qılıncıdır. Seyrək massivlər. 3-cü hissə".

Məsuliyyətdən imtina: Bu məqalə və mənim şərhlərim mənim fikrimdir və InterSystems Corporation-ın rəsmi mövqeyini təmsil etmir.

Mənbə: www.habr.com

Добавить комментарий