Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
905 - Telegram Web
Telegram Web
از لینکدین Hossein Nazari

مخاطبم بیشتر جوونای عزیز جویای کار هست، خیلی توجه کنید.
دیروز با دوست عزیزی صحبت میکردم و چالش پیدا کردن کار در سن بالا رو با هم صحبت میکردیم.

یه سوال خیلی مهم از من پرسید که نتونستم بهش جواب درستی بدم، سوال با این مفهوم که چرا پزشک، مشاور، وکیل و حسابدار، هرچقدر که سنشون بالاتر میره مشتری شون بیشتر میشه حتی با وجود دستمزد بیشتر، ولی برنامه نویس ها در سنین بالاتر خواهانشون کمتر میشه؟

من برنامه نویسی به شیوه صرفا کارمندی رو یه شغل پایدار در بلند مدت نمیدونم، و فکر میکنم باید به فکر روش های درآمدزایی متفاوت بود.

فکر می کنید برنامه نویسی بعد از چهل سالگی چه شکلی میشه؟
خیلی عدد ۴۰ مهم نیست، مهم مرز سنی مشخصی هست که بعدش چالش های ویژه خودش رو داره برای کار کردن و کار پیدا کردن.
تجربه شخص ممکنه بیش از حد زیاد باشه، حوصله کار شخص کمتر از حد قابل قبول باشه و همچنین، سطح انتظار حقوقی شخص بالا میره و هر شرکتی نمیتونه انتظاراتش رو برآورده کنه. و جمع این فاکتورها ممکنه فرصت های شغلی رو کم کنه.

حرف آخر اینکه خوبه که کارمندی و برنامه نویسی رو تجربه کنید، اما شغل دائم نبینیدش، چون میتونه چالش های جدی ایجاد کنه در سنین بالاتر.

در آخر خوشحال میشم اگه تجربه و راهکاری برای این چالش دارید و حتی تجربه ای دارید، کامنت کنید.
👍13
💎معرفی دیتابیس MongoDB 💎

دیتابیس MongoDB یکی از محبوب‌ترین دیتابیس‌های NoSQL تو دنیای امروزه.

به‌ جای این‌که مثل دیتابیس‌های رابطه‌ای (مثل MySQL یا PostgreSQL) از جداول و ردیف‌ها استفاده کنه، اطلاعات رو به شکل Document ذخیره می‌کنه که ساختارش خیلی شبیه به JSON هست.

هر داکیومنت می‌تونه شامل انواع مختلفی از داده‌ها باشه، و مهم‌تر از همه، هیچ محدودیتی هم روی ساختار داده‌ها وجود نداره.

حالا چرا MongoDB انقدر محبوبه؟

1⃣  انعطاف‌پذیری بالا :
توی MongoDB، نیازی نیست برای همه رکوردها یک ساختار ثابت داشته باشی.
مثلاً توی یه دیتابیس سنتی اگه یک فیلد جدید اضافه کنی باید اون فیلد رو به همه رکوردها اضافه کنی.
اما توی Mongo، هر Document می‌تونه فیلدهای خاص خودش رو داشته باشه. یعنی اگه توی یک داکویمنت مثلاً فیلد "address" داشته باشی و توی داکیومنت دیگه نداشته باشی، هیچ مشکلی پیش نمیاد.

مثال:
{
  "name": "Ali",
  "age": 25,
  "email": "ali@example.com"
}

{
  "name": "Sara",
  "age": 30
}

2⃣ مقیاس‌پذیری بالا
اگه یه پروژه خیلی بزرگ داشته باشی که نیاز به مقیاس‌پذیری بالا داره (مثلاً یه فروشگاه اینترنتی با میلیون‌ها کاربر)، MongoDB می‌تونه راحت با افزایش حجم داده‌ها سازگار بشه. Sharding توی Mongo بهت کمک می‌کنه که دیتابیس رو روی چندین سرور تقسیم کنی و عملکرد رو بالا ببری.

3⃣ سرعت بالا در خوندن و نوشتن داده‌ها
چون MongoDB داکیومنت ها رو به صورت ساده و با ساختار JSON-گونه ذخیره می‌کنه، خوندن و نوشتن داده‌ها خیلی سریع‌تر از بعضی دیتابیس‌های سنتی انجام می‌شه. این ویژگی به خصوص برای اپلیکیشن‌هایی که داده‌های زیاد و پویا دارن خیلی مفیده.

4⃣ مناسب برای داده‌های پیچیده و پویا
تو برنامه‌هایی که داده‌هاشون خیلی سریع تغییر می‌کنه و یا نوع داده‌ها ممکنه پیچیده باشه (مثل پروژه‌های اینترنت اشیا، شبکه‌های اجتماعی یا اپلیکیشن‌های موبایل)، MongoDB انتخاب بهتریه. چون لازم نیست هر دفعه که ساختار دادت عوض می‌شه، کل دیتابیس رو دوباره طراحی کنی.


حالا MongoDB چطور کار می‌کنه؟🤔

داده‌ها توی MongoDB به شکل مجموعه‌ای از اسناد ذخیره می‌شن. هر سند مثل یک فایل JSON عمل می‌کنه. برای کار با Mongo، نیازی نیست اول دیتابیس و جداول رو مثل سیستم‌های رابطه‌ای تعریف کنی. هر وقت داکیومنتی رو به Mongo اضافه کنی، خودش به صورت خودکار دیتابیس و کالکشن‌ها (معادل جدول توی دیتابیس‌های رابطه‌ای) رو ایجاد می‌کنه.

مثال از یک داکویمنت در MongoDB:

{
  "_id": "60c72b2f9b1e8e0015cfd31a",
  "name": "Product1",
  "price": 100,
  "catego_idlectronics"
}

این داکیومنت شامل یه _id یکتا است که MongoDB خودش به طور خودکار تولید می‌کنه

چرا MongoDB؟

1⃣ انعطاف‌پذیری توی ساختار داده (Schema less)

2⃣ مقیاس پذیری:
مناسب برای پروژه‌های بزرگ

3⃣ سرعت بالا:
سادگی استفاده و خواندن داده‌های حجیم

4⃣ سادگی استفاده:
راحت و بدون درد

جمع بندی 🎯
فهمیدیمMongoDB انتخاب خوبیه برای وقتی که پروژه‌ت نیاز به تغییرات سریع داره، داده‌ها ساختار پیچیده‌ای دارن، یا حجم بالایی از داده‌ها رو باید ذخیره کنی. به همین خاطر کمپانی های بزرگ مثل Uber ،Lyft، eBay از MongoDB استفاده می‌کنن.

امیدوارم مفید بود باشه :)

#mongodb #db #nosql


@ninja_learn_ir
6👍4🔥1
Forwarded from Python BackendHub (Mani)
AioClock
در ماه ۴ هزار دانلود داره 🚀
یک شرکت بزرگ تو برزیل هم داره ازش استفاده میکنه و تو لینکدین ازم تشکر کردن خیلی حس خوبی داشت :))

واقعا دوست دارم فول تایم اوپن سورس کار کنم. و مثلا همین پروژه naked sqlalchemy ام حاصله دو شب کار بود.
ولی متاسفانه هنوز به نقطه ای نرسیدم که بتونم کسب درآمد کنم از پروژه اوپن سورسم
برای همین به حمایتتون نیاز دارم این حمایت میتونه یک استار گیت هاب باشه, که پروژه هام بیشتر دیده شه و به اون نقطه نزدیک تر شم 🫶

فریم ورک/لایبری های مفید اوپن سورسی که تاحالا منتشر کردم:

AioClock - A modern python scheduling framework with dependency injection and modular integration support. Alternative for Rocketry or apscheduler

Naked SQLA - A simple and lightweight object mapper around SQLAlchemy core, simple alternative to SQLAlchemy ORM.


CfCrawler - Cloudflare scraper and cralwer written in Async, In-place library for HTTPX. Crawl website that has cloudflare enabled, easier than ever!

@PyBackendHub
🔥8👍3
👌این عکسو دادم به ربات هوشیفای گفتم متن های عکس رو بده. نتیجه:

ترجمه متن‌های موجود در عکس به شرح زیر است:

بالا:
"تمام زیرساخت‌های دیجیتال مدرن"

پایین:
"یک پروژه که یک فرد تصادفی در نبراسکا از سال 2003 به طور بی‌منت نگهداری کرده است"

قصدم تبلیغ نبود. نکته عکس جالب بود و باهاش هوشیفای رو هم تست کردم.

لینک ربات هم نمیدم
👍4
سوال جنگویی

این ویو (تصویر سفید) رو دارم. و میخوام class-based ش کنم. و صفحه بندی یا pagination هم داشته باشه.

تصمیم می گیرم از ListView ارث بری کنم (تصویر سیاه)

حالا با توجه به اینکه صفحه بندی رو میخوام و میخوام کمترین و مفهوم ترین کد رو بنویسم. چکار کنم؟
1
Forwarded from Python Hints
از صبح داشتم یک پروژه رو review می‌کردم که بنا به مشکلات از یک فریمورک به فریمورک دیگه جابجا شده؛ اما بعد از جابجایی یک سری بخش‌های پروژه باگ داره و من وارد شدم برای کد ریویو (امروز صبح روز اول کارم بود)

دسترسی به کدهای قدیمی هم گرفتم، می‌بینم تست نویسی برای این باگ تو زبان و فریمورک قبلی انجام شده ولی این سمت توی تست‌ها نیست !

بنظرتون مشکل از کجاست ؟

مدیرفنی یا تیم‌لید بکند.

یک درس بزرگی که حتی قبل از ورود به دنیای بکند و بخاطر عادت به سورس کد خوندن گرفتم این بود که
Intégration test
اولویت بالاتری داره از
Unit test
واقعیت هم همین هست، unit test برای راحتی خودمون و دولوپر بعدی هست و intégration test برای راحتی و بدون باگ بودن استفاده‌های client

خیلی تیم‌ها (ایرانی و خارجی) که intégration test نمی‌نویسند متاسفانه ولی اون‌هایی هم که می‌نویسند مثل کدهای امروز من دقیقاً از آنچه که فریمورک ارائه میده استفاده می‌کنند.


این کاملاً خطا هست، برای مدیر فنی ٫ تیم‌ لید منظورم هست. الان سوالتون اینه که چرا ؟

توی این پروژه اگر intégration test ها میومد سرور رو روی یک thread جدا اجرا می‌کرد و بعد با استفاده از پکیج دیگری مثل requests درخواست می‌زد به api هاش بنظرتون بهتر نمی‌شد ؟

اگر این اتفاق افتاده بود الان که فریمورک عوض شده نیاز به باز نویسی تست‌ها نبود، یعنی ما فقط برای اجرای سرور روی thread دیگر دستورات رو عوض می‌کردیم و تست‌ها رو اجرا می‌کردیم.

وقتی دارم از بیرون به سیستم نگاه می‌کنم برام چه فرقی داره که چه زبان برنامه‌نویسی یا چه فریمورکی استفاده شده؛ همونطور که برای یوزر من فرقی نداره.

خواستم بگم حواستون به این نکته باشه، intégration test باید جوری باشه که فارغ از فریمورک و زبان قابل اجرا باشه.

متاسفانه کدهای جدید این تیم هم این خطا رو داره و باز وابسته شده به فریمورک
👍11
Forwarded from Python BackendHub
با این اپلیکیشن دقیقا میتونید متوجه شین که چه اتفاقی داره میفته.
مثلا یک برنامه دارین (پایتونی یا هرچی) و هر درخواستی که از سیستم عاملتون رد شه چه HTTP باشه چه HTTPS رو کامل capture میکنه و به صورت plain خیلی تمیز بهتون نشون میده.
👍6
سوال جنگویی

اگه توی ListView مقدار اتریبیوت ع allow_empty رو برابر False کنیم.

چی میشه؟


بیخیال ChatGPT و امثالهم...

آپدیت:
جوابش اینه
با این تنظیم اگه لیست خالی باشه خطای 404 میده
👍2
سوال پایتونی

این کد رو اجرا کنیم، نتیجه ش چی میشه؟

اعتراف می کنم خودم نمی دونستم.
👍4
سوال پایتونی

آیا روشی که توی خط 8 متد super رو صدا زدیم درست است؟

این کد ارور میده؟
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🔸 مفهوم Comprehensions قطعه کدهایی قدرتمند در پایتون (معرفی)

🙋🏽‍♂️ خیلی وقت‌ها کدهای افراد باتجربه توی پایتونو نگاه می‌کنیم می‌بینم که برای ایجاد sequence؛ لیست، دیکشنری، سِت، از یه روش خاصی استفاده می‌کنند که کدشون بهینه‌تر، خواناتر و خلاصه‌تر می‌شه! اسم این روش comprehension هست!


🔸 ما توی دوره صفر تا قهرمانیِ پایتون از آیزی‌لرن یاد می‌گیریم چطور انواع comprehensions رو با مثال توی کدهامون پیاده‌سازی کنیم.

--------------------
🔗 وب‎‌سایت : آیزی‌لرن
👍3🔥21
💎 عملیات‌های 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:
می‌تونی از async و await استفاده کنی تا درخواست‌ها به صورت غیر همزمان انجام بشن و سرعت اپلیکیشن بالا بره.

- برای CPU Bound:
می‌تونی از ماژول concurrent.futures و ProcessPoolExecutor استفاده کنی تا کارهای سنگین رو در چند پروسه اجرا کنی.

جمع‌بندی 🎯
درک تفاوت‌های بین IO Bound و CPU Bound می‌تونه بهت کمک کنه تا اپلیکیشن‌های جنگو رو بهتر بهینه‌سازی کنی. اگه عملیات‌های IO Bound داری، از async استفاده کن و اگر CPU Bound هستن، برو سراغ multiprocessing.

امید وارم مفید بوده باشه :)

#iobound #cpubound #python #django


@ninja_learn_ir
👍18👎1
Forwarded from جنگولرن
Media is too big
VIEW IN TELEGRAM
مصاحبه علی بیگدلی با من در مورد فروشگاه اینترنتی با جنگو

توی این ویدئو یک مصاحبه با مهندس علی بیگدلی پیرامون طراحی یک فروشگاه اینترنتی با جنگو داشتم.
علی بیگدلی من رو به عنوان یک برنامه نویس با تجربه انتخاب کرده بود. و سوالات خودش رو از من پرسید.
سعی کردم تا جایی که دانش دارم جواب بدم.
امیدوارم از این ویدئو چیزی یاد بگیرید.

لینک آپارت:
https://www.aparat.com/v/kuocju0

لینک یوتیوب:
در حال آپلود

لینک مکتب خونه
👍62
ویدئوی آموزشی برخی از دستورات SQL

لینک:
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

لطفا با سابسکرایب کردن کانال در یوتیوب و انتشار این پست در گروه‌ها، کانالها در فضای مجازی از آن حمایت کنید.
🔥8👍21
معرفی پکیج های پایتونی

فروشگاه saleor یه نسخه قدیمی داره که دیگه آرشیو ش کرده.
من یه فورک ازش گرفتم توی این آدرس:
https://github.com/miladhzz/saleor-old

فایل requirements.txt رو که دیدم، پکیج های خیلی زیادی توش بود.
از ChatGPT کمک گرفتم و خواستم کار هر کدوم رو در یک جمله کوتاه بگه
خروجی ChatGPT رو عینا توی پست های بعدی قرار میدم.

آپدیت: یکی از دوستان زحمت کشید و pdf ش کرد. پست بعدی
👍4
Used packages.pdf
117.8 KB
لیست همه پکیج های استفاده شده در فروشگاه اوپن سورس saleor نسخه قدیمی تمپلت
در قالب 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 افزایش می‌یافت.

در نهایت، با همین ۴۰۰ مگابایت، همه چیز به خوبی به هم رسید و ما توانستیم پرفورمنس و سرعت را بدون هیچ افت کیفیتی حفظ کنیم!
👍116👏1
2025/07/08 19:44:02
Back to Top
HTML Embed Code: