Bosh sahifa Wiki Columnar storage

Columnar storage

Columnar storage — jadval ma’lumotlarini satrlar ketma-ketligi o‘rniga har bir ustun qiymatlarini birga saqlaydigan tashkil etish usulidir. Analitik so‘rovlar ko‘pincha millionlab satrdan faqat bir necha ustunni o‘qiydi; ustunli format keraksiz maydonlarni diskdan olib kelmasdan agregatsiya va filtrlashni bajarishga yordam beradi. U tranzaksion satr yangilanishlari uchun har doim eng yaxshi tanlov emas.

Fizik joylashuv

Satrli saqlashda bir mijozning id, name, region va amount qiymatlari yonma-yon turadi. Bitta obyektning barcha maydonini olish qulay. Ustunli saqlashda barcha amount qiymatlari bir oqimda, region qiymatlari boshqa oqimda bo‘ladi. region bo‘yicha filtrlab amount yig‘indisini hisoblaydigan so‘rov faqat shu ikki ustunni o‘qishi mumkin.

Amaliy formatlar jadvalni row grouplarga, ularni esa column chunk va sahifalarga ajratadi. Har bo‘lak uchun minimum, maksimum, null soni va boshqa statistika yozilishi mumkin. So‘rov predikati bo‘lak diapazoniga mos kelmasa, tizim uni umuman o‘qimaydi. Bu predicate pushdown va data skipping samaradorligini oshiradi.

Kodlash va siqish

Bir ustundagi qiymatlar bir xil tur va ko‘pincha o‘xshash taqsimotga ega. Shu sababli dictionary encoding takroriy satrlarni kichik identifikatorlarga, run-length encoding ketma-ket bir xil qiymatlarni juftlikka, delta encoding yaqin sonlarni farqlarga aylantiradi. Keyin umumiy kompressor yanada yaxshi natija berishi mumkin.

Siqilgan ustunlar disk I/O ni kamaytiradi, lekin dekodlash protsessor ishlatadi. Vektorlashtirilgan bajarish bir xil operatsiyani qiymatlar blokiga qo‘llab, zamonaviy protsessor kesh va SIMD imkoniyatlaridan foydalanadi. Null bitmap ham qiymat yo‘qligini alohida ixcham ko‘rsatadi.

Yangilanish xususiyatlari

Bitta satrning ko‘p maydonini tez-tez yangilash ustunli faylda bir nechta oqimga tegishni talab qiladi. Parquet va ORC kabi analitik formatlar odatda o‘zgarmas fayl sifatida ishlatiladi; yangilanish yangi fayl yozish, delete vector yoki merge-on-read qatlam orqali amalga oshiriladi. Bu batch yuklash va katta skanlar uchun qulay, ammo yuqori chastotali OLTP ishida qo‘shimcha murakkablik yaratadi.

Ustunli ma’lumotlar bazalari yozuvlarni avval xotira yoki delta storeda jamlab, keyin asosiy ustun formatiga birlashtirishi mumkin. Partition tanlovi ham muhim: juda ko‘p mayda fayl metadata va rejalashtirish xarajatini oshiradi, juda katta row group esa selektiv so‘rovda ortiqcha o‘qishga sabab bo‘ladi.

Qo‘llanish chegaralari

Data warehouse, OLAP, log tahlili va data lake ustunli saqlashdan ko‘p foyda ko‘radi. “Bitta foydalanuvchini kalit bo‘yicha topib, barcha maydonini qaytarish” kabi so‘rovda satrli indekslangan format tezroq bo‘lishi mumkin. Ko‘plab tizimlar shu sababli tranzaksion manbani satrli saqlab, analitik nusxani ustunli formatga ko‘chiradi.

Samaradorlik faqat format nomiga bog‘liq emas. So‘rov proyeksiyasi, partition pruning, row group statistikasi, fayl hajmi, saralash tartibi va kesh birga ishlaydi. Tizim real so‘rovlar bilan sinovdan o‘tkazilib, o‘qilgan baytlar hamda qaytarilgan natija nisbati kuzatiladi.

Late materialization

Analitik dvigatel ko‘pincha barcha tanlangan ustunlarni darhol to‘liq satrga yig‘maydi. Avval filtr ustunlarini o‘qib, mos pozitsiyalar vektorini hosil qiladi; keyin faqat shu pozitsiyalar uchun qolgan ustunlarni dekodlaydi. Late materialization keraksiz qiymat ochilishini kamaytiradi. Biroq juda ko‘p mos satr yoki turli row groupdagi tarqoq pozitsiyalar bo‘lsa, qo‘shimcha koordinatsiya foydadan qimmatga tushishi mumkin. Optimizer selektivlik va encoding xarajatini hisobga oladi.

Bog‘liq tushunchalar

Row group, Parquet, ORC, Dictionary encoding, Vectorized execution, Data warehouse, Predicate pushdown