Bosh sahifa Wiki Internal node

Internal node

Internal node — tree ma’lumot tuzilmasida kamida bitta childga ega bo‘lgan element. Database B-tree/B+tree indexida internal node qidiruv kalitlari intervalini child page’lar bilan bog‘lab, so‘rovni rootdan kerakli leaf page tomon yo‘naltiradi.

Separator kalitlar

Internal page odatda child pointerlar va separator keylardan iborat. Qidiruv qiymati separatorlar bilan solishtirilib, tegishli child tanlanadi. Masalan, separatorlar 20, 50 bo‘lsa bir child 20dan kichik, keyingisi 20–50, uchinchisi 50dan katta oraliqni qamrashi mumkin. Aniq inclusive/exclusive qoida engine implementatsiyasiga bog‘liq.

B+tree variantida internal node recordning o‘zini ham saqlashi mumkin. B+tree’da esa real record yoki row locatorlar asosan leaflarda, internal page’da faqat routing ma’lumoti bo‘ladi. Database hujjatidagi atamalar farqlanadi.

Fan-out va height

Bitta internal page qancha child ko‘rsata olishi fan-out deyiladi. Page size katta, separator key qisqa va pointer ixcham bo‘lsa fan-out yuqori bo‘ladi. Minglab yoki millionlab rowli index ham 3–5 darajada qolishi mumkin. Kam height random lookup uchun oz page read degani.

Juda uzun composite/text key internal separatorlarni kattalashtirib fan-outni pasaytiradi. Prefix compression yoki truncated separator yordam berishi mumkin. Included columnlar odatda leafda saqlanib, internal node’ni keraksiz kengaytirmasligi mumkin; mahsulotga xos xulq tekshiriladi.

Root va oraliq page

Root ham internal node bo‘lishi mumkin. Tree kichik bo‘lsa rootning o‘zi leaf bo‘ladi. Root split bo‘lganda yangi root yaratiladi va tree height birga oshadi. Root page tez-tez o‘qilgani uchun buffer cache’da qolishi ehtimoli yuqori.

Root va yuqori internal page’dagi latch contention juda katta concurrent write’da bottleneck bo‘lishi mumkin. Engine latch coupling, optimistic traversal yoki B-link tree kabi usullar bilan concurrent search/splitni boshqaradi.

Split tarqalishi

Leaf split parent internal page’ga yangi separator va child pointer kiritadi. Parent to‘la bo‘lsa u ham split qiladi; jarayon rootgacha tarqalishi mumkin. Bu kam uchrasa-da, bitta insert bir nechta page’ni o‘zgartirib ko‘proq WAL yaratadi.

Crash recovery parent va child mappingni izchil tiklashi kerak. Page LSN, WAL record va sibling/high-key kabi metadata yarim tugagan splitda qidiruvning to‘g‘ri yo‘l topishiga yordam beradi.

Delete va balans

Child page merge bo‘lsa parentdagi separator olib tashlanadi. Internal node juda bo‘shasa sibling bilan merge/redistribution qilinishi mumkin. Root faqat bitta childga qolsa tree height kamayadi. Ayrim database’lar online workloadda aggressive merge qilmay, bo‘sh joyni keyingi insert uchun qoldiradi.

Tree balanced degani har page bir xil to‘la degani emas. Barcha leaf depthi mos bo‘lishi muhim, page occupancy workloadga qarab farqlanadi.

Diagnostika

Index height, internal/leaf page soni, average page density va split rate kuzatiladi. Height birdan oshishi index hajmi chegaradan o‘tganini ko‘rsatishi mumkin, ammo performance regressioni uchun cache, query plan va storage latency ham baholanadi.

Corrupt internal pointer katta key diapazonini topilmas qilishi mumkin. Page checksum buzilishni aniqlaydi; index qayta qurilishi mumkin bo‘lsa ham underlying hardware va boshqa data tekshiriladi. Unique constraintga xizmat qiluvchi indexni tiklashda concurrent write va invariant himoyasi rejalashtiriladi.

Bog‘liq tushunchalar

B-tree, B+tree, Leaf page, Separator key, Fan-out, Tree height, Page split, Buffer cache