Coding Lovers
کیا تا الان با Prisma داخل JS کار کردن؟
این کتابخونه یه کتابخونه خفن ORM هست که توی js خیلی معروفه.
برای زبان هایی مثل python و golang و rust هم کتابخونهش موجوده، و هسته اصلیش با زبان Rust نوشته شده که سرعت رو خیلی بالا میبره.
درواقع از هر ORMیی توی پایتون سریعتره و قویتر
و خبر بد، به طول کامل پروژه رو متوقف کرده و فقط داره روی TypeScript کار میکنه و در حرکتی کاملا غیرمنطقی داره هسته رو از Rust میبره روی TypeScript
برای زبان هایی مثل python و golang و rust هم کتابخونهش موجوده، و هسته اصلیش با زبان Rust نوشته شده که سرعت رو خیلی بالا میبره.
درواقع از هر ORMیی توی پایتون سریعتره و قویتر
و خبر بد، به طول کامل پروژه رو متوقف کرده و فقط داره روی TypeScript کار میکنه و در حرکتی کاملا غیرمنطقی داره هسته رو از Rust میبره روی TypeScript
🤣12❤1😢1
بزودی با کلی پست خفن برمیگردم
خیلی شلوغم این چند وقت
تایتل هاشونو اماده کردم
خیلی شلوغم این چند وقت
تایتل هاشونو اماده کردم
🔥9😢2❤1
دیتابیس PostgreSQL و MySQL: کدوم رو باید استفاده کنم؟
هرجا دنبال این بگردی فقط یه جمله میشنوی "بستگی داره" و چیز جدیدی پیدا نمیکنی؛ داخل این پست میخوام بگم چجوری انتخاب کنی
بیاید اول فرق های مهم و کلیشون رو ببینیم
دیتابیس PostgreSQL:
- فقط ۲۰ تا ۳۰ مگابایت رم اولیه نیاز داره.
- توزیع دیتابیس روی چند سرور خیلی راحته ولی سرعتش کمتره.
- ویژگی هایی بشدت زیادی داره. حتی یه زبان اختصاصی خودش هم داره.
- توی عملیات های write کردن قویتر از read عمل میکنه.
- قدرت بیشتری توی مدیریت همزمانی داره.
- کاستومایز خاصی نیاز نداره.
- حجم تقریبا بیشتری از mysql روی دیسک میگیره ( با یسری کاستومایز حل میشه )
دیتابیس MySQL:
- حداقل به ۳۰۰ مگابایت رم اولیه نیاز داره ( با کاستومایز کردن به ۲۰۰ مگابایت میرسه )
- برای توزیع دیتابیس دهن سرویس میکنه ولی سرعتش بیشتره. ( با یسری ابزار میشه یکم راحتش کرد )
- ویژگی های کمتری ساپورت میکنه.
- توی عملیات های Read خیلی بهتر عمل میکنه.
- توی همزمانی همچی گردن خودته
چجوری انتخاب کنیم؟
اگه به هرکدوم جواب بله دادی، یعنی PostgreSQL بهتره برات:
- اطلاعات حجیم و پیچیده داری؟
- پروژت شامل دادههای جغرافیایی، آرایهها، یا ساختارهای پیچیده مثل JSON هست؟
- همزمانی و مدیریت race condition ها برات مهمه؟ مثلا یهویی پول کسی race condition نخوره
کمپانی ها
هر کمپانی بزرگی رو نگاه کنی که داره از MySQL استفاده میکنه، هیچکدوم از موتور های استاندارد MySQL رو نپسندیدن و خودشون موتور اختصاصی خودشونو برای MySQL طراحی کردن مثل Uber و Meta ( البته که دلیل بر بدرد نخور بودن موتور هاش نیست، بلکه منظور اینه به کاستومایز زیادی نیاز داره )
در عوض هرکدوم که دارن از PostgreSQL استفاده میکنن، نیاز به کاستومایز خاصی نداشتن ( نهایت از یسری اکستنشن استفاده کردن ) مثل کلاودفلر
@CodingLovers_OFF
هرجا دنبال این بگردی فقط یه جمله میشنوی "بستگی داره" و چیز جدیدی پیدا نمیکنی؛ داخل این پست میخوام بگم چجوری انتخاب کنی
بیاید اول فرق های مهم و کلیشون رو ببینیم
دیتابیس PostgreSQL:
- فقط ۲۰ تا ۳۰ مگابایت رم اولیه نیاز داره.
- توزیع دیتابیس روی چند سرور خیلی راحته ولی سرعتش کمتره.
- ویژگی هایی بشدت زیادی داره. حتی یه زبان اختصاصی خودش هم داره.
- توی عملیات های write کردن قویتر از read عمل میکنه.
- قدرت بیشتری توی مدیریت همزمانی داره.
- کاستومایز خاصی نیاز نداره.
- حجم تقریبا بیشتری از mysql روی دیسک میگیره ( با یسری کاستومایز حل میشه )
دیتابیس MySQL:
- حداقل به ۳۰۰ مگابایت رم اولیه نیاز داره ( با کاستومایز کردن به ۲۰۰ مگابایت میرسه )
- برای توزیع دیتابیس دهن سرویس میکنه ولی سرعتش بیشتره. ( با یسری ابزار میشه یکم راحتش کرد )
- ویژگی های کمتری ساپورت میکنه.
- توی عملیات های Read خیلی بهتر عمل میکنه.
- توی همزمانی همچی گردن خودته
چجوری انتخاب کنیم؟
اگه به هرکدوم جواب بله دادی، یعنی PostgreSQL بهتره برات:
- اطلاعات حجیم و پیچیده داری؟
- پروژت شامل دادههای جغرافیایی، آرایهها، یا ساختارهای پیچیده مثل JSON هست؟
- همزمانی و مدیریت race condition ها برات مهمه؟ مثلا یهویی پول کسی race condition نخوره
کمپانی ها
هر کمپانی بزرگی رو نگاه کنی که داره از MySQL استفاده میکنه، هیچکدوم از موتور های استاندارد MySQL رو نپسندیدن و خودشون موتور اختصاصی خودشونو برای MySQL طراحی کردن مثل Uber و Meta ( البته که دلیل بر بدرد نخور بودن موتور هاش نیست، بلکه منظور اینه به کاستومایز زیادی نیاز داره )
در عوض هرکدوم که دارن از PostgreSQL استفاده میکنن، نیاز به کاستومایز خاصی نداشتن ( نهایت از یسری اکستنشن استفاده کردن ) مثل کلاودفلر
@CodingLovers_OFF
🔥7❤3👍1🤣1
🔥 جایگزینی برای تمام پکیج منیجر های پایتون و venv ها
ابزار uv که توی اوایل سال 2024 معرفی شده به طور کلی کارایی پروژه های پایتونی رو متحول کرده :)
❓️ حالا چی هست؟
یک ابزاری هست که با زبان Rust نوشته شده که میتونه به طور کامل یک پروژه پایتونی رو مدیریت کنه و هرکارط که به ذهنت برسه رو انجام میده. ( ۱۰۰ برابر سریعتر از pip کار میکنه )
🚀 قدرت همزمانی و نصب سریع
تصور کن پروژهای با دهها یا حتی صدها وابستگی (dependency) داری. با استفاده از UV، زمان انتظار برای راهاندازی پروژه که قبلاً ممکن بود چندین دقیقه طول بکشه، حالا به چند ثانیه کاهش پیدا میکنه!
📦 خودش venv میسازه برات
خودش با سرعتی باور نکردنی میتونه virtual environment بسازه و مدیریتش کنه.
⭐️ جایگزین pyenv
به طور کامل کارشو انجام میده و برات تمام environment variables های پروژت رو مدیریت میکنه.
🧨 چند پایتون یکجا
باهاش میتونی همزمان چند ورژن python رو نصب کنی و داشته باشی بدونه اینکه توی پایتون اصلی سیستمت اختلال ایجاد کنه.
✨️ و کلی ویژگی دیگه که ارزش امتحان داره: بیشتر بخوانید
@CodingLovers_OFF
ابزار uv که توی اوایل سال 2024 معرفی شده به طور کلی کارایی پروژه های پایتونی رو متحول کرده :)
❓️ حالا چی هست؟
یک ابزاری هست که با زبان Rust نوشته شده که میتونه به طور کامل یک پروژه پایتونی رو مدیریت کنه و هرکارط که به ذهنت برسه رو انجام میده. ( ۱۰۰ برابر سریعتر از pip کار میکنه )
🚀 قدرت همزمانی و نصب سریع
تصور کن پروژهای با دهها یا حتی صدها وابستگی (dependency) داری. با استفاده از UV، زمان انتظار برای راهاندازی پروژه که قبلاً ممکن بود چندین دقیقه طول بکشه، حالا به چند ثانیه کاهش پیدا میکنه!
📦 خودش venv میسازه برات
خودش با سرعتی باور نکردنی میتونه virtual environment بسازه و مدیریتش کنه.
⭐️ جایگزین pyenv
به طور کامل کارشو انجام میده و برات تمام environment variables های پروژت رو مدیریت میکنه.
🧨 چند پایتون یکجا
باهاش میتونی همزمان چند ورژن python رو نصب کنی و داشته باشی بدونه اینکه توی پایتون اصلی سیستمت اختلال ایجاد کنه.
✨️ و کلی ویژگی دیگه که ارزش امتحان داره: بیشتر بخوانید
@CodingLovers_OFF
❤6👍1👎1
👎4❤2
Coding Lovers
از sqlalchemy استفاده میکنین؟
خیلی سوال کردین برای جایگزین
خواستم بگم هیچ جایگزینی با این همه اپشن و قدرت نداریم
درحال حاضر بهترین ORM همینه
چیزایی مثل TortoiseOrm هم هستن که سرعتشون کمی بیشتره، اما خب اپشن های کمی دارن
سازنده FastAPI هم پیشنهادش SQLAlchemy بوده
خواستم بگم هیچ جایگزینی با این همه اپشن و قدرت نداریم
درحال حاضر بهترین ORM همینه
چیزایی مثل TortoiseOrm هم هستن که سرعتشون کمی بیشتره، اما خب اپشن های کمی دارن
سازنده FastAPI هم پیشنهادش SQLAlchemy بوده
❤7
دیگه ایرانسل اینقدر پررو شده داره تهدید میکنه
خبر پخش شده:
جمله ای که گفته:
حالا اومدن عقب نشینی کنن بدبخت نشن ( به قولی تکذیب کنن ):
خدایی با این کیفیت داغون، قطعی های موقتی ۲۰ دقیقه ایعه همین الانشون، چجوری واقعا روشون میشه :/
#تحریم_ایرانسل
خبر پخش شده:
اینترنت باید ۷۰ درصد گران شود! اگر گران نشود در طول روز ۳ ساعت اینترنت قطع می شود!
جمله ای که گفته:
اگر تعرفه اینترنت افزایش پیدا نکند، باید منتظر قطعیهای موقت روزانه اینترنت باشیم.
حالا اومدن عقب نشینی کنن بدبخت نشن ( به قولی تکذیب کنن ):
شرکت اپراتور «ایرانسل» با انتشار بیانیهای، اعلام کرد که برداشت «تهدید به قطع روزانه اینترنت» از صحبتهای اخیر «علیرضا رفیعی»، یک تفسیر نادرست رسانهای است.
با وجود قطعی روزانه برق و عدم امکان سرمایهگذاری در حوزه تأمین باتری، حفاظت و توسعه شبکه، به طور قهری با نبود برق، اینترنت نیز قطع میشود. افزایش تعرفه، تنها راهحل مشکل برق نیست؛ اما به سرمایهگذاری کمک میکند.
خدایی با این کیفیت داغون، قطعی های موقتی ۲۰ دقیقه ایعه همین الانشون، چجوری واقعا روشون میشه :/
#تحریم_ایرانسل
🤣20❤2👍1😢1
🚀 تفاوت Redis و Memcached
هردو سیستمی برای ذخیره کردن اطلاعات روی مموری هستن که برای کش کردن اطلاعات تکراری و پرکاربرد استفاده میشن.
ولی باز هم کلی تفاوت اساسی دارن.
✨️ ویژگی های memcached
- فقط و فقط استرینگ به شکل key-value نگه میداره
- فقط روی مموری نگه میداره و اگه سرور ریستارت شه، اطلاعات میپرن.
- از قابلیت multi threading پشتیبانی میکنه، یعنی همزمان میتونه به درخواستا جواب بده که باعث میشه سرعت خیلی بالاتری توی همزمانی داشته باشه
- چندین نوع دیتا رو نگه میداره
- حواسش هست حتی اگه سرور خاموش هم بشه، اطلاعات رو روی دیسک نگه میداره ( و احتمالش هست اطلاعات کمی قدیمی یا ناقص باشن، بستگی به کانفیگ شدنش داره )
- نمیتونه مالتی تردینگ باشه و درخواستارو دونه دونه جواب میده
- کلی قابلیت خفن داره مثل real time، session management، و ...
🏢 چه سازمان هایی از memcached استفاده میکنن؟ ( طبق گفته خودشون )
فیس بوک: برای کاهش تعداد درخواست به دیتابیس
توییتر: برای اطلاعات کاربران، یا توییت های تکراری
ویکیپدیا: برای صفحاتی که زیاد دیده میشن
ردیت: برای نگهداری اطلاعات موقتی
یوتیوب: برای نگهداری متادیتا ویدیو ها
🏢 چه سازمان هایی از redis استفاده میکنن؟ ( طبق گفته خودشون )
توییتر: برای ذخیره تایملاین های کاربران، داده های درلحظه
گیتهاب: برای مدیریت صف های پسزمینه
اینستاگرام: برای نگهداری داده های مربوط به فیدهای خبری
پینترست: برای کمتر کردن درخواست به دیتابیس
استکاورفلو: فقط گفته استفاده میکنه، معلوم نیس دقیقا برای چی
🔥 @CodingLovers_OFF
هردو سیستمی برای ذخیره کردن اطلاعات روی مموری هستن که برای کش کردن اطلاعات تکراری و پرکاربرد استفاده میشن.
ولی باز هم کلی تفاوت اساسی دارن.
✨️ ویژگی های memcached
- فقط و فقط استرینگ به شکل key-value نگه میداره
- فقط روی مموری نگه میداره و اگه سرور ریستارت شه، اطلاعات میپرن.
- از قابلیت multi threading پشتیبانی میکنه، یعنی همزمان میتونه به درخواستا جواب بده که باعث میشه سرعت خیلی بالاتری توی همزمانی داشته باشه
قابلیت خاصی نداره، مثل یه دیکشنری رفتار میکنه، ساختار های خاصی که داره باعث شده سرعت بشدت بشدت بالایی داشته باشه و درعین حال نسبت به کاربردی که داره، رم مناسبی مصرف میکنه📦 ویژگی های redis
- چندین نوع دیتا رو نگه میداره
- حواسش هست حتی اگه سرور خاموش هم بشه، اطلاعات رو روی دیسک نگه میداره ( و احتمالش هست اطلاعات کمی قدیمی یا ناقص باشن، بستگی به کانفیگ شدنش داره )
- نمیتونه مالتی تردینگ باشه و درخواستارو دونه دونه جواب میده
- کلی قابلیت خفن داره مثل real time، session management، و ...
واقعا یه کش پر از قابلیتعه، باهاش هر الگوریتم کشی که بخواید میتونید بسازید، و کلی نوع داده رو مدیریت کنید.
🏢 چه سازمان هایی از memcached استفاده میکنن؟ ( طبق گفته خودشون )
فیس بوک: برای کاهش تعداد درخواست به دیتابیس
توییتر: برای اطلاعات کاربران، یا توییت های تکراری
ویکیپدیا: برای صفحاتی که زیاد دیده میشن
ردیت: برای نگهداری اطلاعات موقتی
یوتیوب: برای نگهداری متادیتا ویدیو ها
🏢 چه سازمان هایی از redis استفاده میکنن؟ ( طبق گفته خودشون )
توییتر: برای ذخیره تایملاین های کاربران، داده های درلحظه
گیتهاب: برای مدیریت صف های پسزمینه
اینستاگرام: برای نگهداری داده های مربوط به فیدهای خبری
پینترست: برای کمتر کردن درخواست به دیتابیس
استکاورفلو: فقط گفته استفاده میکنه، معلوم نیس دقیقا برای چی
🔥 @CodingLovers_OFF
❤5👍2😢1
رفتم گیتهابم بعد یه مدت
یهو اینو دیدم، سیگنال میدادیم وقتی مد نبود🌟
۲۶ هزار بود اون موقع
https://github.com/AmirofficiaI
یهو اینو دیدم، سیگنال میدادیم وقتی مد نبود
۲۶ هزار بود اون موقع
https://github.com/AmirofficiaI
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤2
Coding Lovers
🔥 جایگزینی برای تمام پکیج منیجر های پایتون و venv ها ابزار uv که توی اوایل سال 2024 معرفی شده به طور کلی کارایی پروژه های پایتونی رو متحول کرده :) ❓️ حالا چی هست؟ یک ابزاری هست که با زبان Rust نوشته شده که میتونه به طور کامل یک پروژه پایتونی رو مدیریت کنه…
📦 ابزار مدیریت پروژه رسمی پایتون
قبلا درمورد uv که از بهترین هاست گفتیم، حالا بهتره یکم راجب ابزار رسمی خود پایتون حرف بزنیم.
🛠 ابزار hatch
یه ابزار مدرن و جدید برای مدیریت پروژه های پایتون هست که توسط خود pypi تایید شده و حتی داکیومنت hatch رو خود pypi با سابدامین در اختیار همه قرار داده.
هدف از این ابزار این بوده که وابستگی شما به چندین ابزار مختلف برای مدیریت پروژه رو از بین ببره.
براتون:
- پروژه هایی با ساختار های پیشنهادی خود پایتون خلق میکنه
کار pip رو انجام میده و همه پکیج هارو مدیریت میکنه
- کار venv رو انجام میده
- کار pytest رو انجام میده ( ولی خب ضعیف تره )
- بهتون برای انتشار لایبرری در pypi کمک میکنه
🚀 فرق با UV
ابزار hatch با پایتون نوشته شده و uv با Rust.
سرعت کمتری نسبت به uv داره.
ابزار uv چیزی فراتر از یک مدیریت پروژه هست و امکانات بیشتری با سرعت بیشتری میده، اما در عین حال یادگیریش خیلی سخت تره ( البته که مثل hatch کار pytest رو انجام نمیده ).
از uv برای پروژه های استفاده میکنن که سرعت CI/CD اهمیت زیادی داره.
@CodingLovers_OFF 🔥
قبلا درمورد uv که از بهترین هاست گفتیم، حالا بهتره یکم راجب ابزار رسمی خود پایتون حرف بزنیم.
🛠 ابزار hatch
یه ابزار مدرن و جدید برای مدیریت پروژه های پایتون هست که توسط خود pypi تایید شده و حتی داکیومنت hatch رو خود pypi با سابدامین در اختیار همه قرار داده.
هدف از این ابزار این بوده که وابستگی شما به چندین ابزار مختلف برای مدیریت پروژه رو از بین ببره.
براتون:
- پروژه هایی با ساختار های پیشنهادی خود پایتون خلق میکنه
کار pip رو انجام میده و همه پکیج هارو مدیریت میکنه
- کار venv رو انجام میده
- کار pytest رو انجام میده ( ولی خب ضعیف تره )
- بهتون برای انتشار لایبرری در pypi کمک میکنه
🚀 فرق با UV
ابزار hatch با پایتون نوشته شده و uv با Rust.
سرعت کمتری نسبت به uv داره.
ابزار uv چیزی فراتر از یک مدیریت پروژه هست و امکانات بیشتری با سرعت بیشتری میده، اما در عین حال یادگیریش خیلی سخت تره ( البته که مثل hatch کار pytest رو انجام نمیده ).
از uv برای پروژه های استفاده میکنن که سرعت CI/CD اهمیت زیادی داره.
@CodingLovers_OFF 🔥
👍5🤣3❤1
Coding Lovers
یکم بریم تو دل چیز هایی که کمتر بهشون توجه میشه :)
Soft Delete در مدیریت دیتابیس
برای متوجه شدن Soft delete اول باید یه نگاهی به مفهوم Hard Delete بندازیم.
کلمه ای رو تصور کنید — Hard Delete یعنی حذف کردن و پاک کردن اون کلمه به شکل کامل. ولی از اون طرف، Soft Delete یعنی قرار دادن اون کلمه در جایی به نام "دور انداخته شده". حذف شده، اما همچنان هست اگر نیازش داشته باشی.
توی دیتابیس، Hard Delete یعنی حذف کامل یک دیتا به شکل کلی اما Soft delete یعنی قرار دادنش به عنوان "حذف شده".
✨️ چرا مهمه؟
- جلوگیری از اشتباهات: یهویی اشتباهی دیتای مهمی از دیتابیس پاک بشه. با Soft Delete میتونی برش گردونی
- قانون: بسیاری از صنعت ها و شغل ها هستن که قوانینشون شمارو موظف میکنه هیچ دیتایی نباید پاک شه و تمام اطلاعات باید نگهداری بشن. خصوصا وقتی داخل ایران هستی، یکی میتونه بی دلیل ازت شکایت دروغ بکنه؛ اگه دیتا رو پاک کرده باشی هیچ مدرکی برای دفاع نداری
- حسابرسی: توی بیزینس های بزرگ، معمولا اطلاعات حذف شده هم ارزش پیدا میکنن و برای بررسی و پیشرفت مهم هستن ( خصوصا توی حسابداری و حسابرسی )
❓️ روش ها
روش های ساده ای هست که خیلی راحت به ذهن میان.
برای اطلاعات میتونید سطری به نام is_deleted در نظر بگیرید
یا میتونید برای دقیق تر شدن اطلاعات، تاریخ بزنید deleted_at
و ...
🚀 تاثیر در بهینه بودن دیتابیس
این روش در مراحل اول خیلی میتونه به سرعت کمک کنه، چون بجای DELETE کردن، شما از UPDATE استفاده میکنید و این سرعت رو بالا میبره. اما سرعت SELECT کردن شما رو به مرور زمان با بالا رفتن اطلاعات کاهش میده.
برای حفظ کردن سرعت، باید اطلاعات قدیمی رو به شکلی آرشیو کنید و از اطلاعات اصلی جدا کنید ( و یا حتی اطلاعاتی که میدونید بدرد نمیخورن رو Hard delete کنید )
@CodingLovers_OFF 🔥
برای متوجه شدن Soft delete اول باید یه نگاهی به مفهوم Hard Delete بندازیم.
کلمه ای رو تصور کنید — Hard Delete یعنی حذف کردن و پاک کردن اون کلمه به شکل کامل. ولی از اون طرف، Soft Delete یعنی قرار دادن اون کلمه در جایی به نام "دور انداخته شده". حذف شده، اما همچنان هست اگر نیازش داشته باشی.
توی دیتابیس، Hard Delete یعنی حذف کامل یک دیتا به شکل کلی اما Soft delete یعنی قرار دادنش به عنوان "حذف شده".
✨️ چرا مهمه؟
- جلوگیری از اشتباهات: یهویی اشتباهی دیتای مهمی از دیتابیس پاک بشه. با Soft Delete میتونی برش گردونی
- قانون: بسیاری از صنعت ها و شغل ها هستن که قوانینشون شمارو موظف میکنه هیچ دیتایی نباید پاک شه و تمام اطلاعات باید نگهداری بشن. خصوصا وقتی داخل ایران هستی، یکی میتونه بی دلیل ازت شکایت دروغ بکنه؛ اگه دیتا رو پاک کرده باشی هیچ مدرکی برای دفاع نداری
- حسابرسی: توی بیزینس های بزرگ، معمولا اطلاعات حذف شده هم ارزش پیدا میکنن و برای بررسی و پیشرفت مهم هستن ( خصوصا توی حسابداری و حسابرسی )
❓️ روش ها
روش های ساده ای هست که خیلی راحت به ذهن میان.
برای اطلاعات میتونید سطری به نام is_deleted در نظر بگیرید
یا میتونید برای دقیق تر شدن اطلاعات، تاریخ بزنید deleted_at
و ...
🚀 تاثیر در بهینه بودن دیتابیس
این روش در مراحل اول خیلی میتونه به سرعت کمک کنه، چون بجای DELETE کردن، شما از UPDATE استفاده میکنید و این سرعت رو بالا میبره. اما سرعت SELECT کردن شما رو به مرور زمان با بالا رفتن اطلاعات کاهش میده.
برای حفظ کردن سرعت، باید اطلاعات قدیمی رو به شکلی آرشیو کنید و از اطلاعات اصلی جدا کنید ( و یا حتی اطلاعاتی که میدونید بدرد نمیخورن رو Hard delete کنید )
@CodingLovers_OFF 🔥
❤4
Coding Lovers
Soft Delete در مدیریت دیتابیس برای متوجه شدن Soft delete اول باید یه نگاهی به مفهوم Hard Delete بندازیم. کلمه ای رو تصور کنید — Hard Delete یعنی حذف کردن و پاک کردن اون کلمه به شکل کامل. ولی از اون طرف، Soft Delete یعنی قرار دادن اون کلمه در جایی به نام "دور…
حالا در مقابل روش Soft delete، استراتژیی هست برای نگه داشتن اطلاعات حذف شده.
توی شرکت ها، اسناد قدیمی و بدرد نخور رو میریزن کجا؟ آرشیو
روش آرشیو در مدیریت دیتابیس
فرض کنید کتابخانه ای رو مدیریت میکنین. اگر بخواید کتابی را دور بندازید، میشه Hard Delete. اگه بخواید کتاب های قدیمی رو همونجا در قفسه ای به نام "حذف شده ها" بچینید، میشه Soft Delete، و اما اگه بخواید بفرستید به مکانی مثل انبار، میشه آرشیو کردن.
در روش Hard Delete، کتاب کاملا از دست رفته و قابل برگشت نیست، پس بحثی راجبش نداریم.
در روش Soft Delete، به مرور زمان کتابخونه شما تبدیل به انباریی از کتاب های حذف شده میشه. پیدا کردن کتاب های جدید سخت تر و سخت تر میشه.
در روش آرشیو، همه چیز مرتب و منظم در جای خودش قرار داره.
❓️ روش ها
چندین روش وجود داره بسته به راهی که میرید. آخرین راهی که من استفاده کردم این بوده:
بخشی (یک schema) به نام archive توی دیتابیس ساختم، تیبل هارو به همون ساختار اصلی ( گاهی با کمی تفاوت ) در archive ساختم.
با استفاده از قابلیت TRIGGER در دیتابیس ها، عملکرد های Delete رو شنود کردم و اینجوری هروقت اطلاعاتی در بخش اصلی دیتابیس حذف شد، خودکار اون اطلاعات ریخته میشن توی archive.
پ.ن: این روش زیاد مورد پسند نیست و توی بیزینس های بزرگ، از چند تا سرور مختلف استفاده میکنن، ولی خب برای من کافی بود.
🚀 تاثیر در بهینه بودن دیتابیس
باعث میشه عملکرد های DELETE سرعت خیلی پایینی پیدا میکنن و ممکنه زمانبر بشن، اما در عین حال سرعت SELECT و UPDATE رو در بالاترین حالت خودش حفظ میکنه. همچنین همیشه فضای اصلی و تیبل های اصلی کم حجم و تمیز میمونن.
@CodingLovers_OFF 🔥
توی شرکت ها، اسناد قدیمی و بدرد نخور رو میریزن کجا؟ آرشیو
روش آرشیو در مدیریت دیتابیس
فرض کنید کتابخانه ای رو مدیریت میکنین. اگر بخواید کتابی را دور بندازید، میشه Hard Delete. اگه بخواید کتاب های قدیمی رو همونجا در قفسه ای به نام "حذف شده ها" بچینید، میشه Soft Delete، و اما اگه بخواید بفرستید به مکانی مثل انبار، میشه آرشیو کردن.
در روش Hard Delete، کتاب کاملا از دست رفته و قابل برگشت نیست، پس بحثی راجبش نداریم.
در روش Soft Delete، به مرور زمان کتابخونه شما تبدیل به انباریی از کتاب های حذف شده میشه. پیدا کردن کتاب های جدید سخت تر و سخت تر میشه.
در روش آرشیو، همه چیز مرتب و منظم در جای خودش قرار داره.
❓️ روش ها
چندین روش وجود داره بسته به راهی که میرید. آخرین راهی که من استفاده کردم این بوده:
بخشی (یک schema) به نام archive توی دیتابیس ساختم، تیبل هارو به همون ساختار اصلی ( گاهی با کمی تفاوت ) در archive ساختم.
با استفاده از قابلیت TRIGGER در دیتابیس ها، عملکرد های Delete رو شنود کردم و اینجوری هروقت اطلاعاتی در بخش اصلی دیتابیس حذف شد، خودکار اون اطلاعات ریخته میشن توی archive.
پ.ن: این روش زیاد مورد پسند نیست و توی بیزینس های بزرگ، از چند تا سرور مختلف استفاده میکنن، ولی خب برای من کافی بود.
🚀 تاثیر در بهینه بودن دیتابیس
باعث میشه عملکرد های DELETE سرعت خیلی پایینی پیدا میکنن و ممکنه زمانبر بشن، اما در عین حال سرعت SELECT و UPDATE رو در بالاترین حالت خودش حفظ میکنه. همچنین همیشه فضای اصلی و تیبل های اصلی کم حجم و تمیز میمونن.
@CodingLovers_OFF 🔥
❤4👍3
سِری پست های Rate Limiting
توی این سِری پست ها میخوام الگوریتم های مختلف rate limting رو توضیح بدم. اول از همه ببینیم چه کاربردی داره؟
Rate Limit چیست؟
توضیح خاصی نداره چون همتون باهاش آشنایید. تاحالا به خطای 429 Too Many Requests برخورد کردین؟ دقیقا همونه. مکانیزمی هست برای محافظت از یک منبع دربرابر اضافهبار.
برای مثال اوایل که AWS درست شد، همچین مکانیزمی نداشتن و یه نفر فقط با فرستادن ۱ میلیون درخواست باعث شد سرویسشون دچار مشکل بشه و هزینه ی هنگفتی براشون ایجاد کنه. این دقیقا جایی بود بحث Rate limit به شکل رسانه ای بزرگ شد.
چرا Redis برای Rate Limit؟
ردیس یه ابزار محبوب برای پیاده سازی rate limit هست و دلیل خوبی داره: سرعت و اسکریپتنویسی.
همچنین atomic بودن و نگهداشتن داده ها در حافظه هم هستن.
انواع پترن ها و الگوریتم ها
- Leaky Bucket
- Token Bucket
- Fixed Window
- Sliding Window
به ترتیب روزی یکی رو توضیح میدم ( با سورس و گیف )
#ratelimit
@CodingLovers_OFF 🔥
توی این سِری پست ها میخوام الگوریتم های مختلف rate limting رو توضیح بدم. اول از همه ببینیم چه کاربردی داره؟
Rate Limit چیست؟
توضیح خاصی نداره چون همتون باهاش آشنایید. تاحالا به خطای 429 Too Many Requests برخورد کردین؟ دقیقا همونه. مکانیزمی هست برای محافظت از یک منبع دربرابر اضافهبار.
برای مثال اوایل که AWS درست شد، همچین مکانیزمی نداشتن و یه نفر فقط با فرستادن ۱ میلیون درخواست باعث شد سرویسشون دچار مشکل بشه و هزینه ی هنگفتی براشون ایجاد کنه. این دقیقا جایی بود بحث Rate limit به شکل رسانه ای بزرگ شد.
چرا Redis برای Rate Limit؟
ردیس یه ابزار محبوب برای پیاده سازی rate limit هست و دلیل خوبی داره: سرعت و اسکریپتنویسی.
همچنین atomic بودن و نگهداشتن داده ها در حافظه هم هستن.
انواع پترن ها و الگوریتم ها
- Leaky Bucket
- Token Bucket
- Fixed Window
- Sliding Window
به ترتیب روزی یکی رو توضیح میدم ( با سورس و گیف )
#ratelimit
@CodingLovers_OFF 🔥
❤11😁1
This media is not supported in your browser
VIEW IN TELEGRAM
سِری پست های Rate limit - الگوریتم Leaky Bucket
یک سطل رو با یه سوراخ کوچیک در تهه اون تصور کنین. درخواستها (آب) به سطل اضافه میشون و با سرعت ثابتی «قطره قطره» پردازش میشن و از سیل ناگهانی جلوگیری میکنن.
برای جاهایی مثل پردازش پرداخت کاربرد داره، چون قطعا نمیخواین یه کاربر همزمان ۱۰ تا ۱۰ تا پرداخت انجام بده، و باید دونه دونه پردازش بشن و باز هم قطعا نمیخواین یه کاربر ساعتی ۱۰۰ تا پرداخت انجام بده و باید یه وقفهای بینشون باشه.
همچنین برای پلتفرم های پخش انلاین هم اهمیت داره، برای مثال یه کاربر نباید بتونه همزمان چند تا پخش رو دنبال کنه تا کیفیت پخش رو بتونین تضمین کنین.
💢 ضعف
از اونجایی که یه نرخ ثابتی برای پردازش تعیین میکنین ( مثلا پردازشِ ۱۰ تا ۱۰ تا )، هیچوقت نمیتونین این نرخ ثابت رو تغییر بدین، حتی وقتی ک سیستمتون قدرت پردازشعه بالاتری داره ( درواقع این الگوریتم انعطاف پذیر نیست )
#ratelimit
@CodingLovers_OFF ❤️🔥
یک سطل رو با یه سوراخ کوچیک در تهه اون تصور کنین. درخواستها (آب) به سطل اضافه میشون و با سرعت ثابتی «قطره قطره» پردازش میشن و از سیل ناگهانی جلوگیری میکنن.
از یه سایت بخوام مثال بزنم،✨️ موارد استفاده
فرض کن کاربر ۱۰۰ تا درخواست همزمان میده، ولی تو با این الگوریتم، تو ۱۰ تا ۱۰ تا جوابشو میدی
برای جاهایی مثل پردازش پرداخت کاربرد داره، چون قطعا نمیخواین یه کاربر همزمان ۱۰ تا ۱۰ تا پرداخت انجام بده، و باید دونه دونه پردازش بشن و باز هم قطعا نمیخواین یه کاربر ساعتی ۱۰۰ تا پرداخت انجام بده و باید یه وقفهای بینشون باشه.
همچنین برای پلتفرم های پخش انلاین هم اهمیت داره، برای مثال یه کاربر نباید بتونه همزمان چند تا پخش رو دنبال کنه تا کیفیت پخش رو بتونین تضمین کنین.
💢 ضعف
از اونجایی که یه نرخ ثابتی برای پردازش تعیین میکنین ( مثلا پردازشِ ۱۰ تا ۱۰ تا )، هیچوقت نمیتونین این نرخ ثابت رو تغییر بدین، حتی وقتی ک سیستمتون قدرت پردازشعه بالاتری داره ( درواقع این الگوریتم انعطاف پذیر نیست )
#ratelimit
@CodingLovers_OFF ❤️🔥
👍6❤3
Coding Lovers
سِری پست های Rate limit - الگوریتم Leaky Bucket یک سطل رو با یه سوراخ کوچیک در تهه اون تصور کنین. درخواستها (آب) به سطل اضافه میشون و با سرعت ثابتی «قطره قطره» پردازش میشن و از سیل ناگهانی جلوگیری میکنن. از یه سایت بخوام مثال بزنم، فرض کن کاربر ۱۰۰ تا…
کدِ الگوریتمش رو وقت کنم با lua و ردیس مینویسم میزارم ( داخل پایتون )
👍10
Coding Lovers
کدِ الگوریتمش رو وقت کنم با lua و ردیس مینویسم میزارم ( داخل پایتون )
leaky_bucket_algorithm.py
1.7 KB
اینم از سورسعه الگوریتم و مثال
لذتشو ببرین 🔥
ازش حتی داخل ربات های تلگرامی هم برای جلوگیری از اسپم و تشخیصشون میتونین استفاده کنین
#ratelimit
@CodingLovers_OFF
لذتشو ببرین 🔥
ازش حتی داخل ربات های تلگرامی هم برای جلوگیری از اسپم و تشخیصشون میتونین استفاده کنین
#ratelimit
@CodingLovers_OFF
❤10🤣2