TGViewer
Engineering Notes Engineering Notes @boboshersnotes · 2.61K subscribers
Post #213 1.69K
PostgreSQL ma'lumotlarni qanday saqlaydi?

Ko'pchilikning hayolgia keladigan birinchi javob – jadval(table)larda. Lekin shu table o'zi aslida nima va qanday ishlaydi?

Birinchi bilishimiz kerak bo'lgan narsa – PostgreSQLda biz kiritadigan ma'lumotlar tablening o'zida saqlanmaydi. Table bu ma'lumotlarning o'zini saqlaydigan emas, balki o'sha ma'lumot qayerda saqlanganini ko'rsatib turadigan heap nomli ma'lumotlar tuzilmasi (data structure)dan iborat. Bu qaysidir ma'noda frontendga o'xshash: o'zida ma'lumot yo'q, lekin uni qayerdan olishni biladi.

Xo'sh, unda haqiqiy ma'lumotlar qanday saqlanadi?
PostgreSQL haqiqiy ma'lumotlarni heap tuple (yoki shunchaki tuple) nomli alohida tuzilmalarda saqlaydi.
Heap tuple bu (odatda) tabledagi bitta record(row) saqlangan obyekt. Ya'ni bitta rowdagi qiymatlar bitta tuple sifatida, ketma-ket joylashadi. Va har bitta tuplening o'zining IDsi bor. Biz biladigan jadvalda biz qo'shgan ustunlardan tashqari yana bitta ustun – TID(Tuple ID) ham bor va aynan o'sha qiymat shu rowga tegishli ma'lumotlar qaysi tupleda turganini ko'rsatadi.

*qo'shimcha

Demak, ma'lumotlar tupleda saqlanishini bilib oldik. Bir qancha tuplelar birlashib, page yoki blokni tashkil qiladi. Bitta pagening o'lchami odatda, 8 KB bo'ladi va har bitta page fayl sistemasida bitta fayl sifatida saqlanadi. Albatta, bu faylda tuplelardan tashqari bir qancha metadata ham saqlanadi.
Shunday qilib, bitta tabledagi ma'lumotlar bir qancha (kamida bitta) pagelarda saqlanadi.

Yana bir gap, doimiy xotirada RAMga o'xshab istalgan joydagi istalgan baytni to'g'ridan-to'g'ri ololmaymiz. Birinchidan, doimiy xotira RAMga o'xshab, addresslanmagan. Ikkinchidan, har bir baytni asosiy xotiradan alohida-alohida o'qib olish ancha "qimmat"ga tushadi. Shuning uchun doimiy xotiraga bir marta borganda ko'proq ma'lumot olib qaytish kerak. PostgreSQL asosiy xotiradan ma'lumotlarni page bo'yicha ko'chiradi, ya'ni bitta faylni to'liqligicha yuklab oladi.
Bu degani, agar bizga bitta pagedagi faqat 1 ta qiymat kerak bo'lsa ham, butun pageni ko'chirib olishga majburmiz.

Ma'lumotlar to'liq tuplelardan saqlanadimi? Yo'q.
Katta hajmli ma'lumotlarni doimiy xotiradan ko'chirib olish ancha resurs oladi. Shuning uchun ularni faqatgina eng kerakli vaziyatlardagina ko'chirib olish kerak.

Masalan,
SELECT * FROM test_table WHERE id = 3;
mana shu query ishga tushganida agar indeks bo'lmasa id bo'yicha izlash uchun hamma id larni olishimiz kerak. Lekin tepada kelishganimizdek, bizga faqatgina id kerak bo'lsa ham butun boshli tuple va o'sha tuple joylashgan blokni ko'chirib olishimiz kerak.
Agar keyingi ustunda 1 GB hajmli fayl to'g'ridan-to'g'ri saqlansa, shunchaki bitta IDni (aslida faqatgina izlash uchun) olish uchun butun boshli faylni ham yuklab olishga to'g'ri keladi.

Xo'sh, katta hajmli ma'lumotlarni tupleda saqlay olmasak, unda qanday saqlaymiz? Oddiy yechim. Shunchaki ma'lumotni boshqa joyda saqlaymiz va tupleda faqatgina shu ma'lumot turgan joy manzilini saqlaymiz. Tupleni RAMga ko'chirib olayotganda esa 1 GBli ma'lumotni emas, faqatgina uning addressini olamiz. Qarabsizki, six ham kabob ham kuymaydi.
Umuman olganda, PostgreSQL hatto varchar va textni ham tupleda saqlamaydi. Xuddi tepada aytilganidek ularni ham alohida saqlab, tupleda ularga pointer saqlaydi.

Albatta, bu ma'lumotlar juda yuzaki va aslidan biroz o'zgartirilgan(osonroq tushunish uchun). Lekin o'ylaymanki, bu qisqa maqola kim uchundir shu mavzuda izlanib ko'rishga turtki bo'la oladiganlar darajada foydali bo'ladi.
Telegram Engineering Notes *qo'shimcha Yangi ma'lumot avvalgisiga nisbatan qayerga qo'shilishiga qarab tablelarni 2 turga bo'lish mumkin: 1. Yangi ma'lumot avvalgisining davomidan qo'shiladi. Masalan, IDsi 1, 3 va 2 bo'lgan rowlarni shu tartibda qo'shsangiz ular xotirada ham xuddi…
  • 👍 10
More from @boboshersnotes
  1. Oct 7, 2026– How much customization do you need? – Yes
  2. Oct 5, 2026I pinch the airpods once, Youtube video on my laptop is paused. I pinch it again, the vide…
  3. Oct 5, 2026The smartest kids in Kazakhstan should not be doing AI or maxxing out Claude. AI products…
  4. Sep 28, 2026https://www.youtube.com/watch?v=9HIy5dJE-zQ
  5. Sep 22, 2026spa-net.com qiziq challange ekan, kun bo'yi "enter" bosishdan zerikkanda bosh qotirib ko'r…
  6. Sep 21, 2026Bizda odatda juma kunlarining ikkinchi yarmi ishga to'g'ridan-to'g'ri aloqador bo'lmagan n…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →