Глобал бол өгөгдөл хадгалах эрдэнэсийн сэлэм юм. Мод. 1-р хэсэг

Глобал бол өгөгдөл хадгалах эрдэнэсийн сэлэм юм. Мод. 1-р хэсэг Өгөгдлийн сангийн жинхэнэ сэлэм - глобаль нь эрт дээр үеэс мэдэгдэж байсан боловч цөөхөн хүн тэдгээрийг хэрхэн үр дүнтэй ашиглахаа мэддэг эсвэл энэ супер зэвсгийг огт эзэмшдэггүй.

Хэрэв та глобалчуудыг үнэхээр сайн чаддаг эдгээр асуудлыг шийдвэрлэхэд ашигладаг бол гайхалтай үр дүнд хүрч чадна. Бүтээмжийн хувьд эсвэл асуудлын шийдлийг хялбарчлахад (1, 2).

Глобал нь SQL дээрх хүснэгтүүдээс огт өөр өгөгдлийг хадгалах, боловсруулах тусгай арга юм. Тэд 1966 онд хэлээр гарч ирсэн М(UMPS) (хувьслын хөгжил - Cache ObjectScript, цаашид COS) эмнэлгийн мэдээллийн санд байгаа бөгөөд одоо ч байгаа идэвхтэй ашиглаж байна, мөн найдвартай байдал, өндөр гүйцэтгэл шаардлагатай бусад салбарт нэвтэрсэн: санхүү, худалдаа гэх мэт.

Орчин үеийн DBMS-ийн глобалууд нь гүйлгээ, бүртгэл, хуулбар, хуваалтыг дэмждэг. Тэдгээр. Тэдгээрийг орчин үеийн, найдвартай, тархсан, хурдан системийг бий болгоход ашиглаж болно.

Дэлхий ертөнц таныг харилцааны загвараар хязгаарладаггүй. Тэд танд тодорхой даалгаварт оновчтой өгөгдлийн бүтцийг хөгжүүлэх эрх чөлөөг өгдөг. Олон программуудын хувьд глобал программыг ухаалаг ашиглах нь үнэхээр нууц зэвсэг болж, харилцааны программ хөгжүүлэгчдийн мөрөөдөж чадахааргүй гүйцэтгэлийг бий болгодог.

Глобалуудыг өгөгдөл хадгалах арга болгон орчин үеийн олон програмчлалын хэл, дээд болон доод түвшний аль алинд нь ашиглаж болно. Тиймээс, энэ нийтлэлд би дэлхийн хэл дээр бус харин дэлхийн хэмжээнд онцгойлон анхаарах болно.

2. Глобалчууд хэрхэн ажилладаг

Эхлээд глобалчууд хэрхэн ажилладаг, тэдний давуу тал юу болохыг ойлгоцгооё. Дэлхий ертөнцийг янз бүрийн өнцгөөс харж болно. Өгүүллийн энэ хэсэгт бид тэдгээрийг мод гэж үзэх болно. Эсвэл шаталсан мэдээллийн агуулах гэх мэт.

Энгийнээр хэлбэл, глобал нь байнгын массив юм. Дискэнд автоматаар хадгалагдах массив.
Өгөгдөл хадгалахад илүү хялбар зүйлийг төсөөлөхөд хэцүү байдаг. Кодын хувьд (COS/M хэл дээр) энэ нь ердийн ассоциатив массиваас зөвхөн тэмдэгтээрээ ялгаатай. ^ нэрний өмнө.

Дэлхий даяар өгөгдөл хадгалахын тулд SQL query хэл сурах шаардлагагүй, тэдэнтэй ажиллах командууд нь маш энгийн байдаг. Тэднийг нэг цагийн дотор сурч болно.

Хамгийн энгийн жишээгээр эхэлцгээе. 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. Оруулсан дэд лавлах болон файл бүхий сангуудыг устгах хурд эрс нэмэгдэх болно. Хабре дээр олон сая жижиг файлуудыг устгах нь хэр удаан бөгөөд хэцүү байдаг тухай нийтлэлүүд олон удаа гарч байсан (1, 2). Гэсэн хэдий ч, хэрэв та псевдо файлын системийг глобал дээр хийвэл энэ нь хэдэн секунд эсвэл хэдэн хэсэг болно. Би гэрийн компьютер дээр дэд модыг устгахыг туршиж үзэхэд HDD (SSD биш) дээрх хоёр түвшний модноос 1 секундын дотор 96-341 сая зангилаа устгасан. Түүнээс гадна бид зөвхөн глобал файлтай файлыг бүхэлд нь бус харин модны нэг хэсгийг устгах тухай ярьж байна.

Глобал бол өгөгдөл хадгалах эрдэнэсийн сэлэм юм. Мод. 1-р хэсэг
Дэд модыг арилгах нь дэлхийн бас нэг хүчтэй зүйл юм. Үүний тулд танд рекурс хийх шаардлагагүй. Энэ нь гайхалтай хурдан болдог.

Манай модонд үүнийг тушаалаар хийж болно Kill.

Kill ^a("+7926X")

Глобал бол өгөгдөл хадгалах эрдэнэсийн сэлэм юм. Мод. 1-р хэсэг

Дэлхий даяар ямар арга хэмжээ авах боломжтойг илүү сайн ойлгохын тулд би богино хүснэгтийг өгөх болно.

COS дахь глобалуудтай ажиллах үндсэн тушаалууд ба функцууд

нь чансаанд
Салбаруудыг зангилаа (хэрэв хараахан тодорхойлогдоогүй бол) болон зангилааны утгыг тохируулах

Нийлүүлэх
Дэд модыг хуулж байна

Kill
Дэд модыг устгаж байна

ZKill
Тодорхой зангилааны утгыг устгах. Зангилаанаас гарч буй дэд модыг хөндөөгүй

$Query
Модны гүн рүү орж, модыг бүрэн гатлах

$Захиалга
Тодорхой зангилааны салбаруудыг гатлах

$Data
Зангилаа тодорхойлогдсон эсэхийг шалгаж байна

$ нэмэгдүүлэх
Зангилааны утгыг атомаар нэмэгдүүлэх. Унших, бичихээс зайлсхийхийн тулд ACID-ийн хувьд. Сүүлийн үед өөрчлөхийг зөвлөж байна $Sequence

Анхаарал тавьсанд баярлалаа, бид таны асуултанд хариулахад бэлэн байна.

Disclaimer: Энэ нийтлэл болон түүнд өгсөн миний санал бол миний бодол бөгөөд InterSystems корпорацийн албан ёсны байр суурьтай ямар ч холбоогүй юм.

Үргэлжлэл Глобал бол өгөгдөл хадгалах эрдэнэсийн сэлэм юм. Мод. 2-р хэсэг. Глобал дээр ямар төрлийн өгөгдлийг харуулах боломжтой, ямар даалгаварууд хамгийн их ашиг тустай болохыг та мэдэх болно.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх