Engineering Notes
2.57K subscribers
149 photos
5 files
217 links
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
Download Telegram
Forwarded from Bobosher Musurmonov
Agar rps katta bo'lmasa, ikkala usul ham deyarli bir xil ishlaydi.
Va har bitta queryga alohida connection qilish nisbatan xavfsizroq, sababi agar query xatolik chiqarsa try except bloki bilan uni bartaraf qilib boshqa connection ochib ishlataverish mumkin.
Bitta connection bilan ishlaganda agar birorta query "tiqilib" qolsa ko'proq muammo keltirib chiqarishi mumkin.
Forwarded from Bobosher Musurmonov
Database va table nomlarini qolganlarga ko'rsatish yaxshi odat emas :-)
P.S. Queryda f string ishlatish ham. Har qanday holatda.
👍2
Forwarded from Хусниддин
ha fikringiz, gapingiz to'g'ri ammo botlardan botning serveri haqidagi(ip, filelar) ma'lumotlarni ololmaysizku! Iloji yoq buni!(agar dasturchi xato qilib qoymasa)
Forwarded from Bobosher Musurmonov
Botlar haqida ko'p narsa bilmayman.
Balki, haqdirsiz. Ammo securityni o'ylab qo'yish zarar qilmaydi.
Axir, insonlarning shaxsiy ma'lumotlari bilan ishlayapsiz.
Texnologiya esa har kuni rivojlanadi.
Qachondir "ilojsiz" bo'lgan narsalar navbat bilan "odatiy"ga aylanayapti.
Forwarded from Bobosher Musurmonov
Masalan, PostgreSQL bilan MySQLni Django bilan Flaskka o'xshatish mumkin.

PostgreSQL kuchli, konfiguratsiya qilish birmuncha qiyin, imkoniyatlari keng, (va shuning hisobiga) og'ir va nisbatan sekin.

MySQL esa imkoniyatlari ozgina kamroq, sozlash oson, stabil, tezkor va nisbatan yengilroq.

NoSQLni ko'pchiligini NodeJSga o'xshataman. Tezkor, lekin bosh og'rig'i ko'p.

SQLite3 boshqa masala. Imkoniyatlari juda cheklangan. Lekin sozlashdan osoni yo'q :-)
Forwarded from Bobosher Musurmonov
Bu nisbatan xavfsiz usul bo'lsada, ancha sekin ishlaydi. Sababi, har bitta query uchun alohida tcp connection o'rnatish kerak. TCP connectionni ochish uchun 3 bosqichli tcp handshake degan jarayon bo'ladi. Bu ancha vaqt oladi. Natijada bot ishlashini ancha sekinlashtiradi, ayniqsa kattaroq botlarda.
Forwarded from Bobosher Musurmonov
Va yana bir maslahat, birorta ORM o'rganish haqida o'ylab ko'ring. Masalan SQLAlchemy. Bir dunyo bosh og'rig'idan qutulasiz.
Bu gap faqat sizga tegishli emas🙂
Forwarded from Bobosher Musurmonov
Masalan, SQL query yozishingizga hojat qolmaydi.
Hammasini python orqali qilasiz.
👍2
Forwarded from Bobosher Musurmonov
ORM turiga qarab imkoniyatlari ham turlicha.
Ko'pchiligida yetarlicha xususiyatlari bor.
Va odatda, yaxshi ORM raw querydan ko'ra xavfsizligi ham yaxshiroq.
Forwarded from Bobosher Musurmonov
Docsda aytilishicha, in-memory database bilan ishlarkan. SQLite3da in-memory database bilan ishlamaganman, lekin in-memory database haqida umumiy aytaman:

Bu turdagi databaselar odatdagidek diskda(HDD, SSD) emas, to'laligicha RAMda saqlanadi. Ishlash vaqtida doimiy xotira(storage) bilan aloqa qilish va natijani kutishga hojat yo'q. Hammasi RAM va CPU o'rtasida sodir bo'ladi. Shuning hisobiga oddiy relational databasedan bir necha yuz barobar tezkor va ancha "yengil".

Odatda, SQL oilasidagi(MySQL, PostgreSQL) databaselar storageda saqlansa, NoSQL(MongoDB,...) va NewSQL(MemSQL,...) databaselar deyarli har doim memoryda saqlanadi.

Qachon ishlatiladi?

Tezligi yuqori bo'lgani uchun caching uchun keng ishlatiladi.

Real-time data bilan ishlaganda ham in-memory database yordam beradi. Masalan, hozir biz yozishib turgan telegram chat. Agar PostgreSQL ishlatilganda xabarlar bizga ancha kech yetib kelardi.

Real-time analyse uchun. Ba'zan tarmoqdagi kutilmagan holatlardan vaqtida xabar topmaslik katta muammolarni olib keladi. Masalan, DDos'ga qarshi tizim ma'lumotlarni tezkor analiz qilishi uchun oddiy MySQL juda sekin.

Kamchiliklari:

Butun ma'lumotlar bazasi RAMda saqlangani uchun oddiygina tizimning qayta yuklanishi yoki serverda elektr o'chib qolishi(😅) hamma ma'lumot yo'qotilishiga olib keladi. Buning oldini olish uchun replication qilinadi. Ya'ni in-memory databasedagi ma'lumotlar sekin-sekin storagedagi database(masalan, PostgreSQL)ga ham yozib boriladi. Agar ma'lumotlar o'chib ketsa, qattiq diskdagi nusxadan qayta tiklanadi.
👍2
Forwarded from Bobosher Musurmonov
Assalomu alaykum.
Do'stim, guruhda sizni anchadan beri kuzataman. Umuman olganda, to'xtab qolmayapsiz, har doim harakat qilayapsiz, bu juda yaxshi albatta.

Lekin e'tibor berdingizmi, borgan sari guruhda savollaringizga kamroq javob berishyapti. Negaligini o'ylab ko'rdingizmi?

Gap shundaki, siz faqat bitta manbaaga bog'lanib qolayapsiz. Dasturlashda har kuni o'nlab muammolarga duch kelasiz. Har bitta muammoni guruhdan so'rash esa yaramaydi. Bu birinchidan guruhdagilarga yoqmasa, ikkinchidan bitta manbaaga bog'lanib qolish kelajakda o'zingizga bir dunyo muammolar olib keladi.
Real projectdagi har bir muammoni guruhdan so'ramaysizku, axir.

Googling is a skill.
Siz googleni ishlata olmayapsiz. Siz docsni o'qimayapsiz. Siz stackoverflowdan javob izlamayapsiz. Vaholanki, bu xatoga duch kelgan faqat siz emas va bu savollarning 99% qismiga allaqachon javob topib, taxlab qo'yishgan. Sizning vazifangiz o'sha javoblarni izlab topish.

Yana bir narsa, django(va ko'pchilik boshqa texnologiyalar ham) shu darajada foydalanuvchi uchun qulay yozilganki, xatolik xabarida hammasi yozib qo'yilgan. Ozgina aqlni ishlatib, muammoning asl sababini topish kerak. Xatoliklarni tushunib, analiz qila olish juda muhim. Xatolikning sababini tushunish uning yarmini hal qilishga teng deyishadi. Siz esa hozircha bu narsalarga deyarli e'tibor bermayapsiz.

Umid qilamanki, tepadagilardan xulosa chiqarib, kamchiliklaringiz ustida ishlaysiz.
Mening sizga hech qanday xusumatim yo'q. Maqsadim, faqat yordam berish.
👍3
Forwarded from Bobosher Musurmonov
Djangoning o'zida ajoyib ORM borligi sabab ras query yozish yoki boshqa ORM ishlatishga hojat yo'q. Menimcha siz oldin SQLAlchemy bilan ishlagan bo'lsangiz kerak.
Django ORMda har bitta database table alohida class sifatida yoziladi va har bitta class(table) model deb ataladi(ko'pchilik boshqa ORMlardagidek).

Xuddi boshqa ORMlardagidek har bir column(field) class attribute bo'ladi.
Django ORMda ko'plab built-in field typelar bor. Xuddi databasedagi VARCHAR, INT, ... kabi.

Model classda tablening o'zi yaratiladi. Siz tepada yozgandek ma'lumot to'g'ridan to'g'ri kiritilmaydi. Masalan:

class Task(models.Model):
name = models.CharField(max_length=60)
description = models.TextField()
status = models.BooleanField(default=False)


Demak, biz Task nomli table yaratib, unga 3 ta ustun qo'shdik.

Tablega ma'lumot qo'shish esa ModelManager orqali qilinadi. Bu model classga tegishli ma'lumotlarni boshqaruvchi boshqa "nazoratchi" class.

ma'lumot olish:
task = Task.objects.get(id=2)

ma'lumot kiritish:
Task.objects.create(
name="Hello",
desc="Demo",
status=True,
)


Yoki
task = Task(
name=...
...)
task.save()



Payqagan bo'lsangiz, objects bu yerda manager. Ya'ni u class objectlarini boshqarayapti.
Forwarded from Bobosher Musurmonov
Ma'lumotlarni bir turdan boshqasiga o'tkazuvchi "adapter".

Masalan, django bilan ishlaganimizda biz deyarli hech qachon raw SQL query yozishimizga to'g'ri kelmaydi.
Biz model va model managerlar orqali hammasini Pythonda turib qilamiz. ORM esa bizning Pythondagi buyruqlarimizni analiz qilib, SQL queryga o'tkazib, databasega yuboradi.
Yoki ma'lumot olganda ham biz toza pythonda query yuboramiz. ORM uni raw queryga o'tkazib databasedan natijani oladi va natijani bizga yana python object ko'rinishida beradi.

Qisqasi, ORM dasturlash tilining o'zida turib database bilan ishlashni ta'minlaydi.
👍2
Forwarded from Bobosher Musurmonov
Asyncio texnik jihatdan single thread.
Faqat bitta event loopda bir nechta coroutinelarni yurgizadigan bitta thread ishlaydi.
Forwarded from Bobosher Musurmonov
I/O bound workloadda thread-based concurrency ishlatish unchalik ham yaxshi g'oya emas. Sababi, thread ko'p vaqtni APIdan response kutish bilan o'tkazadi.
Async-based concurrency esa o'sha vaqtdan unumli foydalanishga yordam beradi.
Assalomu alaykum, agar database engineeringga qiziqsangiz va bu sohada hali bilimingiz boshlang'ich bo'lsa, Udemyda Hussein Nasserning "Introduction to database engineering" kursini sotib olishni tavsiya qilaman. Husseinning shaxsiy saytiga kirsangiz kurs uchun promokodlar bor. $10-15 atrofida sotib olishingiz mumkin(original narxi $90 edi adashmasam).

Umuman olganda, bu yigitning Youtubededagi kanaliga qarab ko'rsangiz ham juda ko'p foydali content topasiz. O'zim ham har bitta uploadni kuzatib boraman.
👍3
Ha aytgancha, database engineering yoki, umuman, backend engineering bo'yicha savollaringiz bo'lsa @Bobosher_Musurmonov'ga yozavering. Qo'ldan kelgancha javob beraman.
👍2
Hamma OSni o'z qarichi bilan o'lchaydi 😁
P.S. Frontendchi backend dardin qaydan bilsin...
😁3
Forwarded from Bobosher Musurmonov
Bitta connectionni ma'lum sondagi transaction(yoki query)lar uchun, ma'lum vaqt uchun yoki connection ishdan chiqqunicha ham ishlatish mumkin.

Lekin har bitta transaction uchun bitta connection ochib, transaction tugagach yopish ancha xavfsiz va shu bilan birga "qimmat". Har bir connectionni ochib-yopishga vaqt ketadi. Agar qandaydir fail chiqsa keyingi transaction uchun yangi connection ishlatib ketaverasiz.

Django ORM default holda har bitta transaction uchun bitta connection ochadi.
Forwarded from Jakhongir Rakhmonov - IT
Tutorial Hell Haqida

Dasturlashni endi boshlaganingizda, yoki boshqa tilni o'rganishni boshlaganingizda, "tutorial hell"ga tushib qolishingiz ehtimolligi katta.

"Tutorial hell" o'zi nima? "Tutorial hell"da siz tekst yoki video ko'rinishida tutorial topib, ko'r ko'rona avtor nimani qilishni aytsa o'shani qilish bilan vaqt o'tkazishingiz. Ya'ni siz uchun oldindan har qadam yozib qo'yilgan. Siz shunchaki "copy and paste" qilsangiz yetarli. Dasturingiz ishlab ketaveradi.

Natijada siz o'zingizni nimadir qilgandek his qilasiz va shunday tutoriallarni topib qilishda davom etasiz. Lekin o'zi asli ko'p narsa o'rganmagan bo'lasiz. Har bir qadamda sizga nima qilishni aytib turishlariga o'rganib qolasiz va oddiygina dastur yaratish so'ralsa qiynalib qolishingiz mumkin. Qo'pol qilib aytganda "tormoz" bo'lib qolshingiz mumkin.

Tanish holatmi?

Iloji boricha bu holatdan chiqishingiz kerak. Qanday qilib? O'zingiz qandaydir dasturcha qilishdan boshlang. Tutoriallarga qaramang. Har bir "feature"ni o'zingiz oldindan o'ylab, qurishga harakat qiling. Qo'pol qilib aytganda miyani ishlating. Shundagina sizda dasturlash skillari rivojlanadi. Ishga kirganda sizga har bir qadamni aytishga majbur bo'lishsa siz juniordan uyog'iga o'tolmaysiz.

Tajriba yo'q bo'lib qanday dasturlar qurish mumkinligi haqida oldinroq gaplashgandik.

@jakhonrakhmon
👍2