Global minangka pedhang bandha kanggo nyimpen data. Wit-witan. Bagean 1

Global minangka pedhang bandha kanggo nyimpen data. Wit-witan. Bagean 1 Pedhang database nyata - globals - wis suwe dikenal, nanging isih sawetara sing ngerti cara nggunakake kanthi efektif utawa ora duwe senjata super iki.

Yen sampeyan nggunakake global kanggo ngrampungake masalah sing pancene apik, sampeyan bisa entuk asil sing luar biasa. Salah siji ing produktivitas utawa ing nyederhanakake solusi saka masalah (1, 2).

Global minangka cara khusus kanggo nyimpen lan ngolah data, beda banget karo tabel ing SQL. Dheweke muncul ing taun 1966 ing basa kasebut M(UMPS) (perkembangan evolusioner - Cache ObjectScript, sabanjure COS) ing database medis lan isih ana aktif digunakake, lan uga nembus menyang sawetara wilayah liyane sing linuwih lan kinerja dhuwur dibutuhake: finance, dagang, etc.

Global ing DBMS modern ndhukung transaksi, logging, replikasi, lan partisi. Sing. padha bisa digunakake kanggo mbangun modern, dipercaya, sistem mbagekke lan cepet.

Global ora mbatesi sampeyan ing model relasional. Dheweke menehi kebebasan kanggo ngembangake struktur data sing dioptimalake kanggo tugas tartamtu. Kanggo akeh aplikasi, panggunaan global sing cerdas pancen bisa dadi senjata rahasia, menehi kinerja sing mung bisa diimpi dening pangembang aplikasi hubungan.

Global minangka cara kanggo nyimpen data bisa digunakake ing pirang-pirang basa pemrograman modern, tingkat dhuwur lan tingkat rendah. Mulane, ing artikel iki aku bakal fokus khusus ing globals, lan ora ing basa saka ngendi padha teka.

2. Cara kerjane global

Pisanan ayo ngerti kepiye cara kerjane global lan apa kekuwatane. Global bisa dideleng saka macem-macem sudut pandang. Ing bagean artikel iki kita bakal katon minangka wit. Utawa kaya gudang data hirarkis.

Kanthi gampang, global minangka array sing terus-terusan. Array sing disimpen kanthi otomatis menyang disk.
Pancen angel mbayangno sing luwih gampang kanggo nyimpen data. Ing kode (ing basa COS / M) beda karo array asosiatif biasa mung ing simbol ^ sadurunge jeneng.

Kanggo nyimpen data ing global, sampeyan ora perlu sinau basa query SQL; printah kanggo nggarap iku gampang banget. Padha bisa sinau ing jam.

Ayo dadi miwiti karo conto paling prasaja. Wit siji tingkat kanthi 2 cabang. Conto kasebut ditulis ing COS.

Global minangka pedhang bandha kanggo nyimpen data. Wit-witan. Bagean 1

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



Nalika nglebokake informasi menyang global (Set printah), 3 perkara kanthi otomatis kelakon:

  1. Nyimpen data menyang disk.
  2. Indeksing. Sing ana ing kurung yaiku kunci (ing literatur Inggris - "subskrip"), lan ing sisih tengen padha karo nilai ("node value").
  3. Ngurutake. Data diurutake miturut kunci. Ing mangsa ngarep, nalika ngliwati array, unsur pisanan bakal dadi "Sergey Smith", lan sing kapindho "John Sidorov". Nalika nampa dhaptar pangguna saka global, database ora sampah wektu ngurutake. Menapa malih, sampeyan bisa njaluk output saka dhaftar diurutake, miwiti saka sembarang tombol, malah siji non-ana (output bakal miwiti saka tombol nyata pisanan, kang rawuh sawise non-ana).

Kabeh operasi kasebut kedadeyan kanthi cepet. Ing komputer omahku, aku entuk nilai nganti 750 sisipan / detik ing siji proses. Ing prosesor multi-inti nilai bisa tekan puluhan yuta sisipan / sec.

Mesthi, kacepetan selipan dhewe ora ngandika akeh. Sampeyan bisa, contone, cepet banget nulis informasi menyang file teks - kaya iki dikabarake pangolahan visa dianggo. Nanging ing kasus global, kita entuk panyimpenan indeks terstruktur minangka asil, sing bisa gampang lan cepet digarap ing mangsa ngarep.

Global minangka pedhang bandha kanggo nyimpen data. Wit-witan. Bagean 1

  • Kekuwatan global sing paling gedhe yaiku kacepetan ing simpul anyar bisa dilebokake.
  • Data ing global tansah diindeks. Nyabrang wong-wong mau, ing tingkat siji lan ing jero wit, mesthi cepet.

Ayo nambah sawetara cabang liyane saka tingkat kapindho lan katelu menyang global.

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

Global minangka pedhang bandha kanggo nyimpen data. Wit-witan. Bagean 1

Cetha yen wit-witan multi-level bisa dibangun adhedhasar global. Kajaba iku, akses menyang simpul apa wae meh cepet amarga indeksasi otomatis sajrone nglebokake. Lan ing sembarang tingkat wit, kabeh cabang diurutake miturut kunci.

Minangka sampeyan bisa ndeleng, informasi bisa disimpen ing tombol lan nilai. Total dawa tombol (jumlah dawa kabeh indeks) bisa tekan 511 byte, lan nilai-nilai 3.6 MB kanggo Cache. Jumlah tingkat ing wit (jumlah dimensi) yaiku 31.

Titik menarik liyane. Sampeyan bisa mbangun wit tanpa nemtokake nilai simpul ing tingkat ndhuwur.

Global minangka pedhang bandha kanggo nyimpen data. Wit-witan. Bagean 1

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

Lingkaran kosong minangka simpul sing ora ana regane.

Supaya luwih ngerti global, ayo mbandhingake karo wit liyane: wit kebon lan wit jeneng sistem file.

Ayo mbandhingake wit-witan ing global kanthi struktur hierarki sing paling akrab karo kita: karo wit-witan biasa sing tuwuh ing kebon lan lapangan, uga karo sistem file.

Global minangka pedhang bandha kanggo nyimpen data. Wit-witan. Bagean 1

Kaya sing kita deleng ing wit-witan kebon, godhong lan woh-wohan mung ana ing ujung cabang.
Sistem file - informasi disimpen mung ing ujung cabang, sing jeneng file sing mumpuni.

Lan iki struktur data global.

Global minangka pedhang bandha kanggo nyimpen data. Wit-witan. Bagean 1Bedane:

  1. Node internal: informasi ing global bisa disimpen ing saben simpul, ora mung ing mburi cabang.
  2. Node njaba: Global kudu nemtokake nilai ing ujung cabang, dene FS lan wit kebon ora.



Ing babagan simpul internal, kita bisa ujar manawa struktur global minangka superset saka struktur wit jeneng ing sistem file lan wit kebon. Sing. luwih fleksibel.

Umumé, global wit dhawuh kanthi kemampuan kanggo nyimpen data ing saben simpul.

Kanggo luwih ngerti karya globals, bayangake apa sing bakal kedadeyan yen panyipta sistem file nggunakake pendekatan sing padha karo global kanggo nyimpen informasi?

  1. Mbusak file siji ing direktori bakal kanthi otomatis mbusak direktori, uga kabeh direktori overlying mung ngemot siji direktori mung dibusak.
  2. Ora perlu direktori. Mung bakal ana file kanthi subfile lan file tanpa subfile. Yen dibandhingake karo wit biasa, saben cabang bakal dadi woh.

    Global minangka pedhang bandha kanggo nyimpen data. Wit-witan. Bagean 1

  3. Bab kaya file README.txt bisa uga ora dibutuhake. Kabeh sing perlu dicritakake babagan isi direktori bisa ditulis ing file direktori kasebut. Ing spasi path, jeneng berkas ora bisa dibedakake saka jeneng direktori, saengga bisa ditindakake kanthi mung file.
  4. Kacepetan mbusak direktori kanthi subdirektori lan file sing bersarang bakal tambah akeh. Kaping pirang-pirang ing Habré ana artikel babagan suwene lan angel mbusak jutaan file cilik (1, 2). Nanging, yen sampeyan nggawe sistem pseudo-file ing global, bakal njupuk sawetara detik utawa pecahan. Nalika aku nyoba mbusak subtrees ing komputer ngarep, dibusak 1-96 yuta kelenjar saka wit loro-undakan ing HDD (ora SSD) ing 341 detik. Kajaba iku, kita ngomong babagan mbusak bagean saka wit, lan ora mung kabeh file kanthi global.

Global minangka pedhang bandha kanggo nyimpen data. Wit-witan. Bagean 1
Mbusak subtrees minangka titik kuat global liyane. Sampeyan ora perlu rekursi kanggo iki. Iki kedadeyan kanthi cepet banget.

Ing wit kita iki bisa ditindakake kanthi prentah matèni.

Kill ^a("+7926X")

Global minangka pedhang bandha kanggo nyimpen data. Wit-witan. Bagean 1

Kanggo luwih ngerti apa tumindak kasedhiya kanggo kita liwat global, Aku bakal nyedhiyani Tabel singkat.

Prentah lan fungsi dhasar kanggo nggarap global ing COS

Setel
Nyetel cabang menyang simpul (yen durung ditetepake) lan nilai simpul

Gabung
Nyalin subtree

matèni
Mbusak subtree

ZKill
Mbusak nilai simpul tartamtu. Subtree sing metu saka simpul ora kena

$Query
Nglewati wit kanthi lengkap, mlebu ing jero wit

$Pesenan
Nglintasi cabang saka simpul tartamtu

$Data
Priksa manawa simpul ditetepake

$imbuhan
Atomically nambah nilai node. Supaya ora maca lan nulis, kanggo ACID. Bubar wis dianjurake kanggo ngganti menyang $Urutan

Matur nuwun kanggo kawigatosan sampeyan, kita siyap mangsuli pitakon sampeyan.

Nolak tanggung jawab: Artikel iki lan komentarku minangka pendapatku lan ora ana hubungane karo posisi resmi InterSystems Corporation.

Lanjutan Global minangka pedhang bandha kanggo nyimpen data. Wit-witan. Bagean 2. Sampeyan bakal sinau jinis data apa sing bisa ditampilake ing global lan tugas apa sing menehi manfaat maksimal.

Source: www.habr.com

Add a comment