Global adalah pedang harta karun untuk menyimpan data. Pohon. Bagian 1

Global adalah pedang harta karun untuk menyimpan data. Pohon. Bagian 1 Pedang database sebenarnya - global - telah lama dikenal, tetapi masih sedikit yang tahu cara menggunakannya secara efektif atau tidak memiliki senjata super ini sama sekali.

Jika Anda menggunakan global dalam memecahkan masalah yang mereka kuasai, Anda dapat mencapai hasil yang luar biasa. Baik dalam produktivitas atau dalam menyederhanakan solusi masalah (1, 2).

Global adalah cara khusus untuk menyimpan dan memproses data, sangat berbeda dari tabel di SQL. Mereka muncul pada tahun 1966 dalam bahasa tersebut PENYAKIT GONDOK) (perkembangan evolusioner - Tembolok ObjectScript, selanjutnya COS) di database medis dan masih ada digunakan secara aktif, dan juga merambah ke beberapa area lain yang memerlukan keandalan dan kinerja tinggi: keuangan, perdagangan, dll.

Global dalam DBMS modern mendukung transaksi, logging, replikasi, dan partisi. Itu. mereka dapat digunakan untuk membangun sistem yang modern, andal, terdistribusi, dan cepat.

Global tidak membatasi Anda pada model relasional. Mereka memberi Anda kebebasan untuk mengembangkan struktur data yang dioptimalkan untuk tugas tertentu. Bagi banyak aplikasi, penggunaan global secara cerdas benar-benar dapat menjadi senjata rahasia, memberikan kinerja yang hanya dapat diimpikan oleh pengembang aplikasi relasional.

Global sebagai cara untuk menyimpan data dapat digunakan dalam banyak bahasa pemrograman modern, baik tingkat tinggi maupun tingkat rendah. Oleh karena itu, dalam artikel ini saya akan fokus secara khusus pada global, dan bukan pada bahasa asal mereka.

2. Cara kerja global

Pertama-tama, mari kita pahami cara kerja global dan apa kelebihannya. Global dapat dilihat dari berbagai sudut pandang. Pada bagian artikel ini kita akan melihatnya sebagai pohon. Atau seperti gudang data hierarki.

Sederhananya, global adalah array yang persisten. Array yang secara otomatis disimpan ke disk.
Sulit membayangkan sesuatu yang lebih sederhana untuk menyimpan data. Dalam kode (dalam bahasa COS/M) berbeda dari array asosiatif biasa hanya pada simbolnya ^ sebelum nama.

Untuk menyimpan data secara global, Anda tidak perlu mempelajari bahasa kueri SQL; perintah untuk menggunakannya sangat sederhana. Itu bisa dipelajari dalam satu jam.

Mari kita mulai dengan contoh paling sederhana. Pohon satu tingkat dengan 2 cabang. Contohnya ditulis dalam COS.

Global adalah pedang harta karun untuk menyimpan data. Pohon. Bagian 1

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



Saat memasukkan informasi ke dalam global (perintah Set), 3 hal secara otomatis terjadi:

  1. Menyimpan data ke disk.
  2. Pengindeksan. Yang ada di dalam tanda kurung adalah kuncinya (dalam literatur Inggris - “subskrip”), dan di sebelah kanan sama dengan adalah nilainya (“nilai simpul”).
  3. Sortir. Data diurutkan berdasarkan kunci. Di masa depan, saat melintasi array, elemen pertama adalah “Sergey Smith”, dan elemen kedua adalah “John Sidorov”. Saat menerima daftar pengguna dari global, database tidak membuang waktu untuk menyortir. Selain itu, Anda dapat meminta keluaran dari daftar yang diurutkan, mulai dari kunci apa saja, bahkan kunci yang tidak ada (keluaran akan dimulai dari kunci asli pertama, yang muncul setelah kunci yang tidak ada).

Semua operasi ini terjadi dengan sangat cepat. Di komputer rumah saya, saya mendapatkan nilai hingga 750 sisipan/detik dalam satu proses. Pada prosesor multi-core nilainya bisa mencapai puluhan juta sisipan/detik.

Tentu saja, kecepatan penyisipannya sendiri tidak banyak berpengaruh. Anda dapat, misalnya, dengan cepat menulis informasi ke dalam file teks - seperti ini dikabarkan Pemrosesan visa berhasil. Namun dalam kasus global, kami mendapatkan penyimpanan terindeks terstruktur sebagai hasilnya, yang dapat digunakan dengan mudah dan cepat di masa mendatang.

Global adalah pedang harta karun untuk menyimpan data. Pohon. Bagian 1

  • Kekuatan terbesar global adalah kecepatan penyisipan node baru.
  • Data di global selalu diindeks. Melintasinya, baik pada satu tingkat maupun jauh ke dalam pohon, selalu cepat.

Mari tambahkan beberapa cabang lagi dari tingkat kedua dan ketiga ke 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 adalah pedang harta karun untuk menyimpan data. Pohon. Bagian 1

Jelas sekali bahwa pohon bertingkat dapat dibangun berdasarkan global. Selain itu, akses ke node mana pun hampir seketika karena pengindeksan otomatis selama penyisipan. Dan di tingkat mana pun pada pohon, semua cabang diurutkan berdasarkan kunci.

Seperti yang Anda lihat, informasi dapat disimpan dalam kunci dan nilai. Total panjang kunci (jumlah panjang semua indeks) dapat mencapai 511 byte, dan nilainya 3.6 MB untuk Cache. Jumlah level pada pohon (jumlah dimensi) adalah 31.

Hal menarik lainnya. Anda dapat membangun pohon tanpa menentukan nilai node di tingkat atas.

Global adalah pedang harta karun untuk menyimpan data. Pohon. Bagian 1

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

Lingkaran kosong adalah simpul yang tidak mempunyai nilai yang ditetapkan.

Untuk lebih memahami global, mari kita bandingkan dengan pohon lain: pohon taman dan pohon nama sistem file.

Mari kita bandingkan pohon di global dengan struktur hierarki yang paling kita kenal: dengan pohon biasa yang tumbuh di kebun dan ladang, serta dengan sistem file.

Global adalah pedang harta karun untuk menyimpan data. Pohon. Bagian 1

Seperti yang kita lihat pada pepohonan taman, daun dan buah hanya terdapat di ujung dahan.
Sistem file - informasi disimpan hanya di ujung cabang, yang merupakan nama file yang sepenuhnya memenuhi syarat.

Dan inilah struktur data globalnya.

Global adalah pedang harta karun untuk menyimpan data. Pohon. Bagian 1Perbedaan:

  1. Node internal: informasi dalam global dapat disimpan di setiap node, tidak hanya di ujung cabang.
  2. Node eksternal: Global harus memiliki nilai yang ditentukan di ujung cabang, sedangkan FS dan pohon taman tidak.



Dalam hal node internal, kita dapat mengatakan bahwa struktur global adalah superset dari struktur pohon nama dalam sistem file dan pohon taman. Itu. lebih fleksibel.

Secara umum, global adalah pohon terurut dengan kemampuan menyimpan data di setiap node.

Untuk lebih memahami cara kerja global, bayangkan apa yang akan terjadi jika pembuat sistem file menggunakan pendekatan yang mirip dengan global untuk menyimpan informasi?

  1. Menghapus satu file dalam sebuah direktori akan secara otomatis menghapus direktori tersebut, serta semua direktori di atasnya yang hanya berisi satu direktori yang baru saja dihapus.
  2. Tidak diperlukan direktori. Hanya akan ada file dengan subfile dan file tanpa subfile. Jika dibandingkan dengan pohon biasa, maka setiap cabangnya akan menjadi buah.

    Global adalah pedang harta karun untuk menyimpan data. Pohon. Bagian 1

  3. Hal-hal seperti file README.txt mungkin tidak diperlukan. Segala sesuatu yang perlu dikatakan tentang isi direktori dapat ditulis ke dalam file direktori itu sendiri. Di ruang jalur, nama file tidak dapat dibedakan dari nama direktori, sehingga dimungkinkan untuk bertahan hanya dengan file.
  4. Kecepatan menghapus direktori dengan subdirektori dan file bersarang akan meningkat secara dramatis. Berkali-kali di Habré ada artikel tentang betapa lama dan sulitnya menghapus jutaan file kecil (1, 2). Namun, jika Anda membuat sistem file semu secara global, itu akan memakan waktu beberapa detik atau sepersekian detik. Ketika saya menguji penghapusan subpohon di komputer rumah, saya menghapus 1-96 juta node dari pohon dua tingkat pada HDD (bukan SSD) dalam 341 detik. Selain itu, kita berbicara tentang menghapus sebagian pohon, dan bukan hanya seluruh file dengan global.

Global adalah pedang harta karun untuk menyimpan data. Pohon. Bagian 1
Menghapus subpohon adalah keunggulan global lainnya. Anda tidak memerlukan rekursi untuk ini. Hal ini terjadi dengan sangat cepat.

Di pohon kami, ini bisa dilakukan dengan perintah Membunuh.

Kill ^a("+7926X")

Global adalah pedang harta karun untuk menyimpan data. Pohon. Bagian 1

Untuk pemahaman yang lebih baik tentang tindakan apa yang tersedia bagi kita dalam skala global, saya akan memberikan tabel singkat.

Perintah dan fungsi dasar untuk bekerja dengan global di COS

set
Menetapkan cabang ke sebuah node (jika belum ditentukan) dan nilai-nilai node

Bergabung
Menyalin subpohon

Membunuh
Menghapus subpohon

ZKill
Menghapus nilai node tertentu. Subpohon yang muncul dari node tidak disentuh

$kueri
Selesaikan penjelajahan pohon, masuk jauh ke dalam pohon

$Pesan
Melintasi cabang dari node tertentu

$Data
Memeriksa apakah suatu node telah ditentukan

$Peningkatan
Meningkatkan nilai simpul secara atom. Untuk menghindari melakukan membaca dan menulis, untuk ACID. Baru-baru ini disarankan untuk mengubah ke $Urutan

Terima kasih atas perhatiannya, kami siap menjawab pertanyaan Anda.

Penolakan tanggung jawab: Artikel ini dan komentar saya adalah pendapat saya dan tidak ada hubungannya dengan posisi resmi InterSystems Corporation.

Perpanjangan Global adalah pedang harta karun untuk menyimpan data. Pohon. Bagian 2. Anda akan mempelajari jenis data apa yang dapat ditampilkan pada global dan tugas apa yang memberikan manfaat maksimal.

Sumber: www.habr.com

Tambah komentar