Forwarded from Python BackendHub
با این اپلیکیشن دقیقا میتونید متوجه شین که چه اتفاقی داره میفته.
مثلا یک برنامه دارین (پایتونی یا هرچی) و هر درخواستی که از سیستم عاملتون رد شه چه HTTP باشه چه HTTPS رو کامل capture میکنه و به صورت plain خیلی تمیز بهتون نشون میده.
مثلا یک برنامه دارین (پایتونی یا هرچی) و هر درخواستی که از سیستم عاملتون رد شه چه HTTP باشه چه HTTPS رو کامل capture میکنه و به صورت plain خیلی تمیز بهتون نشون میده.
👍6
Forwarded from کانال دانشجویان آیزیلِرن (Ahmad)
This media is not supported in your browser
VIEW IN TELEGRAM
🔸 مفهوم Comprehensions قطعه کدهایی قدرتمند در پایتون (معرفی)
🙋🏽♂️ خیلی وقتها کدهای افراد باتجربه توی پایتونو نگاه میکنیم میبینم که برای ایجاد sequence؛ لیست، دیکشنری، سِت، از یه روش خاصی استفاده میکنند که کدشون بهینهتر، خواناتر و خلاصهتر میشه! اسم این روشcomprehension هست!
🔸 ما توی دوره صفر تا قهرمانیِ پایتون از آیزیلرن یاد میگیریم چطور انواع comprehensions رو با مثال توی کدهامون پیادهسازی کنیم.
--------------------
🔗 وبسایت : آیزیلرن
🙋🏽♂️ خیلی وقتها کدهای افراد باتجربه توی پایتونو نگاه میکنیم میبینم که برای ایجاد sequence؛ لیست، دیکشنری، سِت، از یه روش خاصی استفاده میکنند که کدشون بهینهتر، خواناتر و خلاصهتر میشه! اسم این روش
🔸 ما توی دوره صفر تا قهرمانیِ پایتون از آیزیلرن یاد میگیریم چطور انواع comprehensions رو با مثال توی کدهامون پیادهسازی کنیم.
--------------------
🔗 وبسایت : آیزیلرن
👍3🔥2❤1
Forwarded from Ninja Learn | نینجا لرن
💎 عملیاتهای IO Bound و CPU Bound در جنگو 💎
امروز میخوایم درباره عملیاتهای IO Bound و CPU Bound صحبت کنیم و اینکه این دو نوع عملیات چطور روی عملکرد اپلیکیشنهای جنگو تاثیر میذاره.
حالا IO Bound چیه؟ 🤔
عملیاتهای IO Bound به کارهایی اشاره دارن که بیشتر زمانشون صرف ورود و خروج دادهها میشه. مثلاً وقتی داریم با دیتابیس، فایلها یا شبکه کار میکنیم. این نوع عملیات معمولاً منتظر میمونن تا دادهها از دیسک یا شبکه بیاد.
مثالهایی از IO Bound:
- خوندن و نوشتن در دیتابیس
- ارسال یا دریافت دادهها از API
- بارگذاری فایلها
حالا CPU Bound چیه؟ 🧠
عملیاتهای CPU Bound به کارهایی اشاره دارن که بیشتر زمانشون صرف محاسبات سنگین میشه. یعنی برای پردازش و محاسبات نیاز به قدرت پردازشی بالا دارن. در اینجا عملکرد CPU نقش کلیدی رو ایفا میکنه.
مثالهایی از CPU Bound:
- پردازش تصاویر و ویدئوها
- انجام محاسبات ریاضی پیچیده
- اجرای الگوریتمهای پیچیده
تفاوتهای اصلی بین IO Bound و CPU Bound 🔍
1⃣ مدت زمان انتظار:
-عملیات های IO Bound معمولاً منتظر ورود و خروج دادهها هستن و زمان زیادی رو صرف این کار میکنن.
- عملیات های CPU Bound بیشتر زمانشون رو برای پردازش و محاسبات صرف میکنن.
2⃣ تکنیکهای بهینهسازی:
- برای عملیاتهای IO Bound میتونی از Async و Threading استفاده کنی تا زمان انتظار رو کاهش بدی.
- برای CPU Bound باید به سراغ Multiprocessing بری تا بتونی از چند هسته CPU به طور همزمان استفاده کنی.
چطور در جنگو با اینها کار کنیم؟ 🚀
- برای IO Bound:
میتونی از
- برای CPU Bound:
میتونی از ماژول
جمعبندی 🎯
درک تفاوتهای بین IO Bound و CPU Bound میتونه بهت کمک کنه تا اپلیکیشنهای جنگو رو بهتر بهینهسازی کنی. اگه عملیاتهای IO Bound داری، از async استفاده کن و اگر CPU Bound هستن، برو سراغ multiprocessing.
امید وارم مفید بوده باشه :)
@ninja_learn_ir
امروز میخوایم درباره عملیاتهای IO Bound و CPU Bound صحبت کنیم و اینکه این دو نوع عملیات چطور روی عملکرد اپلیکیشنهای جنگو تاثیر میذاره.
حالا IO Bound چیه؟ 🤔
عملیاتهای IO Bound به کارهایی اشاره دارن که بیشتر زمانشون صرف ورود و خروج دادهها میشه. مثلاً وقتی داریم با دیتابیس، فایلها یا شبکه کار میکنیم. این نوع عملیات معمولاً منتظر میمونن تا دادهها از دیسک یا شبکه بیاد.
مثالهایی از IO Bound:
- خوندن و نوشتن در دیتابیس
- ارسال یا دریافت دادهها از API
- بارگذاری فایلها
حالا CPU Bound چیه؟ 🧠
عملیاتهای CPU Bound به کارهایی اشاره دارن که بیشتر زمانشون صرف محاسبات سنگین میشه. یعنی برای پردازش و محاسبات نیاز به قدرت پردازشی بالا دارن. در اینجا عملکرد CPU نقش کلیدی رو ایفا میکنه.
مثالهایی از CPU Bound:
- پردازش تصاویر و ویدئوها
- انجام محاسبات ریاضی پیچیده
- اجرای الگوریتمهای پیچیده
تفاوتهای اصلی بین IO Bound و CPU Bound 🔍
1⃣ مدت زمان انتظار:
-عملیات های IO Bound معمولاً منتظر ورود و خروج دادهها هستن و زمان زیادی رو صرف این کار میکنن.
- عملیات های CPU Bound بیشتر زمانشون رو برای پردازش و محاسبات صرف میکنن.
2⃣ تکنیکهای بهینهسازی:
- برای عملیاتهای IO Bound میتونی از Async و Threading استفاده کنی تا زمان انتظار رو کاهش بدی.
- برای CPU Bound باید به سراغ Multiprocessing بری تا بتونی از چند هسته CPU به طور همزمان استفاده کنی.
چطور در جنگو با اینها کار کنیم؟ 🚀
- برای IO Bound:
میتونی از
async
و await
استفاده کنی تا درخواستها به صورت غیر همزمان انجام بشن و سرعت اپلیکیشن بالا بره.- برای CPU Bound:
میتونی از ماژول
concurrent.futures
و ProcessPoolExecutor
استفاده کنی تا کارهای سنگین رو در چند پروسه اجرا کنی.جمعبندی 🎯
درک تفاوتهای بین IO Bound و CPU Bound میتونه بهت کمک کنه تا اپلیکیشنهای جنگو رو بهتر بهینهسازی کنی. اگه عملیاتهای IO Bound داری، از async استفاده کن و اگر CPU Bound هستن، برو سراغ multiprocessing.
#iobound #cpubound #python #django
👍18👎1
Forwarded from جنگولرن
Media is too big
VIEW IN TELEGRAM
✅مصاحبه علی بیگدلی با من در مورد فروشگاه اینترنتی با جنگو
توی این ویدئو یک مصاحبه با مهندس علی بیگدلی پیرامون طراحی یک فروشگاه اینترنتی با جنگو داشتم.
علی بیگدلی من رو به عنوان یک برنامه نویس با تجربه انتخاب کرده بود. و سوالات خودش رو از من پرسید.
سعی کردم تا جایی که دانش دارم جواب بدم.
امیدوارم از این ویدئو چیزی یاد بگیرید.
لینک آپارت:
https://www.aparat.com/v/kuocju0
لینک یوتیوب:
در حال آپلود
لینک مکتب خونه
توی این ویدئو یک مصاحبه با مهندس علی بیگدلی پیرامون طراحی یک فروشگاه اینترنتی با جنگو داشتم.
علی بیگدلی من رو به عنوان یک برنامه نویس با تجربه انتخاب کرده بود. و سوالات خودش رو از من پرسید.
سعی کردم تا جایی که دانش دارم جواب بدم.
امیدوارم از این ویدئو چیزی یاد بگیرید.
لینک آپارت:
https://www.aparat.com/v/kuocju0
لینک یوتیوب:
در حال آپلود
لینک مکتب خونه
👍6❤2
✅ویدئوی آموزشی برخی از دستورات SQL
لینک:
https://www.aparat.com/v/gdmmamx
توی این قسمت در مورد مفاهیم زیر صحبت کردیم:
✔️نکات مربوط به استفاده از کلید اصلی ترکیبی
✔️نکات دستور delete
✔️نکات دستور update
✔️اجرای کوئری های مختلف select
✔️نکات مرتب سازی رکوردها
✔️نکات مربوط به group by
✔️نکات مربوط به join دو جدول با هم
✔️نکات مربوط به ضرب دکارتی در join جدول ها بدون where
این ویدئو رو برای معلم های هنرستان و درس توسعه برنامه سازی و پایگاه داده ساختم.
اما چون مفاهیم ش کلی هست به درد همه میخوره.
لینک:
https://www.aparat.com/v/gdmmamx
توی این قسمت در مورد مفاهیم زیر صحبت کردیم:
✔️نکات مربوط به استفاده از کلید اصلی ترکیبی
✔️نکات دستور delete
✔️نکات دستور update
✔️اجرای کوئری های مختلف select
✔️نکات مرتب سازی رکوردها
✔️نکات مربوط به group by
✔️نکات مربوط به join دو جدول با هم
✔️نکات مربوط به ضرب دکارتی در join جدول ها بدون where
این ویدئو رو برای معلم های هنرستان و درس توسعه برنامه سازی و پایگاه داده ساختم.
اما چون مفاهیم ش کلی هست به درد همه میخوره.
👍5
Forwarded from آکادمی دکتر مسفروش (Ali Mesforush)
http://tiny.cc/Mes_Academy
سلام.
دورههای آموزشی رایگان زیر در ۸ سال گذشته توسط من تهیه شده است که میتواند برای دانشجویان علوم پایه، فنی و مهندسی و علوم کامپیوتر مفید باشد.
تلاش من بر این بوده است که برای درسهای دانشگاهی تمام سرفصل مصوب وزارت علوم رعایت شود و درسها به شکل پایهای و اصولی آموزش داده شوند.
با توجه به شروع سال تحصیلی جدید سپاسگزار خواهم شد اگر این پست را باز نشر (Repost) فرمایید.
۱- آموزش رایگان ریاضی پیشدانشگاهی، ویژه نودانشجویان
http://tiny.cc/Mes_PreMath
۲- آموزش رایگان ریاضی عمومی یک مهندسی
http://tiny.cc/Mes_Calculus1
۳- آموزش رایگان ریاضی عمومی ۲ مهندسی
http://tiny.cc/Mes_Calculus2
۴- آموزش رایگان معادلات دیفرانسیل رشتههای مهندسی
http://tiny.cc/Mes_ODE
۵- دوره تست معادلات دیفرانسیل
http://tiny.cc/Mes_ODETest
۶- آموزش رایگان ریاضی مهندسی
http://tiny.cc/Mes_EngMath
۷- آموزش رایگان محاسبات عددی ویژه دانشجویان رشتههای مهندسی
http://tiny.cc/Mes_Mohasebat
۸- آموزش رایگان احتمال مهندسی
http://tiny.cc/Mes_Probabilty
۹- آموزش رایگان کار و برنامهنویسی با MATLAB
http://tiny.cc/Mes_Matlab
۱۰- آموزش رایگان Maple
http://tiny.cc/Mes_Maple
۱۱- آموزش رایگان برنامهنویسی با Python
http://tiny.cc/Mes_Python
۱۲- آموزش رایگان برنامهنویسی پایتون (کلاس درس)
http://tiny.cc/Mes_PythonClass
۱۳- مبانی کامپیوتر با پایتون ۳
http://tiny.cc/Mes_Mabani
۱۴- آموزش رایگان Numpy, Scipy
http://tiny.cc/Mes_Numpy
۱۵- آشنایی با یادگیری ماشین
http://tiny.cc/Mes_ML
۱۶- آموزش رایگان برنامهنویس با C++
http://tiny.cc/Mes_CPP
۱۷- هنر برنامهنویسی
http://tiny.cc/Mes_Art
۱۸- آموزش رایگان حروفچینی مستندات علمی با LaTeX و بسته XePersian.
http://tiny.cc/Mes_LaTeX
۱۹- کارگاه آشنایی با لاتک و زیپرشین دانشگاه کاشان
http://tiny.cc/Mes_Kashan
۲۰- کارگاه آشنایی با LaTeX و XePersian بهشهر
http://tiny.cc/Mes_Behshar
۲۱- آموزش رایگان رسم در LaTeX
http://tiny.cc/Mes_Tikz
۲۲- آموزش رایگان مبانی آنالیز عددی
http://tiny.cc/Mes_Adadi1
۲۳- آموزش رایگان آنالیز عددی ۲
http://tiny.cc/Mes_Adadi2
۲۴- آموزش رایگان آنالیز عددی پیشرفته
http://tiny.cc/Mes_AdvNum
۲۵- آموزش رایگان جبرخطی و مبانی ماتریسها
http://tiny.cc/Mes_LinAlg
۲۶- آموزش رایگان جبرخطی عددی (ریاضی، برق و علوم کامپیوتر)
http://tiny.cc/Mes_NumLinAlg
۲۷- آموزش رایگان جبرخطی عددی پیشرفته
http://tiny.cc/Mes_AdvNumAna
۲۸- آموزش رایگان معادلات دیفرانسیل با مشتقات جزئی
http://tiny.cc/Mes_PDE
۲۹- آموزش رایگان روش عناصر متناهی (FEM)
http://tiny.cc/Mes_FEM
۳۰- آموزش رایگان FEniCS، برای حل معادلات دیفرانسیل با مشتقات جزئی
http://tiny.cc/Mes_Fenics
۳۱- آموزش رایگان کار و برنامهنویسی در R
http://tiny.cc/Mes_R
۳۲- حل تمرین دروس مختلف
http://tiny.cc/Mes_HaleTamrin
۳۳- آموزش رایگان حسابان (۱) پایه یازدهم
http://tiny.cc/Mes_Hesaban11
۳۴- آموزش رایگان ریاضی (۲) پایه یازدهم تجربی
http://tiny.cc/Mes_Riazi11
۳۵- آشنایی با سوالات آزمون استخدامی
http://tiny.cc/Mes_Estekhdami
۳۶- آموزش رایگان روش سریع تراختنبرگ در حساب
http://tiny.cc/Mes_Trachtenburg
۳۷- آشنایی مختصر با لینوکس
http://tiny.cc/Mes_Linux
۳۸- آمادگی برای المپیاد ریاضی
http://tiny.cc/Mes_Olympiad
لطفا با سابسکرایب کردن کانال در یوتیوب و انتشار این پست در گروهها، کانالها در فضای مجازی از آن حمایت کنید.
سلام.
دورههای آموزشی رایگان زیر در ۸ سال گذشته توسط من تهیه شده است که میتواند برای دانشجویان علوم پایه، فنی و مهندسی و علوم کامپیوتر مفید باشد.
تلاش من بر این بوده است که برای درسهای دانشگاهی تمام سرفصل مصوب وزارت علوم رعایت شود و درسها به شکل پایهای و اصولی آموزش داده شوند.
با توجه به شروع سال تحصیلی جدید سپاسگزار خواهم شد اگر این پست را باز نشر (Repost) فرمایید.
۱- آموزش رایگان ریاضی پیشدانشگاهی، ویژه نودانشجویان
http://tiny.cc/Mes_PreMath
۲- آموزش رایگان ریاضی عمومی یک مهندسی
http://tiny.cc/Mes_Calculus1
۳- آموزش رایگان ریاضی عمومی ۲ مهندسی
http://tiny.cc/Mes_Calculus2
۴- آموزش رایگان معادلات دیفرانسیل رشتههای مهندسی
http://tiny.cc/Mes_ODE
۵- دوره تست معادلات دیفرانسیل
http://tiny.cc/Mes_ODETest
۶- آموزش رایگان ریاضی مهندسی
http://tiny.cc/Mes_EngMath
۷- آموزش رایگان محاسبات عددی ویژه دانشجویان رشتههای مهندسی
http://tiny.cc/Mes_Mohasebat
۸- آموزش رایگان احتمال مهندسی
http://tiny.cc/Mes_Probabilty
۹- آموزش رایگان کار و برنامهنویسی با MATLAB
http://tiny.cc/Mes_Matlab
۱۰- آموزش رایگان Maple
http://tiny.cc/Mes_Maple
۱۱- آموزش رایگان برنامهنویسی با Python
http://tiny.cc/Mes_Python
۱۲- آموزش رایگان برنامهنویسی پایتون (کلاس درس)
http://tiny.cc/Mes_PythonClass
۱۳- مبانی کامپیوتر با پایتون ۳
http://tiny.cc/Mes_Mabani
۱۴- آموزش رایگان Numpy, Scipy
http://tiny.cc/Mes_Numpy
۱۵- آشنایی با یادگیری ماشین
http://tiny.cc/Mes_ML
۱۶- آموزش رایگان برنامهنویس با C++
http://tiny.cc/Mes_CPP
۱۷- هنر برنامهنویسی
http://tiny.cc/Mes_Art
۱۸- آموزش رایگان حروفچینی مستندات علمی با LaTeX و بسته XePersian.
http://tiny.cc/Mes_LaTeX
۱۹- کارگاه آشنایی با لاتک و زیپرشین دانشگاه کاشان
http://tiny.cc/Mes_Kashan
۲۰- کارگاه آشنایی با LaTeX و XePersian بهشهر
http://tiny.cc/Mes_Behshar
۲۱- آموزش رایگان رسم در LaTeX
http://tiny.cc/Mes_Tikz
۲۲- آموزش رایگان مبانی آنالیز عددی
http://tiny.cc/Mes_Adadi1
۲۳- آموزش رایگان آنالیز عددی ۲
http://tiny.cc/Mes_Adadi2
۲۴- آموزش رایگان آنالیز عددی پیشرفته
http://tiny.cc/Mes_AdvNum
۲۵- آموزش رایگان جبرخطی و مبانی ماتریسها
http://tiny.cc/Mes_LinAlg
۲۶- آموزش رایگان جبرخطی عددی (ریاضی، برق و علوم کامپیوتر)
http://tiny.cc/Mes_NumLinAlg
۲۷- آموزش رایگان جبرخطی عددی پیشرفته
http://tiny.cc/Mes_AdvNumAna
۲۸- آموزش رایگان معادلات دیفرانسیل با مشتقات جزئی
http://tiny.cc/Mes_PDE
۲۹- آموزش رایگان روش عناصر متناهی (FEM)
http://tiny.cc/Mes_FEM
۳۰- آموزش رایگان FEniCS، برای حل معادلات دیفرانسیل با مشتقات جزئی
http://tiny.cc/Mes_Fenics
۳۱- آموزش رایگان کار و برنامهنویسی در R
http://tiny.cc/Mes_R
۳۲- حل تمرین دروس مختلف
http://tiny.cc/Mes_HaleTamrin
۳۳- آموزش رایگان حسابان (۱) پایه یازدهم
http://tiny.cc/Mes_Hesaban11
۳۴- آموزش رایگان ریاضی (۲) پایه یازدهم تجربی
http://tiny.cc/Mes_Riazi11
۳۵- آشنایی با سوالات آزمون استخدامی
http://tiny.cc/Mes_Estekhdami
۳۶- آموزش رایگان روش سریع تراختنبرگ در حساب
http://tiny.cc/Mes_Trachtenburg
۳۷- آشنایی مختصر با لینوکس
http://tiny.cc/Mes_Linux
۳۸- آمادگی برای المپیاد ریاضی
http://tiny.cc/Mes_Olympiad
لطفا با سابسکرایب کردن کانال در یوتیوب و انتشار این پست در گروهها، کانالها در فضای مجازی از آن حمایت کنید.
YouTube
Ali Mesforoush
Share your videos with friends, family, and the world
🔥8👍2❤1
✅معرفی پکیج های پایتونی
فروشگاه saleor یه نسخه قدیمی داره که دیگه آرشیو ش کرده.
من یه فورک ازش گرفتم توی این آدرس:
https://github.com/miladhzz/saleor-old
فایل requirements.txt رو که دیدم، پکیج های خیلی زیادی توش بود.
از ChatGPT کمک گرفتم و خواستم کار هر کدوم رو در یک جمله کوتاه بگه
خروجی ChatGPT رو عینا توی پست های بعدی قرار میدم.
آپدیت: یکی از دوستان زحمت کشید و pdf ش کرد. پست بعدی
فروشگاه saleor یه نسخه قدیمی داره که دیگه آرشیو ش کرده.
من یه فورک ازش گرفتم توی این آدرس:
https://github.com/miladhzz/saleor-old
فایل requirements.txt رو که دیدم، پکیج های خیلی زیادی توش بود.
از ChatGPT کمک گرفتم و خواستم کار هر کدوم رو در یک جمله کوتاه بگه
خروجی ChatGPT رو عینا توی پست های بعدی قرار میدم.
آپدیت: یکی از دوستان زحمت کشید و pdf ش کرد. پست بعدی
👍4
Used packages.pdf
117.8 KB
لیست همه پکیج های استفاده شده در فروشگاه اوپن سورس saleor نسخه قدیمی تمپلت
در قالب pdf
تشکر از Arash
پست های حذف شده رو منتقل کردم به کامنت همین پست
در قالب pdf
تشکر از Arash
پست های حذف شده رو منتقل کردم به کامنت همین پست
👍10
⚠️خواهشا ردیس را به عنوان Primary Database استفاده نکنید!
از لینکدین Hasan Arab borzo
✔️کامنت هاشم بخونید. لینک این مطلب
💥 یکی از جذابترین ریفکتور هایی که در اکالا انجام دادم، به ریلیز کردن ۴۰ گیگابایت رم ردیس برای استفاده در سبد خرید و سفارشها مربوط میشه. در این فرآیند، موفق شدم تنها از ۴۰۰ مگابایت رم استفاده کنم!
در شروع کار، به این فکر میکردم که چگونه میتوانم ۴۰ گیگابایت رم را آزاد کنم. اولین راهحلی که به ذهنم رسید، فشردهسازی دادهها بود. اما هیچ کامپرسوری نمیتوانست به اندازه کافی این حجم داده را فشرده کند، و هزینهی Decompress کردن آن بخاطر لود بالای سیستم، بسیار بالا بود.
🤔 هر کلید ما حاوی حدود ۱-۲ کیلوبایت JSON بود و مجبور بودیم که هر محصول را بدون TTL در Redis نگه داریم، زیرا Round Trip ما به Redis در لحظه به حدود ۳۰K میرسید و Redis ۴۰ گیگابایتی را مصرف میکرد. هیچ اپلیکیشنی نمیتوانست این حجم Request را با منابع پایین و زمان پاسخدهی ۱۰ میلیثانیه انجام دهد!
در ادامه، وقتی وارد فضای حل مسئله شدم:
💡 پاکسازی دادههای اضافی: اولین قدم ما حذف کلی دادههای غیرضروری بود که هر کلید را به حدوداً ۵۰۰ بایت تبدیل کرد.
💡 استفاده از Protobuf: به این فکر کردم که چرا از JSON استفاده کنیم؟ با استفاده از deserializer و serializer قدرتمندی مثل Protobuf، میتوانستیم حجم دادهها را به طور چشمگیری کاهش دهیم. با تبدیل دادهها به باینری و ذخیره آن، حجم هر کلید به حدود ۳۰۰ بایت کاهش یافت، که به معنای کاهش ۸۰ درصدی مصرف رم بود. با این حال، کیفیت و سرعت بالا در اکالا برای ما بسیار مهم بود.
💡 شکستن کلیدها: کلیدها را به دو بخش تقسیم کردم:
اطلاعات محصول (شامل نام، بارکد، آدرس عکس و...) در یک کلید با حجم تقریباً ۲۰۰ بایت.
موجودی هر محصول در فروشگاهها در کلیدی دیگر با حجم حدود ۱۰۰ بایت.
در روش قبلی، اگر یک میلیون کالا داشتیم، مصرف حدود ۲۸۶ مگابایت بود. اما در روش جدید، فرض کنیم از یک میلیون تا 2000 محصول داریم و برای یک میلیون کالا موجودی در استور های مختلف، حدود ۹۵ مگابایت مصرف میشد!
💡 کش کردن محصولات: همچنین، کالاهای اضافهشده به سبد خرید مشتریان را به مدت ۴ روز کش کردم. به جای استفاده از Redis به عنوان Primary Database و بدون TTL، هرگاه دادهای نداشتیم، از منبع اصلی اطلاعات را میگرفتیم و دوباره به مدت ۴ روز کش میکردیم. اگر کاربری همان کالا را دوباره به سبد خرید اضافه میکرد، TTL آن به صورت Sliding افزایش مییافت.
در نهایت، با همین ۴۰۰ مگابایت، همه چیز به خوبی به هم رسید و ما توانستیم پرفورمنس و سرعت را بدون هیچ افت کیفیتی حفظ کنیم!
از لینکدین Hasan Arab borzo
✔️کامنت هاشم بخونید. لینک این مطلب
💥 یکی از جذابترین ریفکتور هایی که در اکالا انجام دادم، به ریلیز کردن ۴۰ گیگابایت رم ردیس برای استفاده در سبد خرید و سفارشها مربوط میشه. در این فرآیند، موفق شدم تنها از ۴۰۰ مگابایت رم استفاده کنم!
در شروع کار، به این فکر میکردم که چگونه میتوانم ۴۰ گیگابایت رم را آزاد کنم. اولین راهحلی که به ذهنم رسید، فشردهسازی دادهها بود. اما هیچ کامپرسوری نمیتوانست به اندازه کافی این حجم داده را فشرده کند، و هزینهی Decompress کردن آن بخاطر لود بالای سیستم، بسیار بالا بود.
🤔 هر کلید ما حاوی حدود ۱-۲ کیلوبایت JSON بود و مجبور بودیم که هر محصول را بدون TTL در Redis نگه داریم، زیرا Round Trip ما به Redis در لحظه به حدود ۳۰K میرسید و Redis ۴۰ گیگابایتی را مصرف میکرد. هیچ اپلیکیشنی نمیتوانست این حجم Request را با منابع پایین و زمان پاسخدهی ۱۰ میلیثانیه انجام دهد!
در ادامه، وقتی وارد فضای حل مسئله شدم:
💡 پاکسازی دادههای اضافی: اولین قدم ما حذف کلی دادههای غیرضروری بود که هر کلید را به حدوداً ۵۰۰ بایت تبدیل کرد.
💡 استفاده از Protobuf: به این فکر کردم که چرا از JSON استفاده کنیم؟ با استفاده از deserializer و serializer قدرتمندی مثل Protobuf، میتوانستیم حجم دادهها را به طور چشمگیری کاهش دهیم. با تبدیل دادهها به باینری و ذخیره آن، حجم هر کلید به حدود ۳۰۰ بایت کاهش یافت، که به معنای کاهش ۸۰ درصدی مصرف رم بود. با این حال، کیفیت و سرعت بالا در اکالا برای ما بسیار مهم بود.
💡 شکستن کلیدها: کلیدها را به دو بخش تقسیم کردم:
اطلاعات محصول (شامل نام، بارکد، آدرس عکس و...) در یک کلید با حجم تقریباً ۲۰۰ بایت.
موجودی هر محصول در فروشگاهها در کلیدی دیگر با حجم حدود ۱۰۰ بایت.
در روش قبلی، اگر یک میلیون کالا داشتیم، مصرف حدود ۲۸۶ مگابایت بود. اما در روش جدید، فرض کنیم از یک میلیون تا 2000 محصول داریم و برای یک میلیون کالا موجودی در استور های مختلف، حدود ۹۵ مگابایت مصرف میشد!
💡 کش کردن محصولات: همچنین، کالاهای اضافهشده به سبد خرید مشتریان را به مدت ۴ روز کش کردم. به جای استفاده از Redis به عنوان Primary Database و بدون TTL، هرگاه دادهای نداشتیم، از منبع اصلی اطلاعات را میگرفتیم و دوباره به مدت ۴ روز کش میکردیم. اگر کاربری همان کالا را دوباره به سبد خرید اضافه میکرد، TTL آن به صورت Sliding افزایش مییافت.
در نهایت، با همین ۴۰۰ مگابایت، همه چیز به خوبی به هم رسید و ما توانستیم پرفورمنس و سرعت را بدون هیچ افت کیفیتی حفظ کنیم!
👍11❤6👏1
👍5🔥1
✅بهینه سازی Query Performance : متد Only در ORM جنگو
از لینکدین آقای عموزاده
یکی از فعالیتهای روزمرهام برای محصولات این است که بخش Issues و Performance سرویس Sentry رو بررسی کنم و از لیست مشکلات Performance ای که Sentry تشخیص داده، موارد مهم رو پیدا و به تیم ارجاع بدم و گاهی اوقات هم خودم برم سروقت حل شون و یادگیری ام حفظ بشه. تو گزارش ها، endpoint و background task هایی داریم که Response time یا failure rate شون بیشتر از انتظاره و یا گاهی اوقات سرویس زیر بار کلاً از دست میره (504 میگیریم برای مثال). یکی از روش هایی که میشه برای حل این دست مشکلات استفاده کرد، محدود کردن انتخاب ستونها به اونایی که واقعاً نیاز هستند است. در ORM ها معمولاً ستونهای بیشتر به معنی مصرف منابع بیشتر است و میتونه Capacity و Response time سرویس/محصول را تحت تأثیر قرار بده. در Django یکی از ابزار هایی که برای بهبود Query ها استفاده میکنم متد only است. به این شکل که اول جایی که نتیجه قراره استفاده بشه (مثلاً Template، REST یا …) رو اول بررسی میکنم تا ببینم که چه تعداد از ستونها ضروری هستند و اونا رو به عنوان آرگومان به متد only میدم. بعد با کمک ابزار های مشاهده Query (مثل Debug toolbar یا مشابهش) نتیجه کار رو از نظر دیتابیس چک میکنم. نکته مهم این است که مطمئن باشیم همه ستونهای مورد نیاز رو به متد داده ایم، اگر متدی جای دیگه ای استفاده بشه،ORM مجبور میشه مجدد کوئری بزنه و از هدف اولیه دور میشیم. نکته بعدی اینکه در تجربه و کیس های کاری من، استفاده از این متد، بیشتر مواقع باعث تحول سرویس نشد،قدم مثبتی به جلو بود و خودش رو برای مثال در تهیه گزارش ها (جایی که تعداد زیادی iteration داشتیم) بیشتر نشون داد و اکثر مواقع تفاوت محسوسی نداشت (تفاوت رو با اندازهگیری زمان DB response time، مقدار مصرف حافظه و HTTP response time اندازهگیری کردم). تفاوت Query بدون و با استفاده از Only رو توی تصویر میتونین ببینید و امیدوارم یک ابزار مفید توی جعبه ابزارتون باشه. 🙂 لینک مستندات: https://lnkd.in/dhiwfcb4
تصاویر در نظرات پست
از لینکدین آقای عموزاده
یکی از فعالیتهای روزمرهام برای محصولات این است که بخش Issues و Performance سرویس Sentry رو بررسی کنم و از لیست مشکلات Performance ای که Sentry تشخیص داده، موارد مهم رو پیدا و به تیم ارجاع بدم و گاهی اوقات هم خودم برم سروقت حل شون و یادگیری ام حفظ بشه. تو گزارش ها، endpoint و background task هایی داریم که Response time یا failure rate شون بیشتر از انتظاره و یا گاهی اوقات سرویس زیر بار کلاً از دست میره (504 میگیریم برای مثال). یکی از روش هایی که میشه برای حل این دست مشکلات استفاده کرد، محدود کردن انتخاب ستونها به اونایی که واقعاً نیاز هستند است. در ORM ها معمولاً ستونهای بیشتر به معنی مصرف منابع بیشتر است و میتونه Capacity و Response time سرویس/محصول را تحت تأثیر قرار بده. در Django یکی از ابزار هایی که برای بهبود Query ها استفاده میکنم متد only است. به این شکل که اول جایی که نتیجه قراره استفاده بشه (مثلاً Template، REST یا …) رو اول بررسی میکنم تا ببینم که چه تعداد از ستونها ضروری هستند و اونا رو به عنوان آرگومان به متد only میدم. بعد با کمک ابزار های مشاهده Query (مثل Debug toolbar یا مشابهش) نتیجه کار رو از نظر دیتابیس چک میکنم. نکته مهم این است که مطمئن باشیم همه ستونهای مورد نیاز رو به متد داده ایم، اگر متدی جای دیگه ای استفاده بشه،ORM مجبور میشه مجدد کوئری بزنه و از هدف اولیه دور میشیم. نکته بعدی اینکه در تجربه و کیس های کاری من، استفاده از این متد، بیشتر مواقع باعث تحول سرویس نشد،قدم مثبتی به جلو بود و خودش رو برای مثال در تهیه گزارش ها (جایی که تعداد زیادی iteration داشتیم) بیشتر نشون داد و اکثر مواقع تفاوت محسوسی نداشت (تفاوت رو با اندازهگیری زمان DB response time، مقدار مصرف حافظه و HTTP response time اندازهگیری کردم). تفاوت Query بدون و با استفاده از Only رو توی تصویر میتونین ببینید و امیدوارم یک ابزار مفید توی جعبه ابزارتون باشه. 🙂 لینک مستندات: https://lnkd.in/dhiwfcb4
تصاویر در نظرات پست
👏7👍3❤2
اصل single responsibility چرته
✔️کامنت هاش رو حتما بخون
لینک
کلمه responsibility خودش خیلی کلمه نامفهومیه، اصلا responsibility ینی چی؟ شما وظیفه رو دقیقا چی تعریف میکنی؟ به چی میگی وظیفه؟
آقای uncle Bob در تعریف single responsibility میگه:
A class should have one and only one reason to change
ینی چی only one؟
در همین ابتدا میشه دو تا دلیل آورد که یه کلاس میتونه تغییر بکنه، یکی باگ فیکس و دومی فیچر اضافه کردن
الان تکلیف ما چیه؟ این تعریف رفت زیر سوال، ینی دیگه من single responsibility رو رعایت نکردم؟
حالا فرض کنید یه نفر یک کلاسی نوشته که دو تا متد داره، یکی کاربر رو ایجاد میکنه و یه متد دیگه داره به اون کاربر notification خوش آمد گویی ارسال میکنه.
آیا طبق معیاری به اسم single responsibility میشه گفت این کلاسی که تعریف کردم single responsibile هست؟
به نظرم من خیر نمیشه گفت
حالا معیار درست چی میتونه باشه؟
Cohesion
به نظرم معیار درست تر Cohesionهه، چرا؟
احتمالا وقتی که من کلاس بالارو براتون تعریف کردم به خودتون گفتید ارسال notification چه ربطی به ایجاد کاربر داره، دقیقا درست گفتید
معیار Cohesion بهتره چون شما میتونید ببینید متدهای که چیدید کنار هم چقدر به هم دیگه مرتبط هستند
با این معیار حالا میشه تصمیم گرفت که متد ارسال notification باید یک کلاس مستقل برای خودش بشه
✔️کامنت هاش رو حتما بخون
لینک
کلمه responsibility خودش خیلی کلمه نامفهومیه، اصلا responsibility ینی چی؟ شما وظیفه رو دقیقا چی تعریف میکنی؟ به چی میگی وظیفه؟
آقای uncle Bob در تعریف single responsibility میگه:
A class should have one and only one reason to change
ینی چی only one؟
در همین ابتدا میشه دو تا دلیل آورد که یه کلاس میتونه تغییر بکنه، یکی باگ فیکس و دومی فیچر اضافه کردن
الان تکلیف ما چیه؟ این تعریف رفت زیر سوال، ینی دیگه من single responsibility رو رعایت نکردم؟
حالا فرض کنید یه نفر یک کلاسی نوشته که دو تا متد داره، یکی کاربر رو ایجاد میکنه و یه متد دیگه داره به اون کاربر notification خوش آمد گویی ارسال میکنه.
آیا طبق معیاری به اسم single responsibility میشه گفت این کلاسی که تعریف کردم single responsibile هست؟
به نظرم من خیر نمیشه گفت
حالا معیار درست چی میتونه باشه؟
Cohesion
به نظرم معیار درست تر Cohesionهه، چرا؟
احتمالا وقتی که من کلاس بالارو براتون تعریف کردم به خودتون گفتید ارسال notification چه ربطی به ایجاد کاربر داره، دقیقا درست گفتید
معیار Cohesion بهتره چون شما میتونید ببینید متدهای که چیدید کنار هم چقدر به هم دیگه مرتبط هستند
با این معیار حالا میشه تصمیم گرفت که متد ارسال notification باید یک کلاس مستقل برای خودش بشه
Linkedin
#solid #solidisnotsolid | Amir Salehi | 69 comments
اصل single responsibility چرته
کلمه responsibility خودش خیلی کلمه نامفهومیه، اصلا responsibility ینی چی؟ شما وظیفه رو دقیقا چی تعریف میکنی؟ به چی میگی وظیفه؟
آقای uncle Bob در تعریف single responsibility میگه:
A class should have one and only one reason…
کلمه responsibility خودش خیلی کلمه نامفهومیه، اصلا responsibility ینی چی؟ شما وظیفه رو دقیقا چی تعریف میکنی؟ به چی میگی وظیفه؟
آقای uncle Bob در تعریف single responsibility میگه:
A class should have one and only one reason…
👍6❤1🤔1
Forwarded from یادگیری ماشین با چاشنی صنعت (Abolfazl 🤘)
چرا مهندسی نرم افزار؟
تمام آن چه که ما نیاز داریم برای پیشرفت تو صنعت مهندسی نرم افزاره. نه زبان و نه فریمورک و نه ابزار.
مهندسی نرم افزار یعنی اون چیزی که تو دانشگاه یاد میگیریم. یعنی انتخاب بهترین سولوشن نسبت به موقعیت.
مهندسی نرم افزار به این معنی نیست که هر چی قلمبه سلمبه تر کار کنی و پیچیدگی رو بیشتر کنی آدم خفن تری هستی!
بلکه دقیقا به این معنیه که پیچیدگی رو کم کنی و نسبت به موقعیت بهترین متدولوژی رو ارائه بدی..
حالا تو این میان هر چی ابزار بیشتر بدونی راحت تر کارت رو راه میندازی.
از این به بعد اینو هر روز با خودم تکرار میکنم، توصیه میکنم شما هم تکرارش کنید😁:
مهندسی نرم افزار، یعنی علم چگونگی حل مشکل در یک موقعیت خاص به شکل بهینه.
تمام آن چه که ما نیاز داریم برای پیشرفت تو صنعت مهندسی نرم افزاره. نه زبان و نه فریمورک و نه ابزار.
مهندسی نرم افزار یعنی اون چیزی که تو دانشگاه یاد میگیریم. یعنی انتخاب بهترین سولوشن نسبت به موقعیت.
مهندسی نرم افزار به این معنی نیست که هر چی قلمبه سلمبه تر کار کنی و پیچیدگی رو بیشتر کنی آدم خفن تری هستی!
بلکه دقیقا به این معنیه که پیچیدگی رو کم کنی و نسبت به موقعیت بهترین متدولوژی رو ارائه بدی..
حالا تو این میان هر چی ابزار بیشتر بدونی راحت تر کارت رو راه میندازی.
از این به بعد اینو هر روز با خودم تکرار میکنم، توصیه میکنم شما هم تکرارش کنید😁:
مهندسی نرم افزار، یعنی علم چگونگی حل مشکل در یک موقعیت خاص به شکل بهینه.
👍22
Media is too big
VIEW IN TELEGRAM
✅مصاحبه با مهندس امیر موسوی برنامه نویس ارشد دات نت شرکت Utravs - هنرستان دبیریان نازی آباد تهران
✔️نکاتی که گفتن ارتباطی به زبان برنامه نویسی خاصی نداره و برای همه برنامه نویس های تازه کار میتونه مفید باشه
توی این ویدئو با هماهنگی هنرستان شهید دبیریان واقع در محله نازی آباد تهران
و سر کلاس دوازدهم تجارت الکترونیک با ایشون مصاحبه داشتم.
✔️مهندس موسوی هنرستانی بودن
سوالهای زیر رو ازشون پرسیدیم:
-چه شرکتهایی کار کردید
-رمز موفقیت شما چی بوده
-آیا مدرسه دانشگاه و... میتونه در برنامه نویس خوب شدن کمک کنه
-نظر شما در مورد هوش مصنوعی چیه
-اگر نسخه ۱۸ ساله خودشون رو ملاقات میکردین چه توصیه هایی بهشن می کردید
-اگر برمیگشتن به دوران انتخاب رشته و کنکور آیا از طریق رشته ریاضی و دانشگاه ادامه میدادن یا دوباره با کنکور فنی میرفتن
- کجا واسه کاراموزی برن ک توش کار یاد بگیرن
لینک آپارات:
https://www.aparat.com/v/sayb5wu
لینک یوتیوب:
https://youtu.be/QeV73QCwmE0
✔️نکاتی که گفتن ارتباطی به زبان برنامه نویسی خاصی نداره و برای همه برنامه نویس های تازه کار میتونه مفید باشه
توی این ویدئو با هماهنگی هنرستان شهید دبیریان واقع در محله نازی آباد تهران
و سر کلاس دوازدهم تجارت الکترونیک با ایشون مصاحبه داشتم.
✔️مهندس موسوی هنرستانی بودن
سوالهای زیر رو ازشون پرسیدیم:
-چه شرکتهایی کار کردید
-رمز موفقیت شما چی بوده
-آیا مدرسه دانشگاه و... میتونه در برنامه نویس خوب شدن کمک کنه
-نظر شما در مورد هوش مصنوعی چیه
-اگر نسخه ۱۸ ساله خودشون رو ملاقات میکردین چه توصیه هایی بهشن می کردید
-اگر برمیگشتن به دوران انتخاب رشته و کنکور آیا از طریق رشته ریاضی و دانشگاه ادامه میدادن یا دوباره با کنکور فنی میرفتن
- کجا واسه کاراموزی برن ک توش کار یاد بگیرن
لینک آپارات:
https://www.aparat.com/v/sayb5wu
لینک یوتیوب:
https://youtu.be/QeV73QCwmE0
👏7❤2🤮1
✅Partial Functions در پایتون چیه
با این توابع که با استفاده از partial از ماژول functools میشه ساختشون.
می تونیم تعداد مشخصی از آرگومان های تابع را با مقادیر مشخصی تعیین کنیم و تابع جدیدی بسازیم.
مثال:
یک تابع برای ارسال ایمیل با مقادیر پیشفرض مانند "از" و "موضوع":
این مثال شاید زیاد کاربردی نبود.
اگه شما کاربرد درست partial رو میدونید، ممنون میشم توی کامنت بنویسید.
با این توابع که با استفاده از partial از ماژول functools میشه ساختشون.
می تونیم تعداد مشخصی از آرگومان های تابع را با مقادیر مشخصی تعیین کنیم و تابع جدیدی بسازیم.
مثال:
یک تابع برای ارسال ایمیل با مقادیر پیشفرض مانند "از" و "موضوع":
from functools import partial
def send_email(from_address, to_address, subject, body):
print(f'Sending email from {from_address} to {to_address}')
print(f'Subject: {subject}')
print(f'Body: {body}')
send_marketing_email = partial(send_email, from_address='marketing@example.com', subject='Our New Product')
send_marketing_email(to_address='customer@example.com', body='Check out our new product!')
این مثال شاید زیاد کاربردی نبود.
اگه شما کاربرد درست partial رو میدونید، ممنون میشم توی کامنت بنویسید.
🤔5👍3
✅ویس های ادامه دار از کتاب Designing data-intensive applications
با ارائه عثمان
@osman_makhtoom
✔️این مفاهیم ارتباطی به زبان برنامه نویسی ندارن. لکن و من الله التوفیق
ویس اول- بخشی از مقدمه کتاب
https://t.me/osmanmakhtoomdev/76
ویس دوم- بخش دوم و پایانی مقدمه کتاب
https://t.me/osmanmakhtoomdev/79
ویس سوم- مقدمه بخش اول کتاب
https://t.me/osmanmakhtoomdev/80
ویس چهارم- بخش اول کتاب
https://t.me/osmanmakhtoomdev/85
ویس پنجم- تفکر در خصوص دیتا سیستم ها و دیزاین درست دیتا سیستم و شرایطی که دیزاین ما وابسته به اوناست.
https://t.me/osmanmakhtoomdev/95
ویس ششم- مفهوم قابل اعتماد بودن اپلیکیشن و ی سافت اسکیل مهم.
https://t.me/osmanmakhtoomdev/96
ویس هفتم- انواع خطاها
https://t.me/osmanmakhtoomdev/97
ویس هشتم- مقدمه قابلیت مقیاس پذیری
https://t.me/osmanmakhtoomdev/98
ویس نهم- توصیف لود
https://t.me/osmanmakhtoomdev/99
ویس دهم- توصیف پرفورمنس (پارت اول)
https://t.me/osmanmakhtoomdev/111
با ارائه عثمان
@osman_makhtoom
✔️این مفاهیم ارتباطی به زبان برنامه نویسی ندارن. لکن و من الله التوفیق
ویس اول- بخشی از مقدمه کتاب
https://t.me/osmanmakhtoomdev/76
ویس دوم- بخش دوم و پایانی مقدمه کتاب
https://t.me/osmanmakhtoomdev/79
ویس سوم- مقدمه بخش اول کتاب
https://t.me/osmanmakhtoomdev/80
ویس چهارم- بخش اول کتاب
https://t.me/osmanmakhtoomdev/85
ویس پنجم- تفکر در خصوص دیتا سیستم ها و دیزاین درست دیتا سیستم و شرایطی که دیزاین ما وابسته به اوناست.
https://t.me/osmanmakhtoomdev/95
ویس ششم- مفهوم قابل اعتماد بودن اپلیکیشن و ی سافت اسکیل مهم.
https://t.me/osmanmakhtoomdev/96
ویس هفتم- انواع خطاها
https://t.me/osmanmakhtoomdev/97
ویس هشتم- مقدمه قابلیت مقیاس پذیری
https://t.me/osmanmakhtoomdev/98
ویس نهم- توصیف لود
https://t.me/osmanmakhtoomdev/99
ویس دهم- توصیف پرفورمنس (پارت اول)
https://t.me/osmanmakhtoomdev/111
👏4👍2❤1
✅معرفی پکیج جنگویی
برای اضافه کردن لاگین با گوگل، فیس بوک، گیت هاب و...
به سایت خودتون می تونید از پکیج social-auth-app-django استفاده کنید.
لینک pypi:
https://pypi.org/project/social-auth-app-django/
لینک گیت هاب:
https://github.com/python-social-auth/social-app-django
لینک داکیومنتش:
https://python-social-auth.readthedocs.io/en/latest/intro.html
✔️فریمورک های زیر رو هم ساپورت میکنه:
Django
Flask
Pyramid
Webpy
Tornado
✔️آپدیت هم هست. و افراد زیادی روش کار کردن. 131 ایشو باز داره و 167 تا ایشو کلوز شده داره.
برای اضافه کردن لاگین با گوگل، فیس بوک، گیت هاب و...
به سایت خودتون می تونید از پکیج social-auth-app-django استفاده کنید.
لینک pypi:
https://pypi.org/project/social-auth-app-django/
لینک گیت هاب:
https://github.com/python-social-auth/social-app-django
لینک داکیومنتش:
https://python-social-auth.readthedocs.io/en/latest/intro.html
✔️فریمورک های زیر رو هم ساپورت میکنه:
Django
Flask
Pyramid
Webpy
Tornado
✔️آپدیت هم هست. و افراد زیادی روش کار کردن. 131 ایشو باز داره و 167 تا ایشو کلوز شده داره.
👍6