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 abcde
database'da juda ko'p ma'lumot bor (row). Lekin ularni hammasini strukturasi bir xil. O'shalarni bitta table da saqlagan yaxshimi yoki bir nechta table da saqlagan yaxshimi? Yoki farqi yo'qmi?
Forwarded from abcde
hammasini bitta table da saqlasak, har safar fetch qilganda ularni hammasini emas, filter qilib ma'lum bir qismini olsak tezlikda o'zgarish bo'lmaydimi?
Forwarded from Bobosher Musurmonov
Yaxshi savol.

Querylarning "kayfiyat"iga qarab ba'zi yechimlarni sinab ko'rish mumkin:

1. Indexing. Querylarni analiz qilib ko'ring. Shunga qarab kerakli columnlarga indexlar qo'shing. Agar zarur bo'lsa non-key value attach qiling.

2. Pagination(PostgreSQL)

3. Agar indexing yetarlicha natija bermasa sal murakkabroq usulni sinab ko'ring: Horizontal partitioning.
Bu usul katta tableni bir nechta kichik tablelarga bo'lishdan iborat.

4. Partial indexing. Google qilib ko'ring. Lekin bu usul implement qilishga qiyinroq va ehtiyot bo'lib ishlatmasangiz teskari natija berishi mumkin.
Upd: Partial indexing orqali siz kutgan natijani olish qiyinroq.
Bo'pti, bu variantni chiqarib tashlang.


P.S. Yuqoridagilarning har birida pros&cons bor.
Forwarded from Diyorbek
yangi yangilik qo'shilganini qanday bilib olaman?
Forwarded from Bobosher Musurmonov
Databasega event trigger qo'shing.
Shunda har safar databasega bog'liq biror oparation bajarilganda(CREATE, UPDATE, ...) trigger o'zidan "signal" chiqaradi. O'sha signalni tutib olib, xohlagan ishingizni qilishingiz mumkin.

Boshqacha, soddaroq yo'llari ham bor. Masalan, har safar saytdagi har bir post databaseda bor-yo'qligini tekshirish. Lekin bu yaxshi fikr emas, ayniqsa databaseda minglab postlar bo'lsa.
Forwarded from Bobosher Musurmonov
Django bilan ishlab ko'rganlar django signalsdan xabardor bo'lsa kerak. Bu ham event trigger bilan bir xil vazifa bajaradi. Faqat django signals ORM levelda implement qilingan.
Forwarded from SanjarbekHabibov
#savol#savol djangoda qilingsan web saytlar bor 50 60ta ularni hammasiga bir xil ma'lumot qoshiladi. shu saytlarga bitta bitta yangilik qoshmasdan birdaniga hammasiga qoshiladigan qilsa boladimi
Forwarded from Bobosher Musurmonov
Message queue ishlating.
Forwarded from SanjarbekHabibov
bazalari bir bolishi kerakmi shunda aytilgandaqa
Forwarded from Bobosher Musurmonov
Yo'q, shart emas.
Pub/sub pattern ishlatasiz.
Ya'ni bitta service o'ziga yangilik qo'shilganda buni queuega e'lon qiladi(publish). Queuega "obuna"(subscribe) qilgan boshqa servicelar bundan xabar topadi va ular ham newsni o'zidagi databasega qo'shib qo'yadi.
Forwarded from Bobosher Musurmonov
Bu xuddi telegramdagi kanallarga o'xshash. Kanal admini yangi post qo'shsa kanaldagi obunachilar bundan xabar topadi va shunga qarab ish qiladi.
@all_about_django_uz
Bu yerda django bo'yicha yaxshi ma'lumotlar topishingiz mumkin.
Forwarded from Bobosher Musurmonov
Savol ozgina noto'g'ri bo'ldi.
Umumiy javob:
GET va POST requestda ham serverga ma'lumot yuborish mumkin.

Farqi:
POST requestda yuborilganda data requestning body qismida, zarur bo'lsa, shifrlangan holda yuboriladi.
Shuning uchun sensitive data, ya'ni shaxsiy ma'lumotlar, parollar,... POST request tarkibida yuboriladi. Requestni kimdir yo'lda tutib olsa ham, ma'lumotni qo'lga kiritish uchun deshifr qilish kerak bo'ladi.

GET requestda esa umuman, body qismining o'zi yo'q. Shuning uchun ma'lumot urlning tarkibida, parameter sifatida o'tadi.
Bu usul bilan asosan, muhim bo'lmagan, elementar ma'lumotlarni serverga uzatishda foydalaniladi.
Masalan, pagination yoki search queryda.
Data URL tarkibida shunchaki ochiq turgani uchun sensitive datani yuborsangiz, requestni tutib olgan kishi ochiq ma'lumotni qo'lga kirita oladi.
Forwarded from Bobosher Musurmonov
#py
a = [1, 2, 3]
b = a
c = a.copy()
a[2] = 4
print(a, b, c)
Forwarded from Hops
Natija
[1, 2, 4] [1, 2, 4] [1, 2, 3]
Bobosher Musurmonov
#py a = [1, 2, 3] b = a c = a.copy() a[2] = 4 print(a, b, c)
Subscriberlar orasida ozgina skill share qilamiz.
Yuqoridagi kod(va natija)ni explain qilmoqchi bo'lganlar, marhamat, commentda fikr qoldiring.
Forwarded from Bobosher Musurmonov
Celery bu task queue.
Ma'lum tasklarni aytilgan vaqtda bajarib turadi.
Deylik, sizda bir qancha user bor va har kuni soat 8:-00 da har bir userga email jo'natishingiz kerak.
Agar buni asosiy threadga yuklab qo'ysangiz, u boshqa ishlarn qila olmaydi. Har kuni aytilgan vaqtda aytilgan ishni qiladi va qolgan vaqt faqat kutadi. Dasturingizning qolgan qismi ishlamaydi(sababi, u faqat kutayapti), ya'ni thread blokanadi.

Celery esa mana shunday vaziyatlarda yordamga keladi. Bajarishi kerak bo'lgan taskni alohida yozib, uni celeryga schedule qilib qo'ysangiz bo'ldi. Dasturning boshqa qismlariga halaqit bermasdan aytilgan tartibda ishlayveradi.


Redis bu in-memory database. Ya'ni ma'lumot saqlaydi, faqat, odatiy DBMS(masalan, PostgreSQL)larga o'xshab disk, ya'ni doimiy xotirada emas, memory, ya'ni RAMda saqlaydi.
In-memory database haqida bu yerda qisqacha aytganman.
RAM bilan ishlash diskka nisbatan ancha tez bo'lgani uchun tezlik muhim joylarda ishlatiladi. Masalan, caching yoki real-time chat.

Hozir RedisLabs Redisni faqat in-memory database sifatida emas, boshqa maqsadlarda ishlatishni ham taklif qilayapti. Ko'p yangi imkoniyatlar qo'shilayapti. Saytidan batafsil ko'rishingiz mumkin.
👍1