Otabek’s I/O
1.25K subscribers
50 photos
3 videos
63 links
Staff Software Engineer @Dropbox | Mentor @qirikki

I write about Backend, Infrastructure, Math, ML/AI, and Computer Science.
Download Telegram
Tajriba != Yillar

Shu paytgacha juda ko’p postlar, e’lonlar va open vacancy larni ko’rdim. Deyarli barchasida yillar bilan tajribani berib ketishadi.

Orasida ba’zailariga topshirib ham ko’rdim. 75% laridan job offer qolganlaridan reject oldim. Menga bu nimani o’rgatdi?

Tajriba yillar bilan emas amaliyotlar bilan o’lchanishini o’rgandim. Agar sizda yillik tajriba kam ammo zo’r loihalarda yaxshi ishlar, amaliyotlar va yechimlar qilgan bo’lsangiz bunday ishlarga topshirishdan qo’rqmang.

Epamda 4 ta odamni taniyman, yaqindan suxbat qilib turaman. Ularni ichida 2 yilda Team Lead bo’lganiniyu 2 yildan beri Senior bo’la olmayotganini ham taniyman.

Tajriba yilda emas doim amaliyotlarda o’lchanadi. Qilayotgan ishingiz qancha mashaqqatli va katta bo’lsa, beradigan tajribasi ham shuncha bo’ladi.

Bollar biz yutamiz!

@otabekswe
Dasturchilar uchun 3 maslahat:

1. Chala qilishdan qilmagan avfzalroq, qadringiz va shaningizni saqlab qolasiz.

2. Qadringizni ko'p bilim emas katta tajriba oshiradi. Ko'p bilib qila olmaydiganlarni soni juda ko'p va ular hozir deyarli hech kimga kerak emas.

3. Faqat bir narsaga fokus qarating. JS o'rganayabsizmi faqat JS ni yaxshilab o'rganib ko'p amaliyot qiling.

Shaxsan o'zimda juda ko'p foyda keltirgan.

P.S: 2 va 3 Seniorlar va menejerlarimdan ko'p eshitganman.

@otabekswe
DSA Camp yohud bularni o'rganishdan nima foyda?

Dasturlashga yangi kirib kelayotgan deyarli 90% odamlar high-level dasturlash tillarida ishlashadi. Ularda deyarli barcha ishlar avtomatlashtirilgan va boshqalar uchun ko'plab imkoniyatlar abstraklashtirilgan. Bu narsa bizga ikki xil ta'sir qiladi, yo biz tayyor narsalarga o'rganib dangasa bo'lib qolamiz yo bunday narsalarni qanday ishlashiga qiziqib ular haqida o'rganib chiqamiz.

Misol uchun Nginx Tree (Radix tree)ni route matching va request dispatching maqsadida ishlatadi. Yokida Elasticsearch Balanced search tree (AVL tree)ni indekslash va ma'lumotlarni sortlash uchun ishlatadi. Bunday texnologiylarni juda ko'plab misollar bilan keltirish mumkin.

Algoritmlar va Data Structurelarni o'rganishdan maqsad faqat interviewdan muvaffaqiyatli o'tish emas balkim qilayotgan ishingizda siz ishlatadigan texnologiya inefficient bo'lib qolsa uning o'rniga to'g'ri va efficient yechim bera olishingiz bo'lishi ham kerak.

Siz ishlatayotgan barcha narsalarni asosi aslida shu tushunchalar va bilimlar asosida qurilganini tushunib yetishingiz shart. Hamma qurol ishlatishi mumkin ammo hamma ham qurol yasay olmaydi.

@otabekswe
This media is not supported in your browser
VIEW IN TELEGRAM
Interviewni buzib tashlashni istaysizmi?

Istalgan savolga javob berishni istaysizmi?

Unda HashMap ni o’rganing.

Qayerdan qanday deysizmi?

Mana: https://youtu.be/JaUBDrCu6B4

@otabekswe
Balkim qiziqdir

Oldinlar barcha korxona va kompaniyalar mijozlar ma'lumotlarini saqlash uchun oddiy fayllardan foydalanishgan va buni "File-Based System" deb atashadi. Ammo bu yondashuvda juda ko'p muammolar yuzaga keladi.

1. Data redundancy - Universitet, Universitet yotoqxonasi va Sport Zalni olaylik. Ushbu 3 tizim ham ma'lumotlarni .txt (yoki boshqa) fayllarda saqlaydi. Ba'zi ma'lumotlar barchasida bir xil misol uchun 3 tomondagi kompyuterda sizni ismingiz, familyangiz, id raqamingiz va telefon raqamingiz bor va undan tashqari o'zlari bir-biriga tegishli bo'lmagan ma'lumotlarni saqlaydi. Ko'p gapirmay qisqa qilsak, bitta siz uchun 3taraf ham alohida fayl ochadi va bitta odam uchun 3ta ma'lumot bo'ladi. Bu esa ortiqcha ma'lumot muammosini olib keladi.

2. Data inconsistency - O'sha 3 tizimni olamiz. Nimadir bo'lib telefoningizni yo'qotdingiz. Yangi raqam va telefon oldingiz. Agar siz o'sha ular bilan doimiy aloqani ushlashni hohlasangiz 3 tomonga borib ma'lumotlarni yangilashini aytishingiz kerak bo'ladi. Bu esa inconsistent.

3. Difficult data access - Sizga o'xshagan nechta o'quvchi bor. Endi ular uchun ham fayllar ochilgan. Biror o'quvchini ma'lumotini ko'rish uchun uni ma'lumoti qayerdaligini bilmasa bormi... ehh qancha vaqt uvol. Bu ham bir muammo.

4. Security problems - Oddiy fayllar unauthorized access muammosini keltirib chiqaradi. Ya'ni kompyuteringizga kira olgan odam ma'lumotlarga ham kira oladi va o'zgartira oladi. Easy peasy.

5. Difficult concurrent access - Bir nechta o'quvchilar bir vaqtda o'zlarini ma'lumotlarini ko'ra olishmaydi va bu ham katta muammo.

Xullas aynan shu muammolarni oldini olish uchun DBMS ya'ni Data Base Management System ishlab chiqilgan. Shuning uchun ham buni oddiy Data Base deb emas Management System bilan qo'shib aytishadi. O'sha management system sizga authorization, consistency, accessibility imkoniyatlarini beradi.

P.S: Post shunchaki hikoya o'qish uchun yozildi 😉

@otabekswe
What is Data?

Data Base haqida yozishdan oldin data haqida ham to'xtalishni istadim, chunki bu haqida hech ma'lumot uchratmadim.

Data turli xil formatdagi ma'lumotning ko'rinishi misol uchun: text, audio, video, photo, bytes, number, va h.k.z bo'lishi mumkin. Ko'rib turibsizki ularni barchasi bir xil turdagi ma'lumot emas va bir-biridan tubdan farq qiladi. Keling 3 xil data haqida gaplashib o'tsak.


1.Structured data - oldindan qandaydir maxsus tuzilmalar asosida tuzilgan ma'lumotlar bo'lib, search, analyze, sort va format qilish uchun qulaylashitirlgan bo'ladi. Bunday ma'lumotlar quantitive ya'ni cheklangan (xajmda, typeda va e.t.c.) bo'lishadi.

Misol uchun: SQLda saqlaydigan ma'lumotlarimiz ham aynan shu turga kiradi. Shuning uchun ham SQL ni Structured Query Language deb atashgan. Ularga ma'lumot kiritishda type, size va restriction (constraint) kiritishingiz kerak bo'ladi.


2.Unstructured data - bunday turdagi ma'lumotlar qualitative data ya'ni sifatli ma'lumotlar turkumiga kiradi, uni oddiy toollar va methodlar yordamida protseslash va analyze qilishni imkoni yo'q.

Misol uchun: audio, video, photo, blog postlar va h.k.z larni kiritish mumkin. Xattoki oddiy twitter posti ham unstructured data xisoblanadi. Biz unga hashtaglar, user mention, emoji va URLlar yozganimiz uchun. Ularni format va analyze qilish uchun standart yo'l yo'q bo'lgani uchun maxsus yo'llardan foydalaniladi.


3.Semi-structured data - yuqorida keltirilgan 2 turni o'rtasida yotuvchi data xisoblanib, ularni aniq bir shakli bo'lmasligi mumkin. Ular metadata yoki semantic taglardan tashkil topadi ammo qandaydir qat'iy strukturaga ega emas. Ularni ba'zi qismlari structured data bo'lgani bilan ba'zi qismi unday bo'lmaydi.

Misol uchun: XML va JSON. XML ham data ham taglarni o'z ichiga olib hierarchical structure xosil qiladi. Belgilangan format yoki ba'zi cheklovlar bor bo'lishiga qaramasdan, teglar ichidagi ma'lumotlar farqlanaveradi.

Metadata bu - "data about data" degani ya'ni "ma'lumot haqida ma'lumot". Unstructured data odatda metadataga ega bo'ladi (creator, location, shutter speed, date, file size va h.k.z)

@otabekswe
(R)DBMS

Qachonki biz MySQL, PostgreSQL va ... lar haqida gapirganimizda biz database haqida emas balkim uning tizimi (system) haqida gapirayotgan bo'lamiz. Oddiyroq qilib gapirganda database management system haqida.

U software ya'ni dastur bo'lib foydalanuvchiga create, update, delete, read, qisqa qilib aytganda databaseni manipulate qilish imkoniyatini beradi. Qisqacha aytganda database va end-user o'rtasidagi interface desak bo'ladi. MySQL ham PostgreSQL ham Client-Server arxitekturasidan foydalanadi.

Misol uchun MySQL Application/Client, MySQL Server va Storage Engine qavatlaridan tashkil topgan.

1.Application/Client Layer - bu qavat client connection, authorization, authentication va security uchun javobgar.

2.MySQL Server Layer - bu qavat application layerdan kelayotgan buyruqlarni parse, analyze va optimize qilishga javobgar. Aynan shu qavat SQL kommandalarni databasega jo'natib uni boshqaruvini qiladi.

3.Storage Engine Layer - bu qavat ma'lumotlarni yozish va saqlash ishlarni bajaradi. Xolatga qarab turli xil engine tanlsh imkoniyatini ham tanlashingiz mumkin MySQLda. PostgreSQL faqat bitta storage engine support qiladi (ammo zheap ishlab chiqilmoqda hozircha heapam.c da ishlaydi lekin).

THE END!

@otabekswe
SQL Execution order yoxud SQL Querylar qanday ishlaydi?

SQL Querylar 3ta bosqchida ishlaydi:

1. Row filtering - ushbu bosqichda FROM, WHERE, GROUP BY va HAVING lar ishga tushadi.

2. Column filtering - ustunlar odatda SELECT statement bilan filter qilinadi.

3. Row filtering - DISTINCT, ORDER BY va LIMIT lar ishga tushadi.

Ha, ha adashmadingiz row filtering 2 marta amalga oshiriladi agar siz yozadigan SQL query shuni talab qilsa.

SELECT id, full_name, university, gpa FROM student WHERE gpa > 3.00 ORDER BY full_name;

Yuqoridagi SQL queryni keling tahlil qilib nimalar sodir bo'lishini kuzatib chiqamiz.

FROM, WHERE execution

Birinchi o'rinda FROM va WHERE ishga tushadi va student tabledan kimda gpa 3.00 dan katta bo'lsa o'sha foydalanuvchilarni tanlaydi. Ammo qanday tanlaydi, bu albatta loop bilan sodir bo'ladi. Har bir rowni filter qilib oladi, agar gpa > 3.00 bo'lsa ularni qoldiradi agar unday bo'lmasa ulardan keyingi rowlarni tekshiradi.

GROUP BY, HAVING execution

GPA 3.00dan katta qiymatlar tanlab olindi, loop tugadi. Keyingi bosqich agar siz ularni guruhlagan bo'lsangiz GROUP BY ishga tushadi. Guruhlangan elementlarga shart berish uchun esa HAVING ishlatasiz WHERE emas. Chunki WHERE guruhlashdan avval bajariladi. Guruhlashdan keyin esa ularni shart asosida tanlash uchun HAVING clause kerak.

SELECT execution

FROM va WHERE barcha rowlarni barcha columnlari bilan olib keladi ammo SELECT bu yerda qaysi columnlarni bizga ko'rsatishni hal qiladi xolos. Ya'ni siz SELECT deb qaysi columlarni kiritsangiz o'shalarni sizga ko'rsatadi.

ORDER BY, LIMIT execution

Demak bizda ko'rsatiladigan columnlar, table va rowlar aniq, endi ularni tartiblash kerak. Agar siz ORDER BY deya qaysidir columnni belgilagan bo'lsangiz u SELECT qilingan elementlarni siz aytgan column bo'yicha tartiblab chiqadi. Agar tartiblangan elementlarni limitini bergan bo'lsangiz demak tartiblab bo'lgandan keyin ularni siz aytgan LIMIT bo'yicha sizga taqdim etadi.

Ko'rib turibsizki SQL queryni qanchalik tezlashtirish yoki sekinlashtirish uni bosqichlari ko'pligi va qaysi bosqichdan qanchalik yaxshi foydalanishingizga ham bog'liqlik tomonlari bor.

@otabekswe
SELECT * is bad yoxud SELECT * ning yomon tomonlari

SELECT * yomon va undan qochish kerakligi haqida ko'p postlarni o'qidim, aksariyatlari esa aynan nima uchunligi haqida yozishmagan. Keling bugun millionlab yoki minglab row yoki columnlar bilan ishlash davomida aynan nega SELECT * dan foydalanish yaxshimasligi haqida gaplashamiz.


1. Unnecessary I/O - Sizga doim ham barcha columnlarni tanlash kerakmas bo'lishi mumkin. Agar siz barcha columnlarni fetch qilib ularni ba'zilarini umumman ishlatmasangiz bu ham resursni uvol qilish xisoblanadi, chunki barcha page (bu haqida keyingi postlarda)lardagi ma'lumotlarni o'qishiyabsiz. BTW, SELECT * index-only scan qilishga to'siqlik qiladi.

2. Increase network traffic - Demak keraksiz columnlarni ham olib kelayabsizmi bu degani ko'p network bandwidth sarflash degani.

3. Application memory - Ma'lumotlar ko'paygandan keyin dasturingiz ham kerakmas ma'lumoltarni ushlab turish uchun ko'proq memory talab qilishni boshlaydi.

4. Client Deserialization - Ma'lumotlar clientga jo'natilishdan oldin protocol qoidalariga muvofiq serialization bo'ladi. Demak qancha ko'p ma'lumot jo'natsangiz shuncha ko'p serialization operatsiyalari bajariladi va bu ko'p CPU yeydi. Endi jo'natdi ham deylik, client serialized datani qabul qilgandan keyin nima bo'ladi albatta uni deserialize qilishi kerak va boya aytganimizdek CPU yana isrof bo'ladi.

Conclusion: Ushbu postda SELECT * yomon deyilmagan aksincha uni qachon va qayerda ishlatishni bilmaslik yomon deyilgan. Shunchaki qilib ko'rish va o'rganishlar davomida ishlatavering ammo production levelda buni har yeda qo'llash sizga qimmatga tushishi mumkin.

Yana nimalar qolib ketdi, commentda qoldiring. Menga ham yangilik bo'lardi...

@otabekswe
SQL Join - endi easy

Ushbu maqolani o'qib chiqish orqli JOIN haqida o'rganib, practice qilib chiqishingiz mumkin.

Sizga qiziq mavzularni commentda yozib qoldiring balkim keyingi post aynan shu mavzu haqda bo'lar...

Ma'qolani o'qish tekin 🙂
.
.
.
.
Subquery - endi easy

Ushbu maqolada Subquery mavzusini yaxshilab o'rganib, practice qilib chiqishingiz mumkin.

O'sha gap: Ma'qolani o'qish tekin 🙂
.
.
.
Erinmasangiz post haqida feedback kutib qolaman )
Tutorial hell

Qiziq maqolalar ichida tutorial hell degan yozuvli maqolaga ko'zim tushdi. Kirib o'qib chiqdim va bugun shu mavzuda post yozishga qaror qildim.

Tutorial hell - qachonki siz biror resurs (video, article va ...)dan kim nimani o'rgatsa shuni ko'r-ko'rona ko'chirishingizga aytiladi. Ushbu muammoga yangi dasturlashga kirganlar yoki biror yangi texnologiya, til o'rganayotganlar tez uchrashar ekan va bu rost.

Aslini olganda bu juda yomon chunki hozir haqiqatdan ham ko'plar nima qilayotganiga tushunmay kod yozadi yoki ko'chirishadi, "I have no idea what am doing bro" deganlari shu bo'lsa kerak. Bu kasallikni eng katta yomon ta'siri dasturchi o'rgangan narsasini faqat qilgan ishiga bog'lab o'rganadi va boshqa mustaqil ish bersangiz ... (Loading...)

Dasturlashda deyarli 60-70% tushunchalar boshqa narsalarda ham mavjud bo'ladi va ularni faqat bitta til, texnologiya yoki narsaga bog'lab o'rganish juda xato deb bilaman.

Tez yangi narsa o'rganishni emas balkim bor narsani kuchaytirishni o'rganing. Bruce Lee akam aytganidek:

"Men 1000 xil zarba biladigan raqibdan emas,
Bitta zarbani 1000 marta qaytaradigan raqibdan qo'rqaman."


Let me know if am wrong )

@otabekswe
CTE - endi easy

Ushbu maqolani o'qib chiqish orqli CTE haqida o'rganib, practice qilib chiqishingiz mumkin.

Yana o'sha gap: Ma'qolani o'qish tekin 🙂

Bundan keyingi mavzular advanced topikda qilishga qaror qildim chunki tutorial yozish unchalik ham yoqmadi
.
.
.
Dasturchi universitetda o'qishi shartmi?

Menda ham shunday savol paydo bo'lib unga javob qidira boshladim. Ushbu savolga o'tgan yili Yaponiyalik professorimdan ajoyib javob olgandim. Uning javobi shunday bo'lgandi:

"Otabek, Dasturlash bu computer sciencedagi kichik bir qism xolos. Har narsani dasturlash bilan hal qilib bo'lmaydi ammo computer science bilan ko'plab ishlar qilish mumkin. Sen hozir o'rganayotgan math, networks va ... fanlar sizlarga fundamental, tubdagi tushunchalarni o'rgatayabdi. Dasturlash tili esa bu shunchaki tool va uni hamma o'rgana olishi mumkin. Computer science problem sovlingdan iborat, faqat dasturlashdan emas" degandi.

Ushbu gaplardan keyin juda ko'p o'ylanib faqat oldimdagi narsaga focus qarata boshladim. Boshlanishiga OOP darsimizda Alan Key qanday qilib OOPga asos solgani, Simula, C++ va uning maqsadi haqida gaplashgandik. Keyin ustozimdan maslahat olib Object Thinking by David West kitobini o'qishni boshladim. Ko'p narsalarni anglab yetdim. Biroz vaqt o'tib Azimjon aka bilan gaplashib ulardan Elements of Reusable Object-Oriented Software kitobini o'qib chiqish haqida tavsiya oldim, o'qib yana ham ko'proq narsa o'rgandim.

Keyinchalik Computer Networks darsimizdan Networking o'rgana boshladim, juda qiziq bo'ldi va ko'p biz bilamagan ishlar asosan shu tushunchalar asosida ishlashiga tushundim.

Xulosa: Computer Science faqat dasturlash tillari yoki webdan emas balkim ko'plab chiroyli jabhalardan iboratligini tushunishingiz kerak. Va 4 yil universitetda o'qish bekochilik emas.

P.S: Fikrlarim o'ta shaxsiy va 100% to'g'ri bo'lmasligi mumkin (balkim aniqdir bilmayman).

@otabekswe
Declarative vs Imperative Programming

Ushbu 2 paradigm paradigmlar asosi xisoblanadi desam mubolaga' bo'lmaydi chunki Paradigmlar aynan shu 2ta turga ajraladi. Misol uchun OOP, FP bu Declarative xisoblansa, Procedural va OOP (haqiqiy OOP emas) Imperative xisoblanadi. Hop keling ikkisini farqini tushinib olsak.

Imperative Programming

Imperative Programmin is about "HOW a program works". Aniqroq tushunchada aytadigan bo'lsa siz sochizni oldirayabsiz. Sartaroshga qarab:

"Xullas oka, sochni orqasini ozgina, ikki yonini kaltaro va ustini uch-uchuidan olib qo'ying." deyishingiz bu har bir qadamni qanday bajarishni aytishga to'g'ri keladi va sartarosh ham xuddi shunday oladi. Shu narsa Imperative Programming deyiladi. Pythonda example keltiradigan bo'lsak

total = 0
nums = [1, 2, 3, 4, 5]
for num in nums:
total += num


Ushbu kod aynan imperative xisoblanadi chunki har bir stepni siz tasvirlab berayabsiz qanday bo'lishini.

Declarative Programming

Declarative Programmin is about "WHAT a program does". Yana o'sha sartarosh oldidasiz, ammo bu safar siz unga qarab:

"Xullas oka, sochimni mana bunga o'xshatib qo'ying." deyishingiz bu qanday qilishini farqi yo'q ammo shunday natija bersa bo'ldi deganday gap.

nums = [1, 2, 3, 4, 5]
total = sum(nums)

Ushbu kod aynan declarativega to'g'ri keladi chunki siz steplarni keltirmayabsiz qisqacha qanday natija xohlashizni aytayabsiz xolos.

It's all about Abstraction

Barchasi borib abstractionga taqaladi chunki bizga uni QANDAY ishlashi emas balkim NIMA qilishi ya'ni ishlashi muhim deyishday gap.

Post idea chopildi, rozi bo'lasiz )

@otabekswe
Database Transaction

The Problem
Anna databasega id=1 teng kitob chiqarilgan sanasi (release_year)ni olish uchun query yozdi va unga 2004 javobi qaytdi. Xuddi shu vaqt Sam shu kitobni chiqarilgan sanasini (2012) va nashrini (4-nashr) o'zgartirish uchun query yozdi. Anna biroz vaqtdan keyin yana shu "release_year"ini oldi va natija bu safar o'zgarib qoldi. Biroz vaqt o'tib esa Sam adashganini sezib ROLLBACK qilib yubordi.

The Solution
Transaction ma'lumotlarni "consistency"si bilan bog'liq muammolarni oldini olish uslubi xisoblanadi. U ACID tamoyili bo'yicha ishlashi kerak va transaction konseptsiyasidan asosiy maqsad transaction tugagunicha butun bir jarayonni izolyatsiyalash xisoblanadi. Xo'sha ACID nima?

ACID
ACID bu Atomicity, Consistency, Isolation va Durability.

Atomicity
Qachonki transaction (read/write) sodir bo'lsa, barcha operatsiyalar bir vaqtning o'zida sodir bo'lishi kerak yoki umuman bo'lmasligi kerak. Agar transaction to'xtatilsa yoki xatolik yuz bersa, databasega ta'sir qilmasligi kerak va butun jarayon oldingi xolatiga qaytishi kerak. Xuddi shunday, agar transaction amalga muvaffaqiyatli oshirilsa, database holati o'zgarishlarni qabul qilishi kerak. Qisqacha aytganda yoki hammasi muvaffaqiyatli kechadi yoki hech biri bajarilmaydi.

Consistency
Transaction faqat databaseni bir holatdan ikkinchisi olib o'tishni taminlaydi ya'ni databasega yoziladigan har qanday ma'lumotlar barcha belgilangan qoidalar (constraints, cascades, triggers, va boshqa)ga muvofiq ishlashi kerak. Qisqachasiga, noqonuniy ma'lumotlardan qochish imkoniyatini beradi.

Isolation
Har bir transaction operatsiyalari izolyatsiyalangan bo'lishi kerak ya'ni race condition keltirib chiqarishi kerak emas degani. Database transactionlar ketma-ket bajarilishini ta'minlash uchun row(qator)larga lock (qulf) qo'yib chiqadi. Qisqachasiga, Concurrency controlni aynan isolation bajaradi.

Durability
Transaction amalga oshirilgandan so'ng, tizim ishdan chiqgan taqdirda ham ma'lumotlar saqlanib qolishi kerak.

Real Life Example

Atomicity
Do'stingiz xisobiga 100$ o'tkazayabsiz. Jarayonlar esa: avval sizni xisobingiz tekshiriladi so'ngra xisobingizdagi summadan 100$ ayriladi va do'stingiz xisobi tekshirilib unga 100$ ni qo'shib qo'yadi. Oddiy logika )

Consistency
Sizning xisobingiz manfiyga aylanmasligi va unda yetarli mablag' bo'lishi bu qoida sifatida beriladi. Agar qoida buzilsa kompaniya minusga ishlaydi. Bunday qoidalar juda ko'p bo'lishi mumkin va men qisqacha keltirdim.

Isolation
Operatsiyalar to muavaffaqiyatli bajarilmagunigacha sizga va do'stingizga hech qanday o'zgarishlar ko'rinmasligi shart. Barcha jarayonlar isolation bo'lgan bo'lishi kerak.

Durability
O'tkazma muvaffaqiyatli kechdi endi ma'lumotlar saqlanishi va o'chib ketmasligi shart.

Transactiondan maqsad va muamolarni to'g'ri yoritib berdim deb umid qilaman.

@otabekswe
SQL Trigger

SQL Trigger - insert, update, (truncate) yoki delete operatsiyalaridan sodir bo'lgandan oldin yoki keyin avtomatik ishga tushuvchi funksiya xisoblanadi. Ular tablega bog'liq funksiya xisoblangani uchun, avval trigger function yaratasiz va uni biror tablega bog'lab qo'yasiz.

Types
PostgreSQL, MySQL asosan 2 turdagi triggerlarni taqdim qiladi, row-level va statement-level trigger. Ikkisini bir-biridan farqi necha marta va qaysi vaqtda ishga tushishida. Oddiyroq misol keltiradigan bo'lsak, 100 ta ma'lumot insert qilayabsiz demak row-level 100 marta ishlasa statement-level 1 marotaba ishlaydi.

Hozirda ba'zi ORMlar ham event sodir bo'lishidan oldin yoki keyin qandaydir ishlar qilish imkoniyatini berishini bilishingiz mumkin misol uchun SQLAlchemy va Django ORM. Django signals bu triggerni ORM level implementatsiyasi xisoblanadi. Ishlashi database-level triggerga o'xshaydi va siz pre_init, post_init, pre_save, post_save kabi signal turlari bilan o'zingiz hohlagan vaqtda biror logikani amalga oshirishingiz mumkin.

Problems with triggers
Triggerni kamchiliklari yo'q ammo dasturchilarda bor chunki hamma narsani ham triggerga berish xato. Triggerdan faqat kerak bo'lgan xolatdagina foydalanishni tavsiya qilaman. Ba'zan noto'g'ri yozilgan trigger juda ko'p muammolarga olib kelishi mumkin chunki ular avtomatik ishga tushgani uchun sizga ko'rinmaydi. Ba'zan esa ko'plab foyda olib kelishi mumkin ya'ni ishingizni, vaqtingizni tejashi mumkin.

@otabekswe
SQL View

Complex querylarni qayta-qayta yozishdan yoki copy/paste qilishdan charchagan data engineerlar SQLga shikoyat yozibdi. SQLni yaratgan jamoa esa bu muammoga yechim izlashga kirishadi. Yechim sifatida esa bizga View terminalogiyasini taqdim qiladi. (Ertaknamo boshlanish 😉)

SQL View - bu virtual table bo'lib u o'zida ma'lumot saqlamaydi balkim bir yoki bir nechta tablelarni olib keladi (albatta databasedan). View orqali complex (qiyin) querylarni bo'laklarga bo'lish orqali soddalashtirish va ularni more managable qilish mumkin. Ularga access limit ham berish mumkin, zo'r-a?

Types of Views
SQLda 2 turdagi viewlar mavjuda va ular: Regular views va materialized views xisoblanadi.

Regular views - bu oddiy view bo'lib, bir nechta tablelardan ma'lumot olib kela oladi ammo shu bilan birga JOIN, SUBQUERY va boshqa turdagi statementlar bilan ishlatiladi.

Materialized views - biror viewdan olib kelingan ma'lumotlarni physical copysi xisoblanib, ular alohida tableda saqlanadi.

Real life examples
Tabledan qanday ma'lumotlarni select qilsangiz viewdan ham shunday qilasiz ammo farqi view sizga uzundan-uzun va complex querylarni qayta yozib o'tirmasligingiz uchun juda katta yordam beradi. Misol uchun E-commerce website yasasangiz, customerlarga buyurtma va yetkazib berish uchun alohida-alohida saqlangan ma'lumotlarni birlashtirib single view orqali chiqarib berishingiz mumkin. Bunda misollar juda ko'p.

Conclusion
Gapni indallosi sifatida, view xuddi o'zgaruvchidek gap. Siz unga queryni saqlaysiz va har safar queryni emas balkim viewni chaqirasiz, u esa sizga o'sha queryni beradi.

SELECT id, name, order_no FROM customer_view;


SELECT id, name, order_no FROM (SELECT customer.id, customer.name, orders.number AS order_no FROM customer JOIN orders ON customer.order_id = orders.id) AS customer_view;

@otabekswe
Hech qachon Senior bo'la olmaydiganlar

Har bir soxani eng zo'r mutaxasislari bo'lganidek eng yomonlari ham bo'ladi. Bunday insonlarni ajratib olish umumman qiyin emas shunchaki ularni ba'zi xislatlari ularni hech qachon rivojlanmasligini ko'rsatib beradi. Keling ularni birma-bir sanab nima uchun bunday xulosaga kelganimni aytib beraman.

1. Google qilishni bilmaydiganlar - Internetda hozirda oddiy va suyqasi chiqib ketgan savollarga ming xil javob olishingiz mumkin. Agar siz "JavaScript nima?" "For loop qanday ishlaydi?" kabi savollarni odamlardan so'rayotgan bo'lsangiz tabriklayman, siz shu insonlar qatoriga kirdingiz.

2. Unutuvchilar - Kechagi xatosi, o'rgangan mavzusi yoki nima bo'lsa ham uni tez unutsa demak bu toyifa ham rivojlanmaydi. "Qonunlar qon bilan yozilgan" degan naql bor. Ya'ni ba'zi qonunlarni bilmasangiz yoki unutsangiz qon to'kishingizga to'g'ri keladi. Unutmaslik uchun esa ko'proq yaxshiroq izlanib amaliyot qilish juda zarur.

3. Ma'suliyatsizlar - Har bir odamni jamoada o'z ma'suliyati va majburiyatlari bo'ladi. Ulardan qochish, yaqinlashmaslik yoki yechim qidirmaslik tajribadan quruq qolish bilan barobar. Bir kunmas-bir kun agar sizni hech kim jamoaga qo'shishni xohlamasa xafa bo'lmang, chunki siz ma'suliyatsizlik qilasiz va hech kim sizga nimadirni ishonib topshirgisi kelmaydi.

4. Taqqoslovchilar - Tez-tez language, framework yoki toolarni bir-biri bilan solishtirib yomonlovchilarni eshitib qolamiz. Bu ham shunday dasturchilardan dalolat. Computer Science olamida qurollar juda ko'p ammo eng qulayidan foydalanish dasturchiga borib taqaladi. Nima uchun Google C++, Java ni ko'proq ishlatishini sababi ular boshqalariga qaraganda ulardagi muammoga ko'proq, efficientroq yechim deb topilgani uchun. Ko'p ish yoki kam ish deb ajratish ham yomon, btw.

5. General bilmlardan qochuvchilar - Faqat dasturlash tili, frameworkga bog'lanib qoladigan va umumiy bilimlarni o'rganmaydiganlar ham shu insonlar safida bo'ladi. Umumiy bilimlar aslida bu narsalar nima, qachon va qayerda to'g'ri ishlatish mumkinligini sizga o'rgatadi. Muammoga turli-xil prespectivedan qarash imkonini beradi. "Ularni qayerdan o'rganaman?" deysizmi, albatta kitoblardan. Demak xulosa kitob o'qimaydiganlar ham pro bo'la olmaydi.

Bu postni ko'pchilik xatto o'qimaydi ham, o'qisa ham bir kunmas-bir kun esdan chiqaradi. Ammo maqsadim 2ta odam o'qisa ham ularga katta ta'sir qilib zo'r rivojlanishsa men roziman.

P.S: Fikrlar o'ta subyektiv va ba'zilari (balkim barchasi) noto'g'ri bo'lishi mumkin. Let me know if am wrong!

@otabekswe
How Database Stores Data

Database internally ma'lumotlarni Heap file ichiga saqlab boradi. Har bir row esa item (tuple) ko'rinishida bo'ladi. Heap file esa bir nechta pagelardan iborat bo'ladi va har bir page qanchadir miqdordagi (rowlar) ma'lumotlar saqlanadi. Ya'ni bizda bitta table bor degani bu bizda o'sha tabledagi ma'lumotlarni saqlash uchun heap file bor degani. Heap file ichida esa bir nechta page(block)lar ham bo'ladi.

Endi tasavvur qiling, kimda age > 30 bo'lsa barcha ma'lumotlarni taqdim qilishini so'radik. PostgreSQL kimni yoshi nechidaligini bilmaydi, shuning uchun avval u barcha rowlarni RAMga olib keladi va list shakliga olib o'tadi (majoziy ma'noda list deyildi). Endi shu listdan har bir rowni birma-bir kirib tekshiradi va kimda age > 30 bo'lsa o'shalarni olib qaytaradi. Hop ammo bu yerda katta minus bor. Agar tasavvur qiling bizda rowlar soni millionlab bo'lsachi, ma'lumotlarni RAMga olib kelish juda qimmatga tushadi.

Xulosa: Bu juda qisqacha ta'rif bo'ldi ammo ko'proq o'rganish uchun esa ushbu manbadan ko'rib chiqishingiz mumkin:
- storage page layout

@otabekswe