Globallar ma'lumotlarni saqlash uchun xazina qilichlaridir. Daraxtlar. 1-qism

Globallar ma'lumotlarni saqlash uchun xazina qilichlaridir. Daraxtlar. 1-qism Haqiqiy ma'lumotlar bazasi qilichlari - globallar - uzoq vaqtdan beri ma'lum, ammo ulardan qanday samarali foydalanishni hali ham ozchilik biladi yoki bu super qurolga umuman egalik qilmaydi.

Agar siz global miqyosda ular haqiqatan ham yaxshi bo'lgan muammolarni hal qilishda foydalansangiz, ajoyib natijalarga erishishingiz mumkin. Yo mahsuldorlikda yoki muammoni hal qilishni soddalashtirishda (1, 2).

Global ma'lumotlarni saqlash va qayta ishlashning maxsus usuli bo'lib, SQL jadvallaridan butunlay farq qiladi. Ular 1966 yilda tilda paydo bo'lgan M(UMPS) (evolyutsion rivojlanish - ObjectScript-ni keshlash, bundan keyin COS) tibbiy ma'lumotlar bazasida va hali ham mavjud faol foydalaniladi, shuningdek, ishonchlilik va yuqori samaradorlik talab qilinadigan boshqa sohalarga ham kirib bordi: moliya, savdo va boshqalar.

Zamonaviy ma'lumotlar bazasida globallar tranzaktsiyalar, jurnallar, replikatsiyalar va bo'linishlarni qo'llab-quvvatlaydi. Bular. ular zamonaviy, ishonchli, taqsimlangan va tezkor tizimlarni yaratish uchun ishlatilishi mumkin.

Globallar sizni munosabatlar modeli bilan cheklamaydi. Ular sizga muayyan vazifalar uchun optimallashtirilgan ma'lumotlar tuzilmalarini ishlab chiqish erkinligini beradi. Ko'pgina ilovalar uchun global dasturlardan oqilona foydalanish haqiqatan ham maxfiy qurol bo'lib, aloqador ilovalarni ishlab chiquvchilar faqat orzu qila oladigan samaradorlikni ta'minlaydi.

Globallar ma'lumotlarni saqlash usuli sifatida ko'plab zamonaviy dasturlash tillarida, ham yuqori, ham past darajadagi foydalanish mumkin. Shuning uchun, ushbu maqolada men ular ilgari kelgan tilga emas, balki globallarga alohida e'tibor qarataman.

2. Globallar qanday ishlaydi

Keling, avval globallar qanday ishlashini va ularning kuchli tomonlarini tushunib olaylik. Globallarga turli nuqtai nazardan qarash mumkin. Maqolaning ushbu qismida biz ularni daraxtlar sifatida ko'rib chiqamiz. Yoki ierarxik ma'lumotlar omborlari kabi.

Oddiy qilib aytganda, global bu doimiy massivdir. Diskda avtomatik ravishda saqlanadigan massiv.
Ma'lumotlarni saqlash uchun oddiyroq narsani tasavvur qilish qiyin. Kodda (COS/M tillarida) u oddiy assotsiativ massivdan faqat belgi bilan farq qiladi. ^ nomidan oldin.

Global miqyosda ma'lumotlarni saqlash uchun SQL so'rovlar tilini o'rganish shart emas, ular bilan ishlash buyruqlari juda oddiy. Ularni bir soat ichida o'rganish mumkin.

Eng oddiy misoldan boshlaylik. 2 ta shoxli bir darajali daraxt. Misollar COS da yozilgan.

Globallar ma'lumotlarni saqlash uchun xazina qilichlaridir. Daraxtlar. 1-qism

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



Global (Set buyrug'i) ga ma'lumot kiritishda avtomatik ravishda 3 narsa sodir bo'ladi:

  1. Ma'lumotlarni diskka saqlash.
  2. Indekslash. Qavslar ichida kalit (ingliz adabiyotida - "pastki yozuv") va tenglarning o'ng tomonida qiymat ("tugun qiymati") ko'rsatilgan.
  3. Tartiblash. Ma'lumotlar kalit bo'yicha tartiblangan. Kelajakda massivni kesib o'tishda birinchi element "Sergey Smit", ikkinchisi esa "Jon Sidorov" bo'ladi. Global foydalanuvchilar ro'yxatini olishda ma'lumotlar bazasi saralashga vaqt sarflamaydi. Bundan tashqari, siz har qanday kalitdan, hatto mavjud bo'lmagan kalitdan boshlab tartiblangan ro'yxatning chiqishini so'rashingiz mumkin (chiqish mavjud bo'lmagan kalitdan keyin keladigan birinchi haqiqiy kalitdan boshlanadi).

Bu operatsiyalarning barchasi juda tez sodir bo'ladi. Uy kompyuterimda men bir jarayonda sekundiga 750 000 qo'shimcha qiymatlarni oldim. Ko'p yadroli protsessorlarda qiymatlarga erishish mumkin o'n millionlab qo'shimchalar/sek.

Albatta, kiritish tezligining o'zi ko'p narsani aytmaydi. Siz, masalan, matnli fayllarga juda tez ma'lumot yozishingiz mumkin - shunga o'xshash mish-mishlarga ko'ra Vizalarni qayta ishlash ishlari. Ammo global miqyosda biz natijada kelajakda oson va tez ishlashi mumkin bo'lgan tuzilgan indekslangan xotiraga ega bo'lamiz.

Globallar ma'lumotlarni saqlash uchun xazina qilichlaridir. Daraxtlar. 1-qism

  • Globallarning eng katta kuchi - bu yangi tugunlarni kiritish tezligi.
  • Global ma'lumotlar har doim indekslanadi. Ularni ham bir darajada, ham daraxtga chuqur kirib borish har doim tezdir.

Keling, global darajaga ikkinchi va uchinchi darajalarning yana bir nechta filiallarini qo'shamiz.

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

Globallar ma'lumotlarni saqlash uchun xazina qilichlaridir. Daraxtlar. 1-qism

Ko'rinib turibdiki, ko'p darajali daraxtlar globallarga asoslangan holda qurilishi mumkin. Bundan tashqari, kiritish paytida avtomatik indeksatsiya tufayli har qanday tugunga kirish deyarli bir zumda bo'ladi. Va daraxtning har qanday darajasida barcha novdalar kalit bo'yicha tartiblanadi.

Ko'rib turganingizdek, ma'lumot kalitda ham, qiymatda ham saqlanishi mumkin. Umumiy kalit uzunligi (barcha indekslar uzunligi yig'indisi) erishish mumkin 511 bayt, va qadriyatlar 3.6 MB kesh uchun. Daraxtdagi darajalar soni (o'lchamlar soni) 31 ta.

Yana bir qiziq nuqta. Yuqori darajadagi tugunlarning qiymatlarini ko'rsatmasdan daraxt qurishingiz mumkin.

Globallar ma'lumotlarni saqlash uchun xazina qilichlaridir. Daraxtlar. 1-qism

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

Bo'sh doiralar hech qanday qiymatga ega bo'lmagan tugunlardir.

Globallarni yaxshiroq tushunish uchun ularni boshqa daraxtlar bilan taqqoslaylik: bog 'daraxtlari va fayl tizimi nomlari daraxtlari.

Keling, global miqyosdagi daraxtlarni bizga eng tanish ierarxik tuzilmalar bilan taqqoslaylik: bog'lar va dalalarda o'sadigan oddiy daraxtlar, shuningdek fayl tizimlari bilan.

Globallar ma'lumotlarni saqlash uchun xazina qilichlaridir. Daraxtlar. 1-qism

Bog 'daraxtlarida ko'rib turganimizdek, barglar va mevalar faqat shoxlarning uchida joylashgan.
Fayl tizimlari - ma'lumotlar faqat to'liq malakali fayl nomlari bo'lgan filiallarning uchlarida saqlanadi.

Va bu erda global ma'lumotlar tuzilishi.

Globallar ma'lumotlarni saqlash uchun xazina qilichlaridir. Daraxtlar. 1-qismFarqi:

  1. Ichki tugunlar: global miqyosdagi ma'lumotlar faqat filiallarning uchlarida emas, balki har bir tugunda saqlanishi mumkin.
  2. Tashqi tugunlar: Global novdalarning uchlarida belgilangan qiymatlarga ega bo'lishi kerak, FS va bog 'daraxtlarida esa yo'q.



Ichki tugunlar nuqtai nazaridan aytishimiz mumkinki, global tuzilma fayl tizimlari va bog 'daraxtlaridagi nom daraxtlari tuzilishining yuqori to'plamidir. Bular. yanada moslashuvchan.

Umuman olganda, global har bir tugunda ma'lumotlarni saqlash qobiliyatiga ega buyurtma qilingan daraxt.

Globallarning ishini yaxshiroq tushunish uchun, agar fayl tizimlarini yaratuvchilar ma'lumotlarni saqlash uchun global tizimlarga o'xshash yondashuvdan foydalansalar nima bo'lishini tasavvur qiling?

  1. Katalogdagi bitta faylni o'chirish katalogni, shuningdek, faqat o'chirilgan bitta katalogni o'z ichiga olgan barcha kataloglarni avtomatik ravishda o'chiradi.
  2. Kataloglarga ehtiyoj qolmaydi. Shunchaki pastki faylli fayllar va pastki fayllarsiz fayllar bo'ladi. Agar oddiy daraxt bilan solishtirilsa, har bir shox mevaga aylanadi.

    Globallar ma'lumotlarni saqlash uchun xazina qilichlaridir. Daraxtlar. 1-qism

  3. README.txt fayllari kabi narsalar kerak bo'lmasligi mumkin. Katalogning mazmuni haqida aytilishi kerak bo'lgan hamma narsani katalog faylining o'ziga yozish mumkin edi. Yo'l maydonida fayl nomini katalog nomidan ajratib bo'lmaydi, shuning uchun faqat fayllar bilan ishlash mumkin edi.
  4. Ichki ichki kataloglar va fayllar bilan kataloglarni o'chirish tezligi keskin oshadi. Habré-da millionlab kichik fayllarni o'chirish qanchalik uzoq va qiyinligi haqida ko'p marta maqolalar bo'lgan (1, 2). Biroq, agar siz global miqyosda psevdo-fayl tizimini yaratsangiz, bu bir necha soniya yoki uning qismlarini oladi. Men uy kompyuterida pastki daraxtlarni o'chirishni sinab ko'rganimda, u 1 soniyada HDD (SSD emas) dagi ikki darajali daraxtdan 96-341 million tugunni olib tashladi. Bundan tashqari, biz global fayllar bilan butun faylni emas, balki daraxtning bir qismini o'chirish haqida gapiramiz.

Globallar ma'lumotlarni saqlash uchun xazina qilichlaridir. Daraxtlar. 1-qism
Pastki daraxtlarni olib tashlash globallarning yana bir kuchli nuqtasidir. Buning uchun rekursiya kerak emas. Bu nihoyatda tez sodir bo'ladi.

Bizning daraxtimizda bu buyruq bilan amalga oshirilishi mumkin o'ldirish.

Kill ^a("+7926X")

Globallar ma'lumotlarni saqlash uchun xazina qilichlaridir. Daraxtlar. 1-qism

Global miqyosda biz uchun qanday harakatlar mavjudligini yaxshiroq tushunish uchun men qisqacha jadvalni taqdim etaman.

COS da globallar bilan ishlash uchun asosiy buyruqlar va funksiyalar

o'rnating
Filiallarni tugunga o'rnatish (agar hali aniqlanmagan bo'lsa) va tugun qiymatlari

borib
Pastki daraxtdan nusxa olish

o'ldirish
Pastki daraxtni olib tashlash

ZKill
Muayyan tugunning qiymatini o'chirish. Tugundan chiqadigan pastki daraxtga tegilmaydi

$Query
Daraxtning to'liq o'tishi, daraxtga chuqur kirib borish

$Buyurtma
Muayyan tugunning shoxlarini kesib o'tish

$Data
Tugun aniqlanganligini tekshirish

$O'sish
Tugun qiymatini atomik ravishda oshirish. O'qish va yozishni oldini olish uchun, ACID uchun. Yaqinda uni o'zgartirish tavsiya qilindi $Sequence

E'tiboringiz uchun rahmat, savollaringizga javob berishga tayyormiz.

Masʼuliyatdan voz kechish: Ushbu maqola va mening sharhlarim mening fikrim va InterSystems korporatsiyasining rasmiy pozitsiyasiga aloqasi yo'q.

kengaytmasi Globallar ma'lumotlarni saqlash uchun xazina qilichlaridir. Daraxtlar. 2-qism. Globallarda qanday turdagi ma'lumotlar ko'rsatilishi mumkinligini va ular qanday vazifalarda maksimal foyda keltirishini bilib olasiz.

Manba: www.habr.com

a Izoh qo'shish