Row va columnga asoslangan databazalar

Habibov Ulug'bek
3 min read4 days ago

--

Assalamu Alaykum bugun Row(qator) va column(ustun)ga asoslangan databazalar ma’lumotni qanday saqlashi va qaysi querylar uchun qaysi biri qulayligini ko`rib chiqamiz.

Bugungi maqolamizda:
— Row oriented (row store) databaza
— Column oriented (column store) databaza
— Afzalliklari va zararlari

Bugungi foydalanadigan querylarimiz va ularning holati:
Indexsiz
— SELECT
firstname FROM student WHERE student_id = 2000;
SELECT * FROM student WHERE student_id = 400;
SELECT SUM(debt) from student ;

Row oriented databazalar (OLTP)

Row orianted databazalarda pagedagi ma’lumotlar qatorma qator saqlanadi ya’ni birinchi qator , keyin ikkinchi qator va birgina I/O bir necha rowni va uning ichidagi hamma ma’lumotni olib keladi .Bu holatda bizga aniq rowni topishga bir necha I/O ketishi mumkin ammo topilganda hamma ma`lumot bo`ladi.

Row va column based databaza ma`lumot saqlashi

Query bilan tekshirishni boshlaymiz 1-chi querimiz SELECT firstname FROM student WHERE student_id = 2000 . Bu holatda biz jadvalni boshidan tekshirishni boshlaymiz toki 2000 idlik talabani topgancha va shu rowdagi firstname ma`lumotini qaytaramiz.
Keling SELECT * FROM student WHERE student_id = 400 queryni ishlatib ko`ramiz. Tepadagidik bu holatda ham tekshirish tepadan boshlanadi va topilgan rowdagi hamma ma`lumot uzatiladi.
Endi SELECT SUM(debt) from student queryni ishlatib ko`ramiz, bunda databaza jadvaldagi hamma ma`lumotni olib debt qiymatini qo`shib chiqib qaytaradi.

querylar

Column oriented databaza (OLAP)

Column oriented databazalarda ma’lumotlar ustunlar bo`yicha saqlangan bo`ladi . Masalan hamma firstnamelar birinchi keyin idlar, keyin debtlar . Bitta I/O orqali bizga kerakli rowlardagi bir necha ustun ma`lumotlarini o`qishimiz mumkin (kam I/O orqali kerakli ma`lumotni olish) ,ammo bir necha column bilan ishlash ko`p I/O talab qiladi.

Tepadagi rasmdan ko`rib turganingizdek row_id allaqachon 2 martadan saqlangan, agarda siz biror rowni o`chirish yoki bir necha qismiga o`zgartirish kiritsangiz bu juda ko`p joyda o`zgarish talab qiladi .

Tepadagi rasmda xuddi rowga asoslangan querylar columnga asoslangan databazada qaysi operatsiyalar amalga oshirishi ko`rib chiqilgan va column databaza asosan aggregate funksiyalarda optimal tez ishlaydi chunki faqat o`sha pagega I/O bo`ladi.Hozir bu yerda kam ustunlar(column bo`lganligi tufayli column optimal ko`rilmoqda siz uni 10+ ustunlik jadvallarda yaqqol rowga asoslangandan ortda qolayotganini ko`rasiz.

Columnga asoslanga databazalarda compression ham bo`ladi masalan bir xil qarzdagi bir necha id birdaniga bitta qarz ma`lumot oldida saqlanadi. Bu hozir postgresda ham qisman ishlaydi .

Bu yerda bizda bir savol bor agar rowga asoslangan jadvalga yangi column qo`shilsa nima bo`ladi yoki columnga asoslangan databazaga yangi row qo`shilsa ?

Xo`sh agarda siz yangi column qo`shib unga default qiymat bermasangiz , bu databaza uchun osonroq chunki pagelar o`zgarmaydi , bu columnni olmoqchi bo`lsangiz siz NULL qabul qilasiz , postgres shunchaki metadatalar orqali shu column haqida ma’lumotga ega bo`ladi hattoki u pagelarda saqlanmagan bo`lsa ham. Agarda siz null bo`lmagan column qo`shib unga default qiymat bersangiz , bu butun jadvalni qayta yozishga sabab bo`ladi va pagelardagi ma’lumotlar yana qayta taqsimlanadi bu juda qimmat operatsiya bo`ladi.

Xuddi shunday columnga asoslangan databazada yangi row qo`shilganda shunchaki har bir column pagega yoziladi, agarda yangi column qo`shilsa agarda null bo`lmasa shu column uchun yangi pagelar ochiladi.

Shuning uchun yangi column qo`shayotganda qanday bo`lishini tanlash backend dasturchini qo`lida va dasturni bir xil xatolarsiz ishlab turishiga javobgar. Agarda unga default qiymatlar kerak bo`lmasa null ishlatilgani maqul.

Xulosa

Xulosa qilib aytadigan bo`lsak row based querylar tranzaksiyalik va ko`p operatsiyalik dasturlarda ishlatish qulay masalan OLTP (Online Transaction Processing) dasturlarda, columnga asoslangan databazalar tepada ko`rganingizdek OLAP (online analytical processing) analitikaga asoslangan dasturlar uchun qulay chunki ular qaysidir column ustida ko`proq ishlaydi. Ammo bazi databazalar hozi hybrid usulni ham taklif qilishmoqda.

Agarda maqola yoqqan bo`lsa chapak chaling (ko`p chalsayam bo`ladi 50 tagacha).

Xato va kamchiliklar uchun uzr !!!

linkedin.com => Ulug’bek Habibov | LinkedIn

telegram channel => @habibov_ulugbek

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Habibov Ulug'bek
Habibov Ulug'bek

Written by Habibov Ulug'bek

Software Engineer | Backend Nodejs Developer

No responses yet

Write a response