Хэрэв та глобалчуудыг үнэхээр сайн чаддаг эдгээр асуудлыг шийдвэрлэхэд ашигладаг бол гайхалтай үр дүнд хүрч чадна. Бүтээмжийн хувьд эсвэл асуудлын шийдлийг хялбарчлахад (
Глобал нь SQL дээрх хүснэгтүүдээс огт өөр өгөгдлийг хадгалах, боловсруулах тусгай арга юм. Тэд 1966 онд хэлээр гарч ирсэн
Орчин үеийн DBMS-ийн глобалууд нь гүйлгээ, бүртгэл, хуулбар, хуваалтыг дэмждэг. Тэдгээр. Тэдгээрийг орчин үеийн, найдвартай, тархсан, хурдан системийг бий болгоход ашиглаж болно.
Дэлхий ертөнц таныг харилцааны загвараар хязгаарладаггүй. Тэд танд тодорхой даалгаварт оновчтой өгөгдлийн бүтцийг хөгжүүлэх эрх чөлөөг өгдөг. Олон программуудын хувьд глобал программыг ухаалаг ашиглах нь үнэхээр нууц зэвсэг болж, харилцааны программ хөгжүүлэгчдийн мөрөөдөж чадахааргүй гүйцэтгэлийг бий болгодог.
Глобалуудыг өгөгдөл хадгалах арга болгон орчин үеийн олон програмчлалын хэл, дээд болон доод түвшний аль алинд нь ашиглаж болно. Тиймээс, энэ нийтлэлд би дэлхийн хэл дээр бус харин дэлхийн хэмжээнд онцгойлон анхаарах болно.
2. Глобалчууд хэрхэн ажилладаг
Эхлээд глобалчууд хэрхэн ажилладаг, тэдний давуу тал юу болохыг ойлгоцгооё. Дэлхий ертөнцийг янз бүрийн өнцгөөс харж болно. Өгүүллийн энэ хэсэгт бид тэдгээрийг мод гэж үзэх болно. Эсвэл шаталсан мэдээллийн агуулах гэх мэт.
Энгийнээр хэлбэл, глобал нь байнгын массив юм. Дискэнд автоматаар хадгалагдах массив.
Өгөгдөл хадгалахад илүү хялбар зүйлийг төсөөлөхөд хэцүү байдаг. Кодын хувьд (COS/M хэл дээр) энэ нь ердийн ассоциатив массиваас зөвхөн тэмдэгтээрээ ялгаатай. ^ нэрний өмнө.
Дэлхий даяар өгөгдөл хадгалахын тулд SQL query хэл сурах шаардлагагүй, тэдэнтэй ажиллах командууд нь маш энгийн байдаг. Тэднийг нэг цагийн дотор сурч болно.
Хамгийн энгийн жишээгээр эхэлцгээе. 2 мөчиртэй нэг түвшний мод. Жишээ нь COS дээр бичигдсэн.
Set ^a("+7926X") = "John Sidorov"
Set ^a("+7916Y") = "Sergey Smith"
Глобал (Set команд) руу мэдээлэл оруулахад автоматаар 3 зүйл тохиолддог:
- Өгөгдлийг дискэнд хадгалж байна.
- Индексжүүлэх. Хаалтанд байгаа зүйл нь түлхүүр (Англи уран зохиолд - "дэд тэмдэгт"), тэнцүүгийн баруун талд утга ("зангилааны утга") байна.
- Эрэмбэлж байна. Өгөгдлийг түлхүүрээр нь ангилдаг. Ирээдүйд массивыг туулахдаа эхний элемент нь "Сергей Смит", хоёр дахь нь "Жон Сидоров" байх болно. Глобалаас хэрэглэгчдийн жагсаалтыг хүлээн авахдаа мэдээллийн сан нь эрэмбэлэх цагийг дэмий үрдэггүй. Түүнчлэн, та эрэмбэлэгдсэн жагсаалтын гаралтыг аль ч түлхүүрээс, бүр байхгүй түлхүүрээс авах хүсэлт гаргаж болно (гаралт нь байхгүй түлхүүрийн дараа ирдэг анхны бодит түлхүүрээс эхэлнэ).
Эдгээр бүх үйлдлүүд гайхалтай хурдан явагддаг. Миний гэрийн компьютер дээр би нэг процесст 750 оруулга / сек хүртэлх утгыг авч байсан. Олон цөмт процессорууд дээр утгууд хүрч болно
Мэдээжийн хэрэг, оруулах хурд нь өөрөө тийм ч их зүйлийг хэлж чадахгүй. Жишээлбэл, та ийм мэдээллийг текст файлд маш хурдан бичиж болно
- Глобалчуудын хамгийн том хүч бол шинэ зангилаа оруулах хурд юм.
- Глобал дахь өгөгдлийг үргэлж индексжүүлдэг. Тэдгээрийг нэг түвшинд, модны гүн рүү давах нь үргэлж хурдан байдаг.
Дэлхийд хоёр, гуравдугаар түвшний хэд хэдэн салбарыг нэмье.
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
Глобал дээр тулгуурлан олон түвшний модыг барьж болно гэдэг нь ойлгомжтой. Түүнчлэн, оруулах явцад автомат индексжүүлснээр аливаа зангилаа руу нэвтрэх нь бараг агшин зуурынх болно. Мөн модны аль ч түвшинд бүх мөчрүүдийг түлхүүрээр нь ангилдаг.
Таны харж байгаагаар мэдээллийг түлхүүр болон утгын аль алинд нь хадгалах боломжтой. Түлхүүрийн нийт урт (бүх индексийн уртын нийлбэр) хүрч болно
Өөр нэг сонирхолтой зүйл. Та дээд түвшний зангилааны утгыг зааж өгөхгүйгээр мод барьж болно.
Set ^b("a", "b", "c", "d") = 1
Set ^b("a", "b", "c", "e") = 2
Set ^b("a", "b", "f", "g") = 3
Хоосон тойрог нь ямар ч утгагүй зангилаа юм.
Глобалуудыг илүү сайн ойлгохын тулд тэдгээрийг бусад модтой харьцуулж үзье: цэцэрлэгийн мод, файлын системийн нэрний мод.
Дэлхий дээрх модыг бидэнд хамгийн танил болсон шаталсан бүтэцтэй: цэцэрлэг, талбайд ургадаг энгийн мод, түүнчлэн файлын системтэй харьцуулцгаая.
Цэцэрлэгийн модноос харахад навч, жимс жимсгэнэ нь зөвхөн мөчрүүдийн төгсгөлд байдаг.
Файлын системүүд - мэдээлэл нь зөвхөн салбаруудын төгсгөлд хадгалагддаг бөгөөд тэдгээр нь бүрэн эрхтэй файлын нэр юм.
Мөн энд дэлхийн өгөгдлийн бүтэц байна.
Ялгаа нь:
- Дотоод зангилаа: Глобал дахь мэдээллийг салбаруудын төгсгөлд төдийгүй бүх цэгүүдэд хадгалах боломжтой.
- Гадаад зангилаа: Глобал нь салбаруудын төгсгөлд тодорхой утгатай байх ёстой, харин FS болон цэцэрлэгийн моднууд тийм биш юм.
Дотоод зангилааны хувьд бид глобал бүтэц нь файлын систем, цэцэрлэгийн модны нэрийн модны бүтцийн дээд хэсэг гэж хэлж болно. Тэдгээр. илүү уян хатан.
Ер нь бол дэлхий нийтээрээ зангилаа бүрт өгөгдөл хадгалах чадвартай захиалгат мод.
Глобалчуудын ажлыг илүү сайн ойлгохын тулд файлын системийг бүтээгчид мэдээлэл хадгалахдаа глобал системтэй төстэй аргыг хэрэглэвэл юу болохыг төсөөлөөд үз дээ?
- Лавлах доторх нэг файлыг устгаснаар уг лавлах, мөн саяхан устгасан нэг л лавлахыг агуулсан бүх хавтаснууд автоматаар устана.
- Лавлах шаардлагагүй болно. Зүгээр л дэд файлтай файлууд болон дэд файлгүй файлууд байх болно. Жирийн модтой зүйрлэвэл мөчир бүр нь жимс болно.
- README.txt файл гэх мэт зүйлс хэрэггүй байж магадгүй. Сангийн агуулгын талаар хэлэх шаардлагатай бүх зүйлийг лавлах файлд өөрөө бичиж болно. Замын орон зайд файлын нэр нь лавлах нэрнээс ялгагдахгүй тул зөвхөн файлаар ажиллах боломжтой байсан.
- Оруулсан дэд лавлах болон файл бүхий сангуудыг устгах хурд эрс нэмэгдэх болно. Хабре дээр олон сая жижиг файлуудыг устгах нь хэр удаан бөгөөд хэцүү байдаг тухай нийтлэлүүд олон удаа гарч байсан (
1 ,2 ). Гэсэн хэдий ч, хэрэв та псевдо файлын системийг глобал дээр хийвэл энэ нь хэдэн секунд эсвэл хэдэн хэсэг болно. Би гэрийн компьютер дээр дэд модыг устгахыг туршиж үзэхэд HDD (SSD биш) дээрх хоёр түвшний модноос 1 секундын дотор 96-341 сая зангилаа устгасан. Түүнээс гадна бид зөвхөн глобал файлтай файлыг бүхэлд нь бус харин модны нэг хэсгийг устгах тухай ярьж байна.
Дэд модыг арилгах нь дэлхийн бас нэг хүчтэй зүйл юм. Үүний тулд танд рекурс хийх шаардлагагүй. Энэ нь гайхалтай хурдан болдог.
Манай модонд үүнийг тушаалаар хийж болно Kill.
Kill ^a("+7926X")
Дэлхий даяар ямар арга хэмжээ авах боломжтойг илүү сайн ойлгохын тулд би богино хүснэгтийг өгөх болно.
COS дахь глобалуудтай ажиллах үндсэн тушаалууд ба функцууд
Салбаруудыг зангилаа (хэрэв хараахан тодорхойлогдоогүй бол) болон зангилааны утгыг тохируулах
Дэд модыг хуулж байна
Дэд модыг устгаж байна
Тодорхой зангилааны утгыг устгах. Зангилаанаас гарч буй дэд модыг хөндөөгүй
Модны гүн рүү орж, модыг бүрэн гатлах
Тодорхой зангилааны салбаруудыг гатлах
Зангилаа тодорхойлогдсон эсэхийг шалгаж байна
Зангилааны утгыг атомаар нэмэгдүүлэх. Унших, бичихээс зайлсхийхийн тулд ACID-ийн хувьд. Сүүлийн үед өөрчлөхийг зөвлөж байна
Анхаарал тавьсанд баярлалаа, бид таны асуултанд хариулахад бэлэн байна.
Disclaimer: Энэ нийтлэл болон түүнд өгсөн миний санал бол миний бодол бөгөөд InterSystems корпорацийн албан ёсны байр суурьтай ямар ч холбоогүй юм.
Үргэлжлэл
Эх сурвалж: www.habr.com