Engineering Notes
Open in Telegram
Kanalda asosan backend engineeringga oid postlar yozib boriladi. Ba'zi postlarda xatoliklar bor. Postlar foydali boβlgan boβlsa adminni duo qilib qoβying. Rahmat. Contact: @Bobosher_Musurmonov LinkedIn: https://www.linkedin.com/in/bobosher-musurmonov
Show more2 578
Subscribers
+524 hours
+77 days
+3030 days
Posts Archive
2 577
Repost from Programmer Humor
[Meme] No Title needed...
https://redd.it/swtznj
by @programmer_humor
2 577
Netflixning backend arxitekturasini ko'rgandim, juda aqlli ishlab chiqilgan.
Hozir esa frontend qismini ko'rib yana bir marta qoyil qoldim.
Inshaalloh, bir kun kelib Netflixda ishlashni niyat qildim.
Ko'rib chiqishni tavsiya qilaman:
https://youtu.be/MxFt3YsjyQg
2 577
Mana haqiqiy daraja o'rtoqlar.
Dasturlashni kasb emas, san'at deb qabul qiladiganlarni ko'rsam maza qilaman ))
https://youtu.be/k13LpTPdxt4?t=767
2 577
Well, most of the time you wanna retrieve data from more than one table. In that case, you need an efficient way to play with more than just one model.
Let's say you have a Book model that has a ForeignKey relationship to Author model. You wanna get information about all books and their authors in a single view.
Let's say you have n books. You'll get all Book objects with a single DB query via Book.objects.all() queryset.
But each time you ask for the author of a book, django makes another DB query to retrieve information about the author of this book. In total, django performs n+1 queries: 1 query to get all the books and n queries to get authors of n books. This is what they call n+1 problem.
This is where prefetch_related() and select_related() come into the picture.
They have different purposes and they work differently.
1. select_related() simply makes a SQL JOIN for each selected relationship in a model. In simple words, you'll get data from multiple tables within a single query. For the example above, it joins the author table to the book table with book.author_id = author.id condition.
Instead of n+1 queries, you'll make 1 complex query to retrieve all the necessary data.
select_related() is limited to a single relationship level. This means, it can be used for first-level one-to-one and many-to-one relationships. If you have this kinda relationship:
Book -> Author -> User,
You cannot get data in User model from Book, because they don't have a direct relationship between them.
2. prefetch_related() is designed for more than 1 level relationship (like Author, Book, User example). Since it's not a direct relationship, you cannot make a SQL JOIN here. What prefetch_related() does is simply doing a separate query for each relationship, but all in a single batch.
You might be wondering then how it could be different from the usual way, if still it makes a separate query for each relationship. For example, if you loop through all the books and access to its author, django makes a query at the moment where you ask for it, which kills the performance. On the other hand, a queryset using prefetch_related fetches all the necessary data when you ask for all the books and author will be already there when you ask for them.
Since many-to-many relationship is technically combination of 2 foreignkeys, you cannot use select_related() with them. Here what you need is prefetch_related().
2 577
#question
What are prefetch_related() and select_related() in django querysets and how they work?
2 577
Yaxshi maqola ekan, vaqt topib o'qib chiqsangiz, eng kamida hali Pythondagi ko'p narsadan xabaringiz yo'qligini tushunasiz ))
https://realpython.com/python-memory-management/
2 577
Maqola yozish uchun yaxshi mavzular o'ylab yuribman, lekin vaqt ajratish muammo bo'layapti.
Inshaalloh, yaqin kunlarda database bo'yicha yangi maqola chiqadi.
2 577
#yaxshi_savol
Serverga kelayotgan requestlarni bitta web application instance ko'tara olmay qolganda load balancingga ehtiyoj tug'iladi.
Oddiy tushuntirganda, hamma requestni bitta instancega yuborish o'rniga, bir qancha instancelar ishga tushirib, requestlarni ularning orasida taqsimlab berish.
Load balancingning ham turlari bor.
Backend developmentda eng keng tarqalganlari layer 7 va layer 4 load balancing. Ya'ni, OSI modelining yettinchi (application) va to'rtinchi (transport) qavatida turib taqsimlash.
Savol: L7 va L4 load balancerlarning har birining qanday yaxshi va yomon taraflari bor?
Javoblarni iloji boricha batafsil yozib, discussionda qoldirishingiz mumkin.
2 577
#yaxshi_savol
PostgreSQL bilan ishlaganda, deylik siz bir ma'lumotni UPDATE yoki DELETE qildingiz.
Lekin shu vaqtning o'zida eski qiymat ham tabledan o'chib ketmaydi.
Masalan, sizda
id INT, name VARCHAR
columnlaridan iborat persons table bor.
Deylik, unda 1 ta row: (1, 'John') bor.
Keyin siz uni yangiladingiz:
UPDATE persons
SET name = 'Doe'
WHERE id = 1;
Yoki o'chirib yubordingiz:
DELETE FROM persons
WHERE id = 1;
Lekin ikki holda ham eski qiymat, ya'ni (1, 'John') xotiradan o'sha vaqtning o'zida o'chib ketmaydi.
Savol: Eski qiymatlarni xotirada vaqtinchalik saqlab qolish nima uchun kerak va buning qanday negativ natijalari bo'lishi mumkin?
Javoblarni iloji boricha batafsil yozib, discussionda qoldirishingiz mumkin.2 577
#yaxshi_savol
Avval web development yaxlit bitta soha edi. Keyin ikki asosiy qism: frontend va backendga ajraldi. Qizig'i, aslida bu qismlar abstrakt emas, nisbiy. Biz biladigan frontend va backend butun boshli web applicationga nisbatan olingan.
Web applicationning bir qismi uchun ham frontend va backend qismlari bor. Masalan, backend web serverning frontend qismi bu API.
Endi savol.
Biz biladigan web backendning o'zi uchun ham backend qismi bor. Bu nimaligini ko'pchilik biladi. Qizig'i, o'sha qismning ham frontend va backend qismlari bor.
Siz kommentlarda shu backend, ya'ni web backendning backend qismining backend qismi nimaligini ayting.
Iloji bo'lsa, batafsilroq javob qoldiring. U nima, nega kerak, qanday ishlaydi, qanday turlari bor va hokazo.
P.S. Tanishlarga ham share qilsangiz xursand bo'lardim.
2 577
Shunaqa savollar bo'ladi-ki, u savollarga javob topish orqali ko'p narsa o'rganmasligingiz mumkin, lekin hali o'rganishingiz kerak bo'lgan ko'p narsani bilib olasiz.
Hozir bir fikr kelib qoldi. Vaqti-vaqti bilan kanalda #yaxshi_savol tagi bilan savollar joylab turaman. Lekin javob bermayman.
Hamma commentda o'z javobini qoldirishi mumkin (batafsil va hammaga tushunarli formatda bo'lsa juda yaxshi).
Kuzatuvchilar (hozircha) ko'p bo'lmasa ham orangizda kattagina xalqaro kompaniyalarda ishlaydigan dasturchilar bor.
Sizlardan o'z bilimingizni commentlarda ulashishingizni so'rab qolardim. Bu endi boshlaganlar uchun foydali bo'ladi deb o'ylayman.
Boshladik, inshaalloh.
2 577
Ba'zi kanal kuzatuvchilari nimaga postlar kamayib qolgani haqida so'rashayapti.
Sababi oddiy. Ko'p post bo'lishi uchun ko'p qiziqarli savol kerak. Savollar esa asosan communitydan keladi. Communityda faol bo'lish uchun esa yetarlicha bo'sh vaqt kerak. Ana shu vaqt hozir menda muammo. Lekin shaxsiyda berilayotgan savollarga maksimal javob berishga harakat qilayapman.
2 577
Repost from Π Π°Π±ΠΎΡΠ° Π½Π° Python Π² Π£Π·Π±Π΅ΠΊΠΈΡΡΠ°Π½Π΅ | O'zbekistondagi Python bo'yicha vakansiyalar
Newmax Technologies - ΡΡΠΎ Ρ
ΠΎΠ»Π΄ΠΈΠ½Π³ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ²ΡΡ
IT ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΊΠ°ΠΊ My Taxi, Express 24, Workly, Max Track Π² ΠΏΠΎΠΈΡΠΊΠ°Ρ
Junior Back-end ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡ My Taxi.
ΠΡ ΠΈΡΠ΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠ°, ΠΆΠ΅Π»Π°ΡΡΠ΅Π³ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡΡΡ Π² Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Back-end ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΡΠ»ΠΈ Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΠ°Π±ΠΎΡΠ°Ρ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ
, Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠΎΠΉ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ β ΡΠΌΠ΅Π»ΠΎ ΠΎΡΠΊΠ»ΠΈΠΊΠ°ΠΉΡΠ΅ΡΡ Π½Π° Π²Π°ΠΊΠ°Π½ΡΠΈΡ.
ΠΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ:
- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΠΆΠ΅ ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎΡΡ;
- ΠΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΠΈ ΠΈ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΡΠΈΡΡΠ΅ΠΌΡ Π½Π° Π²ΡΠ΅Ρ
ΡΡΠΎΠ²Π½ΡΡ
.
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
- ΠΠ½Π°Π½ΠΈΠ΅ Python (Django);
- ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² RESTful API/gRPC, Microservices;
- ΠΠ MySQL, ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ;
- ΠΠΏΡΡ ΡΠ°Π±ΠΎΡΡ Ρ git;
- Π‘Π²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅ ΡΡΡΡΠΊΠΈΠΌ ΡΠ·ΡΠΊΠΎΠΌ, Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΠΌ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΡΠ΅Π½ΠΈΡ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ;
- ΠΠΎΠ»ΡΡΠΈΠΌ ΠΏΠ»ΡΡΠΎΠΌ Π±ΡΠ΄ΡΡ DevOps Π½Π°Π²ΡΠΊΠΈ, ΠΎΠΏΡΡ ΡΠ°Π±ΠΎΡΡ Ρ API ΠΏΠ»Π°ΡΡΠΆΠ½ΡΡ
ΡΠΈΡΡΠ΅ΠΌ.
Π£ΡΠ»ΠΎΠ²ΠΈΡ:
- ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΡΠ΄ΠΎΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΏΠΎ Π’Π Π Π£Π·;
- ΠΡΠ°ΡΠΈΠΊ ΡΠ°Π±ΠΎΡΡ 5/2, 09:00-18:00;
- ΠΡΠΈΡ Π² ΡΠ΅Π½ΡΡΠ΅ Π³ΠΎΡΠΎΠ΄Π° (ΠΏΠ°ΡΠΊ ΠΠΎΠ±ΡΡΠ°, Π Π°ΠΊΠ°Ρ ΠΌΠ°Ρ
Π°Π»Ρ, Π’Π Π¦ Next);
- ΠΠ°ΡΠ°Π±ΠΎΡΠ½Π°Ρ ΠΏΠ»Π°ΡΠ° ΠΎΡ 2 000 000 Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ
- ΠΠΎΠ½ΡΠ°ΠΊΡΠ½ΠΎΠ΅ Π»ΠΈΡΠΎ: @alishermusurmonov
π @uzpythonjobs
2 577
JR:
Mikroservislar yomon. Ular boshqa yaxshiroq variant yo'qligi uchun ishlatilayapti.
Men:
Shu "boshqa yaxshiroq variant yo'qligi sabab" degan joyini "an'anaviy variantlar (ba'zi vaziyatlarda) ish bermagani sabab" ga o'zgartirsak, qiziq narsalar chiqadi:
Mikroservislar nega yaratildi?
An'anaviy variantlar(monolith) ish bermay qolgani sabab.
O'zi komputerlar nega yaratildi?
An'anaviy hisoblash usullari ish bermay qolgani sabab.
Miltiq nega yaratildi?
An'anaviy usullar(qilich) ish bermay qolgani sabab.
G'ildirak nega yaratildi?
An'anaviy usullar(sudrash) ish bermay qolgani sabab.
Ana shunaqa gaplar...
P.S. Bunaqa faylasufona gaplar qayerdan keldi, bilmaymanπ
