Forwarded from 𝗖𝗢𝗢𝗟𝗬 𝗖𝗢𝗗𝗘 | کولی کد
🔸 قطعا بهترین کتاب برای افرادی که علاقه مندن به شکلی ساده و شهودی وارد دنیای الگوریتمها بشن کتاب Grokking Algorithms هستش.
زیر این پست تو چنل نسخه فارسی و انگلیسی pdf این کتاب رو براتون میزارم ... 🤩
این کتاب با مثالهای واقعی و کاربردی، به شما کمک میکند الگوریتمهای پیچیده رو به سادگی درک کنید. نویسنده به جای تمرکز بر ریاضیات سنگین و پیچیده، از مثالهای روزمره مثل جستجوی تلفن یا پیدا کردن کوتاهترین مسیر استفاده میکند تا مفاهیم را به صورت تصویری و جذاب جا بیندازد.
#️⃣ #algorithm #book
🚀 @coolycode
👍5👌3❤1👎1
💎 معرفی پکیج honeypot 💎
امروز میخوام درباره یه پکیج خفن برای جنگو به اسم django-admin-honeypot صحبت کنم که به شما کمک میکنه جلوی دسترسیهای غیرمجاز به پنل ادمین پروژهتون رو بگیرین. این پکیج بهصورت حرفهای میتونه هکرها و رباتهایی که سعی دارن به پنل ادمین سایتتون دسترسی پیدا کنن رو گیر بندازه 😎
حالا django-admin-honeypot چیه؟ 🤔
خب django-admin-honeypot یه پکیج امنیتی برای Django هست که یک صفحه لاگین جعلی برای پنل ادمین شما ایجاد میکنه. این صفحه شبیه به صفحه لاگین اصلی به نظر میرسه، ولی در واقع تلهایه که کاربرهای غیرمجاز رو فریب میده تا اطلاعات ورودشون رو وارد کنن. از این طریق، شما میتونید بهراحتی متوجه بشید چه افرادی قصد دسترسی به پنل شما رو دارن. 💀
چه فایدهای داره؟ 🤷♂️
1⃣ ردیابی حملات:
شما میتونین هر کسی که سعی داره بدون اجازه وارد پنل ادمین بشه رو شناسایی کنین.
2⃣ کاهش ریسک حملات:
هکرها به اشتباه فکر میکنن وارد صفحه اصلی شدن و شما میتونین از این فرصت استفاده کنین تا حمله رو مدیریت کنین.
3⃣ سادگی استفاده:
بدون نیاز به تغییرات پیچیده توی پروژهتون، بهراحتی میتونید این پکیج رو نصب و استفاده کنین.
چطور از django-admin-honeypot استفاده کنیم؟ 🚀
1⃣ نصب پکیج
برای شروع، کافیه پکیج رو نصب کنی:
2⃣ اضافه کردن به پروژه
بعد از نصب، باید django-admin-honeypot رو به تنظیمات پروژه اضافه کنی. توی فایل
3⃣ تنظیمات URL
حالا وقتشه که یه مسیر جعلی برای پنل ادمین بسازی! توی فایل
نتیجه:
- مسیر
- مسیر
4⃣ تست و بررسی
حالا اگه کسی به
جمع بندی 🎯
فهمیدیم استفاده از django-admin-honeypot یه راه عالی برای گمراه کردن هکرها و افرادیه که سعی دارن به پنل ادمین شما دسترسی پیدا کنن. با ساختن یه تله ساده، میتونین از دسترسیهای غیرمجاز جلوگیری کنین و امنیت پروژهتون رو بالاتر ببرین.
امید وارم مفید بوده باشه :)
@ninja_learn_ir
امروز میخوام درباره یه پکیج خفن برای جنگو به اسم django-admin-honeypot صحبت کنم که به شما کمک میکنه جلوی دسترسیهای غیرمجاز به پنل ادمین پروژهتون رو بگیرین. این پکیج بهصورت حرفهای میتونه هکرها و رباتهایی که سعی دارن به پنل ادمین سایتتون دسترسی پیدا کنن رو گیر بندازه 😎
حالا django-admin-honeypot چیه؟ 🤔
خب django-admin-honeypot یه پکیج امنیتی برای Django هست که یک صفحه لاگین جعلی برای پنل ادمین شما ایجاد میکنه. این صفحه شبیه به صفحه لاگین اصلی به نظر میرسه، ولی در واقع تلهایه که کاربرهای غیرمجاز رو فریب میده تا اطلاعات ورودشون رو وارد کنن. از این طریق، شما میتونید بهراحتی متوجه بشید چه افرادی قصد دسترسی به پنل شما رو دارن. 💀
چه فایدهای داره؟ 🤷♂️
1⃣ ردیابی حملات:
شما میتونین هر کسی که سعی داره بدون اجازه وارد پنل ادمین بشه رو شناسایی کنین.
2⃣ کاهش ریسک حملات:
هکرها به اشتباه فکر میکنن وارد صفحه اصلی شدن و شما میتونین از این فرصت استفاده کنین تا حمله رو مدیریت کنین.
3⃣ سادگی استفاده:
بدون نیاز به تغییرات پیچیده توی پروژهتون، بهراحتی میتونید این پکیج رو نصب و استفاده کنین.
چطور از django-admin-honeypot استفاده کنیم؟ 🚀
1⃣ نصب پکیج
برای شروع، کافیه پکیج رو نصب کنی:
pip install django-admin-honeypot
2⃣ اضافه کردن به پروژه
بعد از نصب، باید django-admin-honeypot رو به تنظیمات پروژه اضافه کنی. توی فایل
settings.py
خط زیر رو اضافه کن:INSTALLED_APPS = [
# برنامههای دیگه
'admin_honeypot',
]
3⃣ تنظیمات URL
حالا وقتشه که یه مسیر جعلی برای پنل ادمین بسازی! توی فایل
urls.py
این تغییرات رو اعمال کن:from django.urls import path, include
import admin_honeypot.urls
urlpatterns = [
path('admin/', include('admin_honeypot.urls', namespace='admin_honeypot')),
path('real-admin/', admin.site.urls), # مسیر اصلی پنل ادمین واقعیتون
]
نتیجه:
- مسیر
/admin/
حالا صفحه جعلی ادمینه که تلهی شماست 😈 - مسیر
/real-admin/
هم مسیر واقعی پنل ادمین شماست که فقط خودتون میدونید.4⃣ تست و بررسی
حالا اگه کسی به
/admin/
بره و سعی کنه وارد پنل بشه، اطلاعات تلاشهاش توی لاگها ذخیره میشه و میتونین بررسی کنین که چه کسی سعی داشته پنل ادمین رو هک کنه. هر لاگ شامل زمان، آیپی و اطلاعات لاگین اشتباه فرد مهاجم میشه. 📜جمع بندی 🎯
فهمیدیم استفاده از django-admin-honeypot یه راه عالی برای گمراه کردن هکرها و افرادیه که سعی دارن به پنل ادمین شما دسترسی پیدا کنن. با ساختن یه تله ساده، میتونین از دسترسیهای غیرمجاز جلوگیری کنین و امنیت پروژهتون رو بالاتر ببرین.
#django #honeypot
👍12❤2🔥1👏1
Forwarded from پروگرمرزمیم (Mehan Alavimajd)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8👏3❤1😁1
💎 معرفی GraphQL و استفاده ازش 💎
اگه تا حالا اسم GraphQL به گوشتون خورده ولی نمیدونستید دقیقاً چیه و چه کاربردی داره، امروز قراره باهم برسیش کنیم و بفهمیم چرا این روزها انقدر محبوب شده🌟
حالا GraphQL چیه؟ 🤔
خب GraphQL یه زبان کوئری برای API هاست که توسط فیسبوک توی سال ۲۰۱۵ معرفی شد. این تکنولوژی به شما اجازه میده که دقیقاً همون دادههایی که نیاز دارین رو از سرور درخواست کنین. مهمترین ویژگی GraphQL اینه که به جای دریافت یه ساختار ثابت از اطلاعات، میتونین مشخص کنین چه دادههایی رو دقیقاً میخواین و چه دادههایی رو نمیخواین.
به زبان ساده، GraphQL به شما کنترل بیشتری روی دادههایی که از API میگیرین میده. 🌍
چرا از GraphQL استفاده کنیم؟ 🤷♂️
1⃣ دریافت دادههای دقیق 🎯
و پاسخ هم دقیقاً همون چیزی خواهد بود که درخواست کردین:
این یعنی فقط همون دادههایی که خواستین برمیگرده و هیچ اطلاعات اضافهای به شما داده نمیشه.
2⃣ بهینهسازی درخواستها 🚀
این بهینهسازی توی عملکرد و سرعت، تاثیر زیادی روی تجربه کاربری داره. 💡
3⃣ پشتیبانی از تکامل تدریجی 💻
1⃣ فیسبوک: همونطور که گفته شد، GraphQL توسط فیسبوک ایجاد شد و فیسبوک همچنان از اون توی بسیاری از محصولات خودش استفاده میکنه، مثل اپلیکیشن فیسبوک و اینستاگرام.
2⃣ گیت هاب: GraphQL به عنوان یک API اصلی توی GitHub استفاده میشه و شما میتونین از طریق GraphQL به اطلاعات پروژهها و کاربران GitHub دسترسی داشته باشین.
3⃣ شاپیفای (Shopify): توی پلتفرم Shopify، از GraphQL برای بهینهسازی و سرعت بخشیدن به APIها استفاده میشه.
حچطور از GraphQL استفاده کنیم؟ 🛠️
راهاندازی GraphQL توی پروژههای مختلف واقعاً سادهست. توی پلتفرمهایی مثل Django یا Node.js، پکیجها و کتابخونههای آمادهای وجود دارن که شما میتونین سریعاً ازشون استفاده کنین.
برای مثال، در Django، شما میتونین با استفاده از Graphene-Django خیلی راحت یه API GraphQL بسازین.
توجه ⚠️:
این فقط یه مثال ساده برای شروع هستش:
و بعد توی پروژهتون:
این کد یه کوئری ساده به اسم
جمعبندی 🎯
فهمیدیم GraphQL با انعطافپذیری و سرعت بالا، باعث میشه که APIهای بهتری طراحی کنین و تجربه کاربری بهتری ارائه بدین.
امید وارم مفید بوده باشه :)
@ninja_learn_ir
اگه تا حالا اسم GraphQL به گوشتون خورده ولی نمیدونستید دقیقاً چیه و چه کاربردی داره، امروز قراره باهم برسیش کنیم و بفهمیم چرا این روزها انقدر محبوب شده🌟
حالا GraphQL چیه؟ 🤔
خب GraphQL یه زبان کوئری برای API هاست که توسط فیسبوک توی سال ۲۰۱۵ معرفی شد. این تکنولوژی به شما اجازه میده که دقیقاً همون دادههایی که نیاز دارین رو از سرور درخواست کنین. مهمترین ویژگی GraphQL اینه که به جای دریافت یه ساختار ثابت از اطلاعات، میتونین مشخص کنین چه دادههایی رو دقیقاً میخواین و چه دادههایی رو نمیخواین.
به زبان ساده، GraphQL به شما کنترل بیشتری روی دادههایی که از API میگیرین میده. 🌍
چرا از GraphQL استفاده کنیم؟ 🤷♂️
1⃣ دریافت دادههای دقیق 🎯
یکی از بزرگترین مشکلاتی که معماریهای سنتی API دارن اینه که گاهی دادههایی که لازم نداریم رو هم به ما برمیگردونن. GraphQL این مشکل رو حل کرده. شما توی GraphQL میتونین کاملاً مشخص کنین که چه فیلدهایی از دادهها رو نیاز دارین و فقط همونها رو از سرور بگیرین.مثال: فرض کنین میخواین فقط اسم و ایمیل کاربر رو از API بگیرین. کوئری GraphQL میتونه اینطوری باشه:
{
user(id: 1) {
name
}
}
و پاسخ هم دقیقاً همون چیزی خواهد بود که درخواست کردین:
{
"data": {
"user": {
"name": "Ali",
"email": "[email protected]"
}
}
}
این یعنی فقط همون دادههایی که خواستین برمیگرده و هیچ اطلاعات اضافهای به شما داده نمیشه.
2⃣ بهینهسازی درخواستها 🚀
یکی از مشکلات رایج توی APIهای سنتی، تعداد زیاد درخواستها (requests) برای گرفتن اطلاعات مختلفه. GraphQL به شما این امکان رو میده که با یک درخواست همه دادههای مورد نیازتون رو بگیرین. شما میتونین توی یه کوئری، اطلاعات از چندین منبع مختلف رو دریافت کنین و نیازی به ارسال چندین درخواست نیست.مثال: فرض کنین میخواین اطلاعات کاربر، لیست سفارشها و محصولاتی که خریده رو بگیرین. کوئری GraphQL بهراحتی این اطلاعات رو توی یک درخواست برمیگردونه:
{
user(id: 1) {
name
orders {
id
product {
name
price
}
}
}
}
این بهینهسازی توی عملکرد و سرعت، تاثیر زیادی روی تجربه کاربری داره. 💡
3⃣ پشتیبانی از تکامل تدریجی 💻
یکی از ویژگیهای مهم GraphQL اینه که بهراحتی میتونین API خودتون رو بدون اینکه تغییرات بزرگی به وجود بیارین، توسعه بدین. این یعنی میتونین فیلدهای جدیدی به دادههاتون اضافه کنین بدون اینکه نیاز به تغییر توی کل API داشته باشین. این قابلیت، انعطافپذیری زیادی توی توسعه و نگهداری API داره.4⃣ مستندات خودکار 📚
یکی دیگه از ویژگیهای عالی GraphQL، مستندسازی خودکارشه. از اونجایی که GraphQL یک سیستم تایپینگ قوی داره، میتونه بهصورت خودکار مستندات API رو بسازه و شما همیشه مستندات بهروز و کاملی دارین. این خیلی به درد تیمهای توسعهای میخوره که از پروژههای مختلف استفاده میکنن و همیشه باید به مستندات دقیق دسترسی داشته باشن.کاربردهای واقعی GraphQL 📈
1⃣ فیسبوک: همونطور که گفته شد، GraphQL توسط فیسبوک ایجاد شد و فیسبوک همچنان از اون توی بسیاری از محصولات خودش استفاده میکنه، مثل اپلیکیشن فیسبوک و اینستاگرام.
2⃣ گیت هاب: GraphQL به عنوان یک API اصلی توی GitHub استفاده میشه و شما میتونین از طریق GraphQL به اطلاعات پروژهها و کاربران GitHub دسترسی داشته باشین.
3⃣ شاپیفای (Shopify): توی پلتفرم Shopify، از GraphQL برای بهینهسازی و سرعت بخشیدن به APIها استفاده میشه.
حچطور از GraphQL استفاده کنیم؟ 🛠️
راهاندازی GraphQL توی پروژههای مختلف واقعاً سادهست. توی پلتفرمهایی مثل Django یا Node.js، پکیجها و کتابخونههای آمادهای وجود دارن که شما میتونین سریعاً ازشون استفاده کنین.
برای مثال، در Django، شما میتونین با استفاده از Graphene-Django خیلی راحت یه API GraphQL بسازین.
توجه ⚠️:
این فقط یه مثال ساده برای شروع هستش:
pip install graphene-django
و بعد توی پروژهتون:
import graphene
class Query(graphene.ObjectType):
hello = graphene.String()
def resolve_hello(self, info):
return "Hello, world!"
schema = graphene.Schema(query=Query)
این کد یه کوئری ساده به اسم
hello
میسازه که وقتی از GraphQL درخواست بشه، مقدار "Hello, world!"
رو برمیگردونه.جمعبندی 🎯
فهمیدیم GraphQL با انعطافپذیری و سرعت بالا، باعث میشه که APIهای بهتری طراحی کنین و تجربه کاربری بهتری ارائه بدین.
#django #api #graphql
🔥16👍3❤2
پینوشت:
تو GraphQL، فقط همون دادهای که میخوای رو میگیری، بدون نیاز به تنظیمات اضافه روی سرور. مثلاً با این درخواست فقط اسم و ایمیل رو میگیری:
درسته که تو REST هم میتونی با سریالایزرها دادههای اضافی رو حذف کنی، ولی تو GraphQL از همون اول کاربر تعیین میکنه که چه اطلاعاتی رو میخواد، بدون دردسر سریالایزر و فیلتر.
تو GraphQL، فقط همون دادهای که میخوای رو میگیری، بدون نیاز به تنظیمات اضافه روی سرور. مثلاً با این درخواست فقط اسم و ایمیل رو میگیری:
{
user(id: 1) {
name
}
}
درسته که تو REST هم میتونی با سریالایزرها دادههای اضافی رو حذف کنی، ولی تو GraphQL از همون اول کاربر تعیین میکنه که چه اطلاعاتی رو میخواد، بدون دردسر سریالایزر و فیلتر.
🔥18👍4❤3
Ninja Learn | نینجا لرن
💎 معرفی GraphQL و استفاده ازش 💎 اگه تا حالا اسم GraphQL به گوشتون خورده ولی نمیدونستید دقیقاً چیه و چه کاربردی داره، امروز قراره باهم برسیش کنیم و بفهمیم چرا این روزها انقدر محبوب شده🌟 حالا GraphQL چیه؟ 🤔 خب GraphQL یه زبان کوئری برای API هاست که توسط…
دوستان ممنون میشم از ما با ریکشن و شیر کردن حمایت کنید 🙂
❤🔥17
🔥6❤1
Ninja Learn | نینجا لرن
پست بعدی راجب MongoDB باشه؟ 🧐
وصد البته نحوه استفاده ازش توی جنگو (django) و نود (node) رو هم میزارم 😁
👍14🔥3❤2
💎معرفی دیتابیس MongoDB 💎
دیتابیس MongoDB یکی از محبوبترین دیتابیسهای NoSQL تو دنیای امروزه.
به جای اینکه مثل دیتابیسهای رابطهای (مثل MySQL یا PostgreSQL) از جداول و ردیفها استفاده کنه، اطلاعات رو به شکل Document ذخیره میکنه که ساختارش خیلی شبیه به JSON هست.
هر داکیومنت میتونه شامل انواع مختلفی از دادهها باشه، و مهمتر از همه، هیچ محدودیتی هم روی ساختار دادهها وجود نداره.
حالا چرا MongoDB انقدر محبوبه؟
1⃣ انعطافپذیری بالا :
توی MongoDB، نیازی نیست برای همه رکوردها یک ساختار ثابت داشته باشی.
مثلاً توی یه دیتابیس سنتی اگه یک فیلد جدید اضافه کنی باید اون فیلد رو به همه رکوردها اضافه کنی.
اما توی Mongo، هر Document میتونه فیلدهای خاص خودش رو داشته باشه. یعنی اگه توی یک داکویمنت مثلاً فیلد "address" داشته باشی و توی داکیومنت دیگه نداشته باشی، هیچ مشکلی پیش نمیاد.
مثال:
2⃣ مقیاسپذیری بالا
اگه یه پروژه خیلی بزرگ داشته باشی که نیاز به مقیاسپذیری بالا داره (مثلاً یه فروشگاه اینترنتی با میلیونها کاربر)، MongoDB میتونه راحت با افزایش حجم دادهها سازگار بشه. Sharding توی Mongo بهت کمک میکنه که دیتابیس رو روی چندین سرور تقسیم کنی و عملکرد رو بالا ببری.
3⃣ سرعت بالا در خوندن و نوشتن دادهها:
چون MongoDB داکیومنت ها رو به صورت ساده و با ساختار JSON-گونه ذخیره میکنه، خوندن و نوشتن دادهها خیلی سریعتر از بعضی دیتابیسهای سنتی انجام میشه. این ویژگی به خصوص برای اپلیکیشنهایی که دادههای زیاد و پویا دارن خیلی مفیده.
4⃣ مناسب برای دادههای پیچیده و پویا
تو برنامههایی که دادههاشون خیلی سریع تغییر میکنه و یا نوع دادهها ممکنه پیچیده باشه (مثل پروژههای اینترنت اشیا، شبکههای اجتماعی یا اپلیکیشنهای موبایل)، MongoDB انتخاب بهتریه. چون لازم نیست هر دفعه که ساختار دادت عوض میشه، کل دیتابیس رو دوباره طراحی کنی.
حالا MongoDB چطور کار میکنه؟🤔
دادهها توی MongoDB به شکل مجموعهای از اسناد ذخیره میشن. هر سند مثل یک فایل JSON عمل میکنه. برای کار با Mongo، نیازی نیست اول دیتابیس و جداول رو مثل سیستمهای رابطهای تعریف کنی. هر وقت داکیومنتی رو به Mongo اضافه کنی، خودش به صورت خودکار دیتابیس و کالکشنها (معادل جدول توی دیتابیسهای رابطهای) رو ایجاد میکنه.
مثال از یک داکویمنت در MongoDB:
این داکیومنت شامل یه _id یکتا است که MongoDB خودش به طور خودکار تولید میکنه
❓چرا MongoDB؟
1⃣ انعطافپذیری توی ساختار داده (Schema less)
2⃣ مقیاس پذیری:
مناسب برای پروژههای بزرگ
3⃣ سرعت بالا:
سادگی استفاده و خواندن دادههای حجیم
4⃣ سادگی استفاده:
راحت و بدون درد
جمع بندی 🎯
فهمیدیمMongoDB انتخاب خوبیه برای وقتی که پروژهت نیاز به تغییرات سریع داره، دادهها ساختار پیچیدهای دارن، یا حجم بالایی از دادهها رو باید ذخیره کنی. به همین خاطر کمپانی های بزرگ مثل Uber ،Lyft، eBay از MongoDB استفاده میکنن.
امیدوارم مفید بود باشه :)
@ninja_learn_ir
دیتابیس MongoDB یکی از محبوبترین دیتابیسهای NoSQL تو دنیای امروزه.
به جای اینکه مثل دیتابیسهای رابطهای (مثل MySQL یا PostgreSQL) از جداول و ردیفها استفاده کنه، اطلاعات رو به شکل Document ذخیره میکنه که ساختارش خیلی شبیه به JSON هست.
هر داکیومنت میتونه شامل انواع مختلفی از دادهها باشه، و مهمتر از همه، هیچ محدودیتی هم روی ساختار دادهها وجود نداره.
حالا چرا MongoDB انقدر محبوبه؟
1⃣ انعطافپذیری بالا :
توی MongoDB، نیازی نیست برای همه رکوردها یک ساختار ثابت داشته باشی.
مثلاً توی یه دیتابیس سنتی اگه یک فیلد جدید اضافه کنی باید اون فیلد رو به همه رکوردها اضافه کنی.
اما توی Mongo، هر Document میتونه فیلدهای خاص خودش رو داشته باشه. یعنی اگه توی یک داکویمنت مثلاً فیلد "address" داشته باشی و توی داکیومنت دیگه نداشته باشی، هیچ مشکلی پیش نمیاد.
مثال:
{
"name": "Ali",
"age": 25,
"email": "[email protected]"
}
{
"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
👍7❤5🔥3
📌 استفاده از MongoDB توی جنگو
چون جنگو بهصورت پیشفرض با دیتابیسهای رابطهای (مثل SQLite، PostgreSQL و MySQL) کار میکنه، باید از پکیجهایی استفاده کنیم که جنگو رو با MongoDB هماهنگ کنن. یکی از بهترین راهها استفاده از djongo یا Django MongoDB Engine هست.
استفاده از MongoDB توی Django:
1⃣ نصب MongoDB و Djongo
اول از همه باید MongoDB روی سیستمت نصب باشه. اگه هنوز نصب نکردی، میتونی از سایت رسمی
استفاده کنی.
بعد از اون، باید پکیج djongo رو نصب کنی تا جنگو بتونه با MongoDB کار کنه. برای نصبش این دستور رو توی ترمینال اجرا کن:
2⃣ تنظیمات جنگو برای استفاده از MongoDB
حالا باید تنظیمات پایگاه داده رو توی فایل settings.py پروژه جنگو تغییر بدی. توی بخش DATABASES، بجای تنظیمات دیتابیس پیشفرض، این رو وارد کن:
به همین راحتی جنگو رو با MongoDB هماهنگ کردیم. دقت کن که اگه اسم دیتابیس رو وارد نکنیم، MongoDB خودش بهصورت خودکار یه دیتابیس با همون اسم پروژه میسازه.
3⃣ استفاده از مدلها (Models)
بعد از تنظیمات دیتابیس، دیگه مثل همیشه میتونی از مدلهای جنگو استفاده کنی. جنگو با استفاده از ORM خودش مستقیماً به MongoDB متصل میشه. مثلاً فرض کن میخوای یه مدل ساده برای محصولات تعریف کنی:
این مدل رو مثل هر مدل دیگهای میتونی با دستورات معمول migrate و makemigrations به دیتابیس MongoDB بفرستی:
4⃣ مدیریت دادهها
بعد از اینکه مدلها رو ساختی و دیتابیس آماده شد، مثل همیشه میتونی از ادمین پنل جنگو، یا خود کد برای ایجاد و مدیریت دادهها استفاده کنی. برای ایجاد داده:
5⃣ استفاده از Robo 3T برای مدیریت MongoDB
برای مدیریت بهتر دیتابیس MongoDB، میتونی از ابزارهایی مثل Robo 3T استفاده کنی که یه رابط گرافیکی داره و کار با MongoDB رو راحتتر میکنه.
چون جنگو بهصورت پیشفرض با دیتابیسهای رابطهای (مثل SQLite، PostgreSQL و MySQL) کار میکنه، باید از پکیجهایی استفاده کنیم که جنگو رو با MongoDB هماهنگ کنن. یکی از بهترین راهها استفاده از djongo یا Django MongoDB Engine هست.
استفاده از MongoDB توی Django:
1⃣ نصب MongoDB و Djongo
اول از همه باید MongoDB روی سیستمت نصب باشه. اگه هنوز نصب نکردی، میتونی از سایت رسمی
استفاده کنی.
بعد از اون، باید پکیج djongo رو نصب کنی تا جنگو بتونه با MongoDB کار کنه. برای نصبش این دستور رو توی ترمینال اجرا کن:
pip install djongo
2⃣ تنظیمات جنگو برای استفاده از MongoDB
حالا باید تنظیمات پایگاه داده رو توی فایل settings.py پروژه جنگو تغییر بدی. توی بخش DATABASES، بجای تنظیمات دیتابیس پیشفرض، این رو وارد کن:
DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'mydatabase', # نام دیتابیس مورد نظر
}
}
به همین راحتی جنگو رو با MongoDB هماهنگ کردیم. دقت کن که اگه اسم دیتابیس رو وارد نکنیم، MongoDB خودش بهصورت خودکار یه دیتابیس با همون اسم پروژه میسازه.
3⃣ استفاده از مدلها (Models)
بعد از تنظیمات دیتابیس، دیگه مثل همیشه میتونی از مدلهای جنگو استفاده کنی. جنگو با استفاده از ORM خودش مستقیماً به MongoDB متصل میشه. مثلاً فرض کن میخوای یه مدل ساده برای محصولات تعریف کنی:
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.FloatField()
description = models.TextField()
def str(self):
return self.name
این مدل رو مثل هر مدل دیگهای میتونی با دستورات معمول migrate و makemigrations به دیتابیس MongoDB بفرستی:
python manage.py makemigrations
python manage.py migrate
4⃣ مدیریت دادهها
بعد از اینکه مدلها رو ساختی و دیتابیس آماده شد، مثل همیشه میتونی از ادمین پنل جنگو، یا خود کد برای ایجاد و مدیریت دادهها استفاده کنی. برای ایجاد داده:
from .models import Product
product = Product(name="Phone", price=500, description="Smartphone with 4GB RAM")
product.save()
5⃣ استفاده از Robo 3T برای مدیریت MongoDB
برای مدیریت بهتر دیتابیس MongoDB، میتونی از ابزارهایی مثل Robo 3T استفاده کنی که یه رابط گرافیکی داره و کار با MongoDB رو راحتتر میکنه.
❤8
📌 استفاده از MongoDB در Node.js
بهترین و رایجترین راه استفاده از کتابخونه Mongoose هست که به عنوان یک ORM (Object-Relational Mapping) برای MongoDB عمل میکنه و کار با دادهها رو خیلی سادهتر میکنه.
استفاده از MongoDB توی Node.js:
1⃣ نصب MongoDB و Mongoose
اول از همه باید MongoDB روی سیستمت نصب باشه. اگه نصب نیست، میتونی از سایت رسمی
استفاده کنی. یا از نسخه ابری MongoDB Atlas هم میتونی استفاده کنی.
بعد از اون باید Mongoose رو توی پروژهات نصب کنی. برای این کار، این دستور رو توی ترمینال پروژهت اجرا کن:
2⃣ اتصال به MongoDB
حالا که Mongoose نصب شد، میتونی ازش استفاده کنی تا به دیتابیس MongoDB متصل بشی. یه فایل app.js ایجاد کن و کد زیر رو توش بنویس:
این کد به دیتابیس محلی MongoDB وصل میشه (البته به جای mydatabase اسم دیتابیسی که میخوای رو بزار).
3⃣ تعریف مدلها (Schemas)
بعد از اتصال، میتونی از Mongoose برای تعریف مدلها استفاده کنی. مثلاً فرض کن میخوای یه مدل برای محصولات داشته باشی. اول یه فایل جدید به اسم models/product.js بساز و کد زیر رو توش بنویس:
توی اینجا یک Schema تعریف کردیم که شامل نام، قیمت، توضیحات و موجودی محصول هست.
4⃣ اضافه کردن داده به MongoDB
حالا که مدل محصول رو تعریف کردی، میتونی دادههایی رو به دیتابیس اضافه کنی. توی فایل app.js کدی مثل این رو اضافه کن:
با اجرای این کد، یه محصول جدید به دیتابیس MongoDB اضافه میشه.
5⃣ خواندن دادهها از MongoDB
برای خواندن دادهها از دیتابیس هم میتونی از این کد استفاده کنی:
این کد همه محصولات موجود توی دیتابیس رو برمیگردونه و نمایش میده.
🆕 آپدیت و حذف دادهها
برای آپدیت یک محصول:
و برای حذف یک محصول:
بهترین و رایجترین راه استفاده از کتابخونه Mongoose هست که به عنوان یک ORM (Object-Relational Mapping) برای MongoDB عمل میکنه و کار با دادهها رو خیلی سادهتر میکنه.
استفاده از MongoDB توی Node.js:
1⃣ نصب MongoDB و Mongoose
اول از همه باید MongoDB روی سیستمت نصب باشه. اگه نصب نیست، میتونی از سایت رسمی
استفاده کنی. یا از نسخه ابری MongoDB Atlas هم میتونی استفاده کنی.
بعد از اون باید Mongoose رو توی پروژهات نصب کنی. برای این کار، این دستور رو توی ترمینال پروژهت اجرا کن:
npm install mongoose
2⃣ اتصال به MongoDB
حالا که Mongoose نصب شد، میتونی ازش استفاده کنی تا به دیتابیس MongoDB متصل بشی. یه فایل app.js ایجاد کن و کد زیر رو توش بنویس:
const mongoose = require('mongoose');
// اتصال به MongoDB
mongoose.connect('mongodb://localhost:27017/mydatabase', {
useNewUrlParser: true,
useUnifiedTopology: true
}).then(() => {
console.log('Connected to MongoDB');
}).catch((err) => {
console.error('Error connecting to MongoDB:', err);
});
این کد به دیتابیس محلی MongoDB وصل میشه (البته به جای mydatabase اسم دیتابیسی که میخوای رو بزار).
3⃣ تعریف مدلها (Schemas)
بعد از اتصال، میتونی از Mongoose برای تعریف مدلها استفاده کنی. مثلاً فرض کن میخوای یه مدل برای محصولات داشته باشی. اول یه فایل جدید به اسم models/product.js بساز و کد زیر رو توش بنویس:
const mongoose = require('mongoose');
// تعریف اسکیمای محصول
const productSchema = new mongoose.Schema({
name: { type: String, required: true },
price: { type: Number, required: true },
description: String,
stock: { type: Number, default: 0 }
});
// ساخت مدل محصول از روی اسکیمای تعریفشده
const Product = mongoose.model('Product', productSchema);
module.exports = Product;
توی اینجا یک Schema تعریف کردیم که شامل نام، قیمت، توضیحات و موجودی محصول هست.
4⃣ اضافه کردن داده به MongoDB
حالا که مدل محصول رو تعریف کردی، میتونی دادههایی رو به دیتابیس اضافه کنی. توی فایل app.js کدی مثل این رو اضافه کن:
const Product = require('./models/product');
// ایجاد و ذخیره یک محصول جدید
const newProduct = new Product({
name: 'Phone',
price: 500,
description: 'Smartphone with 4GB RAM',
stock: 10
});
newProduct.save().then(() => {
console.log('Product saved successfully');
}).catch((err) => {
console.error('Error saving product:', err);
});
با اجرای این کد، یه محصول جدید به دیتابیس MongoDB اضافه میشه.
5⃣ خواندن دادهها از MongoDB
برای خواندن دادهها از دیتابیس هم میتونی از این کد استفاده کنی:
Product.find().then((products) => {
console.log(products);
}).catch((err) => {
console.error('Error fetching products:', err);
});
این کد همه محصولات موجود توی دیتابیس رو برمیگردونه و نمایش میده.
🆕 آپدیت و حذف دادهها
برای آپدیت یک محصول:
Product.findByIdAndUpdate(productId, { price: 600 }).then(() => {
console.log('Product updated successfully');
}).catch((err) => {
console.error('Error updating product:', err);
});
و برای حذف یک محصول:
Product.findByIdAndDelete(productId).then(() => {
console.log('Product deleted successfully');
}).catch((err) => {
console.error('Error deleting product:', err);
});
❤9
چطور یه اپ مقیاسپذیر بسازیم ❓
امروز میخوایم درباره اینکه چطور میشه یه اپ خفن و مقیاسپذیر درست کرد صحبت کنیم. این موضوع واقعاً مهمه و به درد هر کسی که میخواد یه پروژه بزرگ و خوب بسازه میخوره. پس بیاید ببینیم چه کارهایی میتونیم بکنیم تا اپهامون رو حسابی قوی کنیم.
1⃣ معماری درست رو بچینید
اولین چیزی که باید بهش توجه کنید، طراحی معماری مناسب با اندازه و نیاز پروژهتونه. بعضی وقتا معماری ساده مثل Monolithic (یعنی همه چیز توی یه جا) برای یه پروژه کوچیک یا متوسط کافیه. ولی اگر پروژه بزرگتره و انتظار رشد سریع دارید، میتونید به سمت معماریهایی مثل Microservices برید که بهتون اجازه میده بخشهای مختلف اپ رو مستقل مدیریت کنید.
2⃣ کد رو ماژولار کنید
ماژولار نوشتن کد یعنی هر قسمت باید وظیفه مشخصی داشته باشه و راحت قابل تغییر باشه. اینطوری اگر بعداً نیاز به تغییر داشتید، کارتون خیلی راحتتر میشه.
مثال: به جای اینکه همهچیز رو توی یه فایل بزرگ بریزید، میتونید هر ویژگی رو توی یه ماژول جداگانه قرار بدید. مثلاً ماژولهای جداگانه برای اعتبارسنجی کاربر، مدیریت محصولات و پردازش پرداختها داشته باشید.
3⃣ فرمت کردن کد بصورت استاندارد
استفاد از کد فورمترا باعث میشع کد شما هم خوانا باشه و هم نگهداریش راحتتر. از ابزارهایی مثل ESLint برای جاوااسکریپت یا Black برای پایتون استفاده کنید تا کد شما رو بررسی کنن و بصورت درست و اصولی کد رو فرمت کنند.
4⃣ تست بنویسید
تستهای واحد و یکپارچه خیلی مهمن. اینا به شما کمک میکنن مطمئن بشید که کد شما درست کار میکنه و وقتی تغییری میزنید، مشکلی پیش نمیاد.
مثال: اگه برای یک تابع که قیمت نهایی یه محصول رو محاسبه میکنه، تست نوشتید، با خیال راحت میتونید الگوریتم رو تغییر بدید.
5⃣ کش کردن رو فراموش نکنید
کش کردن دادهها میتونه به شدت بار سرور رو کم کنه و سرعت اپلیکیشن رو بالا ببره. به جای اینکه هر بار اطلاعات رو از دیتابیس بخونید، میتونید اونها رو توی حافظه موقتی ذخیره کنید.
مثال: اگر اطلاعات محصولات رو توی کش ذخیره کنید، کاربران سریعتر به اطلاعات دسترسی پیدا میکنن و بار سرور هم کمتر میشه.
6⃣ نظارت و مانیتورینگ
نظارت بر عملکرد اپلیکیشن و جمع کردن لاگها به شما کمک میکنه تا مشکلات رو سریعتر پیدا کنید. ابزارهایی مثل Prometheus و Grafana خیلی مفیدن و میتونید باهاشون به راحتی عملکرد سرور و اپلیکیشن رو زیر نظر بگیرید.
8⃣ مستندات و کدنویسی خوانا
مستندات خوب و کد خوانا خیلی مهمه. وقتی که دولوپر جدید به تیم اضافه میشه، با مستندات و کدهای خوب میتونه به راحتی با پروژه آشنا بشه.
✅ جمعبندی
با رعایت این نکات میتونید اپلیکیشنهایی بسازید که هم مقیاسپذیر باشن و هم کدهای قابل نگهداری داشته باشن. این موضوع باعث میشه کارایی اپلیکیشن شما بالا بره و همچنین زمان و هزینه نگهداری رو کم کنه.
امید وارم مفید بوده باشع :)
@ninja_learn_ir
امروز میخوایم درباره اینکه چطور میشه یه اپ خفن و مقیاسپذیر درست کرد صحبت کنیم. این موضوع واقعاً مهمه و به درد هر کسی که میخواد یه پروژه بزرگ و خوب بسازه میخوره. پس بیاید ببینیم چه کارهایی میتونیم بکنیم تا اپهامون رو حسابی قوی کنیم.
1⃣ معماری درست رو بچینید
اولین چیزی که باید بهش توجه کنید، طراحی معماری مناسب با اندازه و نیاز پروژهتونه. بعضی وقتا معماری ساده مثل Monolithic (یعنی همه چیز توی یه جا) برای یه پروژه کوچیک یا متوسط کافیه. ولی اگر پروژه بزرگتره و انتظار رشد سریع دارید، میتونید به سمت معماریهایی مثل Microservices برید که بهتون اجازه میده بخشهای مختلف اپ رو مستقل مدیریت کنید.
2⃣ کد رو ماژولار کنید
ماژولار نوشتن کد یعنی هر قسمت باید وظیفه مشخصی داشته باشه و راحت قابل تغییر باشه. اینطوری اگر بعداً نیاز به تغییر داشتید، کارتون خیلی راحتتر میشه.
مثال: به جای اینکه همهچیز رو توی یه فایل بزرگ بریزید، میتونید هر ویژگی رو توی یه ماژول جداگانه قرار بدید. مثلاً ماژولهای جداگانه برای اعتبارسنجی کاربر، مدیریت محصولات و پردازش پرداختها داشته باشید.
3⃣ فرمت کردن کد بصورت استاندارد
استفاد از کد فورمترا باعث میشع کد شما هم خوانا باشه و هم نگهداریش راحتتر. از ابزارهایی مثل ESLint برای جاوااسکریپت یا Black برای پایتون استفاده کنید تا کد شما رو بررسی کنن و بصورت درست و اصولی کد رو فرمت کنند.
4⃣ تست بنویسید
تستهای واحد و یکپارچه خیلی مهمن. اینا به شما کمک میکنن مطمئن بشید که کد شما درست کار میکنه و وقتی تغییری میزنید، مشکلی پیش نمیاد.
مثال: اگه برای یک تابع که قیمت نهایی یه محصول رو محاسبه میکنه، تست نوشتید، با خیال راحت میتونید الگوریتم رو تغییر بدید.
5⃣ کش کردن رو فراموش نکنید
کش کردن دادهها میتونه به شدت بار سرور رو کم کنه و سرعت اپلیکیشن رو بالا ببره. به جای اینکه هر بار اطلاعات رو از دیتابیس بخونید، میتونید اونها رو توی حافظه موقتی ذخیره کنید.
مثال: اگر اطلاعات محصولات رو توی کش ذخیره کنید، کاربران سریعتر به اطلاعات دسترسی پیدا میکنن و بار سرور هم کمتر میشه.
6⃣ نظارت و مانیتورینگ
نظارت بر عملکرد اپلیکیشن و جمع کردن لاگها به شما کمک میکنه تا مشکلات رو سریعتر پیدا کنید. ابزارهایی مثل Prometheus و Grafana خیلی مفیدن و میتونید باهاشون به راحتی عملکرد سرور و اپلیکیشن رو زیر نظر بگیرید.
8⃣ مستندات و کدنویسی خوانا
مستندات خوب و کد خوانا خیلی مهمه. وقتی که دولوپر جدید به تیم اضافه میشه، با مستندات و کدهای خوب میتونه به راحتی با پروژه آشنا بشه.
✅ جمعبندی
با رعایت این نکات میتونید اپلیکیشنهایی بسازید که هم مقیاسپذیر باشن و هم کدهای قابل نگهداری داشته باشن. این موضوع باعث میشه کارایی اپلیکیشن شما بالا بره و همچنین زمان و هزینه نگهداری رو کم کنه.
#text
❤11👍3🔥2
دانشمندان چینی با استفاده از یه رایانه کوانتومی تونستن الگوریتم های رمز نگاری AES و RSA رو بشکنن 😐
این الگوریتم ها توی تبادل اطلاعات نظامی و بانکی استفاده میشه 😄
این الگوریتم ها توی تبادل اطلاعات نظامی و بانکی استفاده میشه 😄
🔥11❤2😁2☃1👍1
💎توضیح Dirty Read، Non-Repeatable Read، Phantom Read و Deadlock 💎
خب بچهها امروز میخوایم درباره چند تا مشکل رایج توی تراکنشهای دیتابیس حرف بزنیم که ممکنه به دردتون بخوره. وقتی چند تا تراکنش به صورت همزمان توی دیتابیس کار میکنن، بعضی وقتا اتفاقای غیرمنتظرهای میافته که ممکنه به بینظمی و باگ منجر بشه. این مشکلات شامل Dirty Read، Non-Repeatable Read، Phantom Read و Deadlock هستن. بیاید دونه دونه بررسیشون کنیم.
اول Dirty Read 💾
خب Dirty Read یعنی وقتی یه تراکنش دادههایی رو میخونه که هنوز توسط یه تراکنش دیگه نهایی (commit) نشده. این یعنی شما دارید چیزی رو میخونید که ممکنه عوض بشه یا حتی برگرده.
مثال: فرض کن یکی توی اپلیکیشن شما داره اطلاعات یه سفارش رو تغییر میده ولی هنوز تغییرات رو ذخیره نکرده. حالا یه کاربر دیگه همون سفارش رو میبینه و تصمیم میگیره. اگر اون تغییرات نهایی نشن، اطلاعات اشتباهی به کاربر دوم رسیده.
دوم Non-Repeatable Read 🔄
خب Non-Repeatable Read وقتی پیش میاد که یه تراکنش، دادهای رو چند بار میخونه و دفعههای بعدی اون داده فرق میکنه، چون یه تراکنش دیگه اومده و اون داده رو وسط کار تغییر داده.
مثال: شما قیمت یه محصول رو برای یه مشتری نشون میدید. همزمان یه کاربر دیگه قیمت همون محصول رو تغییر میده. وقتی مشتری دوباره صفحه رو رفرش کنه، قیمت متفاوتی میبینه.
سوم Phantom Read 👻
خب Phantom Read یعنی وقتی یه تراکنش یه مجموعه داده رو میخونه و در طول اجرای تراکنش، رکوردهای جدیدی به اون مجموعه اضافه یا حذف میشن. اینطوری وقتی دوباره همون پرسوجو رو انجام بدی، نتیجه متفاوتی میبینی.
مثال: فرض کن یه مدیر داره تعداد کارمندای یک بخش رو چک میکنه. در همون لحظه یکی دیگه یه کارمند جدید به همون بخش اضافه میکنه. حالا اگر مدیر دوباره تعداد کارمندها رو ببینه، یه کارمند جدید میاد توی لیست که دفعه قبل نبوده.
چهارم Deadlock 🔐
خب Deadlock وقتی اتفاق میافته که دو یا چند تراکنش همزمان منتظر همدیگه بمونن و نتونن کاری کنن. یعنی تراکنشها همدیگه رو قفل میکنن و نمیتونن ادامه بدن.
مثال: فرض کن تراکنش A میخواد رکورد ۱ رو قفل کنه و منتظر رکورد ۲ هم هست. همزمان تراکنش B رکورد ۲ رو قفل کرده و منتظر رکورد ۱ هست. اینجا تراکنشها همدیگه رو بلاک کردن و هیچکدوم نمیتونن کاری بکنن.
جمع بندی 🎯
اینا مشکلات رایجی هستن که توی مدیریت تراکنشها و همزمانی توی دیتابیسها رخ میده. با فهمیدن و شناسایی این مشکلات میتونید از بروز مشکلات جدی توی سیستمهای دیتابیسی جلوگیری کنید و عملکرد بهتری داشته باشید.
امیدوارم مفید بوده باشه :)
@ninja_learn_ir
خب بچهها امروز میخوایم درباره چند تا مشکل رایج توی تراکنشهای دیتابیس حرف بزنیم که ممکنه به دردتون بخوره. وقتی چند تا تراکنش به صورت همزمان توی دیتابیس کار میکنن، بعضی وقتا اتفاقای غیرمنتظرهای میافته که ممکنه به بینظمی و باگ منجر بشه. این مشکلات شامل Dirty Read، Non-Repeatable Read، Phantom Read و Deadlock هستن. بیاید دونه دونه بررسیشون کنیم.
اول Dirty Read 💾
خب Dirty Read یعنی وقتی یه تراکنش دادههایی رو میخونه که هنوز توسط یه تراکنش دیگه نهایی (commit) نشده. این یعنی شما دارید چیزی رو میخونید که ممکنه عوض بشه یا حتی برگرده.
مثال: فرض کن یکی توی اپلیکیشن شما داره اطلاعات یه سفارش رو تغییر میده ولی هنوز تغییرات رو ذخیره نکرده. حالا یه کاربر دیگه همون سفارش رو میبینه و تصمیم میگیره. اگر اون تغییرات نهایی نشن، اطلاعات اشتباهی به کاربر دوم رسیده.
دوم Non-Repeatable Read 🔄
خب Non-Repeatable Read وقتی پیش میاد که یه تراکنش، دادهای رو چند بار میخونه و دفعههای بعدی اون داده فرق میکنه، چون یه تراکنش دیگه اومده و اون داده رو وسط کار تغییر داده.
مثال: شما قیمت یه محصول رو برای یه مشتری نشون میدید. همزمان یه کاربر دیگه قیمت همون محصول رو تغییر میده. وقتی مشتری دوباره صفحه رو رفرش کنه، قیمت متفاوتی میبینه.
سوم Phantom Read 👻
خب Phantom Read یعنی وقتی یه تراکنش یه مجموعه داده رو میخونه و در طول اجرای تراکنش، رکوردهای جدیدی به اون مجموعه اضافه یا حذف میشن. اینطوری وقتی دوباره همون پرسوجو رو انجام بدی، نتیجه متفاوتی میبینی.
مثال: فرض کن یه مدیر داره تعداد کارمندای یک بخش رو چک میکنه. در همون لحظه یکی دیگه یه کارمند جدید به همون بخش اضافه میکنه. حالا اگر مدیر دوباره تعداد کارمندها رو ببینه، یه کارمند جدید میاد توی لیست که دفعه قبل نبوده.
چهارم Deadlock 🔐
خب Deadlock وقتی اتفاق میافته که دو یا چند تراکنش همزمان منتظر همدیگه بمونن و نتونن کاری کنن. یعنی تراکنشها همدیگه رو قفل میکنن و نمیتونن ادامه بدن.
مثال: فرض کن تراکنش A میخواد رکورد ۱ رو قفل کنه و منتظر رکورد ۲ هم هست. همزمان تراکنش B رکورد ۲ رو قفل کرده و منتظر رکورد ۱ هست. اینجا تراکنشها همدیگه رو بلاک کردن و هیچکدوم نمیتونن کاری بکنن.
جمع بندی 🎯
اینا مشکلات رایجی هستن که توی مدیریت تراکنشها و همزمانی توی دیتابیسها رخ میده. با فهمیدن و شناسایی این مشکلات میتونید از بروز مشکلات جدی توی سیستمهای دیتابیسی جلوگیری کنید و عملکرد بهتری داشته باشید.
#db #dead_lock #programing
❤34
دوستان ۶۸۶ نفریم ولی واقعا کسی حمایت نمیکنه. 🙃
ممنون میشیم برای این که انرژی بگیریم و بیشتر فعالیت کنیم لایک و شیر کنید ومارو به دوستانتون معرفی کنید. 🙂
با تشکر از همگی ❤️
ممنون میشیم برای این که انرژی بگیریم و بیشتر فعالیت کنیم لایک و شیر کنید ومارو به دوستانتون معرفی کنید. 🙂
با تشکر از همگی ❤️
❤73🔥4👍3☃1
💎 چطوری مشکلات Dirty Read، Non-Repeatable Read، Phantom Read و Deadlock رو هندل کنیم؟ 💎
توی پست قبلی درباره چند تا مشکل مثل Dirty Read، Non-Repeatable Read، Phantom Read و Deadlock حرف زدیم. امروز میخوایم ببینیم چطوری میتونیم اینا رو توی برنامهمون هندل کنیم. اینا مشکلاتیه که میتونن عملکرد دیتابیس و اپلیکیشن رو خراب کنن، ولی با استفاده از تکنیکهای کنترل همزمانی و ایزولیشن میشه جلوی اینا رو گرفت.
1⃣ Dirty Read 💾
برای جلوگیری از Dirty Read، باید از سطح ایزولیشن مناسبی استفاده کنیم. یکی از بهترین سطوح ایزولیشن برای این کار Read Committed هست. این سطح تضمین میکنه که فقط دادههای commit شده قابل خوندن هستن.
مثال:
فرض کن توی دیتابیستون از سطح ایزولیشن Read Committed استفاده میکنی. اگه تراکنش A داره دادههایی رو آپدیت میکنه، تراکنش B تا وقتی که A کارش تموم نشده و دادهها رو commit نکرده، نمیتونه اون دادهها رو ببینه. پس از Dirty Read جلوگیری میشه.
2⃣ Non-Repeatable Read 🔄
برای جلوگیری از Non-Repeatable Read، باید سطح ایزولیشن رو به Repeatable Read تغییر بدیم. این سطح ایزولیشن تضمین میکنه که اگر یک بار دادهای رو توی تراکنش خوندیم، تا پایان تراکنش دیگه تغییر نمیکنه.
مثال:
فرض کن توی یه فروشگاه آنلاین، وقتی یه کاربر قیمت یه محصول رو چک میکنه، باید مطمئن بشی که اون قیمت تا پایان تراکنش تغییر نمیکنه. با استفاده از Repeatable Read، هر چی کاربر دید، همون میمونه.
3⃣ Phantom Read 👻
برای حل مشکل Phantom Read باید از سطح ایزولیشن Serializable استفاده کنیم. این سطح از ایزولیشن باعث میشه که نه تنها دادههای موجود، بلکه هر داده جدیدی هم تا پایان تراکنش دیده نشه.
مثال:
فرض کن یه مدیر داره گزارش تعداد کارمندای یه بخش رو چک میکنه. با سطح ایزولیشن Serializable، اگر کارمند جدیدی در طول تراکنش اضافه بشه، مدیر اون رو تا پایان تراکنش نمیبینه و از Phantom Read جلوگیری میشه.
4⃣ Deadlock 🔐
برای هندل کردن Deadlock، چند راه وجود داره:
1⃣ اجتناب از قفلهای طولانی:
تراکنشها رو سبک و سریع نگه دار تا قفلهای طولانی ایجاد نشن.
2⃣ ترتیب دسترسی یکسان:
مطمئن شو که تراکنشها به منابع به یه ترتیب دسترسی پیدا میکنن. یعنی اگر A و B هر دو به رکوردهای ۱ و ۲ نیاز دارن، هر دو اول رکورد ۱ رو قفل کنن و بعد برن سراغ رکورد ۲.
3⃣ زمانبندی دوباره تراکنشها:
میتونی از دیتابیس بخوای که اگه Deadlock تشخیص داد، یکی از تراکنشها رو ریست کنه و دوباره اجرا کنه.
مثال:
فرض کن توی اپلیکیشن مالیات دو تراکنش همزمان دارن از منابع یکسان استفاده میکنن. یکی از راههای جلوگیری از Deadlock اینه که مطمئن بشی تراکنشها به یه ترتیب مشخص به منابع دسترسی دارن، مثلاً اول رکورد ۱ رو قفل میگیرن و بعد رکورد ۲.
جمعبندی 🎯
با استفاده از سطوح ایزولیشن و یه سری تکنیکهای مدیریت تراکنش، میتونیم مشکلاتی مثل Dirty Read، Non-Repeatable Read، Phantom Read و Deadlock رو توی دیتابیسهامون حل کنیم. اگر این نکات رو توی اپلیکیشنهاتون رعایت کنید، کارتون خیلی راحتتر و پایدارتر میشه.
امید وارم مفید بوده باشه :)
@ninja_learn_ir
توی پست قبلی درباره چند تا مشکل مثل Dirty Read، Non-Repeatable Read، Phantom Read و Deadlock حرف زدیم. امروز میخوایم ببینیم چطوری میتونیم اینا رو توی برنامهمون هندل کنیم. اینا مشکلاتیه که میتونن عملکرد دیتابیس و اپلیکیشن رو خراب کنن، ولی با استفاده از تکنیکهای کنترل همزمانی و ایزولیشن میشه جلوی اینا رو گرفت.
1⃣ Dirty Read 💾
برای جلوگیری از Dirty Read، باید از سطح ایزولیشن مناسبی استفاده کنیم. یکی از بهترین سطوح ایزولیشن برای این کار Read Committed هست. این سطح تضمین میکنه که فقط دادههای commit شده قابل خوندن هستن.
مثال:
فرض کن توی دیتابیستون از سطح ایزولیشن Read Committed استفاده میکنی. اگه تراکنش A داره دادههایی رو آپدیت میکنه، تراکنش B تا وقتی که A کارش تموم نشده و دادهها رو commit نکرده، نمیتونه اون دادهها رو ببینه. پس از Dirty Read جلوگیری میشه.
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
2⃣ Non-Repeatable Read 🔄
برای جلوگیری از Non-Repeatable Read، باید سطح ایزولیشن رو به Repeatable Read تغییر بدیم. این سطح ایزولیشن تضمین میکنه که اگر یک بار دادهای رو توی تراکنش خوندیم، تا پایان تراکنش دیگه تغییر نمیکنه.
مثال:
فرض کن توی یه فروشگاه آنلاین، وقتی یه کاربر قیمت یه محصول رو چک میکنه، باید مطمئن بشی که اون قیمت تا پایان تراکنش تغییر نمیکنه. با استفاده از Repeatable Read، هر چی کاربر دید، همون میمونه.
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
3⃣ Phantom Read 👻
برای حل مشکل Phantom Read باید از سطح ایزولیشن Serializable استفاده کنیم. این سطح از ایزولیشن باعث میشه که نه تنها دادههای موجود، بلکه هر داده جدیدی هم تا پایان تراکنش دیده نشه.
مثال:
فرض کن یه مدیر داره گزارش تعداد کارمندای یه بخش رو چک میکنه. با سطح ایزولیشن Serializable، اگر کارمند جدیدی در طول تراکنش اضافه بشه، مدیر اون رو تا پایان تراکنش نمیبینه و از Phantom Read جلوگیری میشه.
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
4⃣ Deadlock 🔐
برای هندل کردن Deadlock، چند راه وجود داره:
1⃣ اجتناب از قفلهای طولانی:
تراکنشها رو سبک و سریع نگه دار تا قفلهای طولانی ایجاد نشن.
2⃣ ترتیب دسترسی یکسان:
مطمئن شو که تراکنشها به منابع به یه ترتیب دسترسی پیدا میکنن. یعنی اگر A و B هر دو به رکوردهای ۱ و ۲ نیاز دارن، هر دو اول رکورد ۱ رو قفل کنن و بعد برن سراغ رکورد ۲.
3⃣ زمانبندی دوباره تراکنشها:
میتونی از دیتابیس بخوای که اگه Deadlock تشخیص داد، یکی از تراکنشها رو ریست کنه و دوباره اجرا کنه.
مثال:
فرض کن توی اپلیکیشن مالیات دو تراکنش همزمان دارن از منابع یکسان استفاده میکنن. یکی از راههای جلوگیری از Deadlock اینه که مطمئن بشی تراکنشها به یه ترتیب مشخص به منابع دسترسی دارن، مثلاً اول رکورد ۱ رو قفل میگیرن و بعد رکورد ۲.
BEGIN TRANSACTION;
-- Lock resources in the same order
جمعبندی 🎯
با استفاده از سطوح ایزولیشن و یه سری تکنیکهای مدیریت تراکنش، میتونیم مشکلاتی مثل Dirty Read، Non-Repeatable Read، Phantom Read و Deadlock رو توی دیتابیسهامون حل کنیم. اگر این نکات رو توی اپلیکیشنهاتون رعایت کنید، کارتون خیلی راحتتر و پایدارتر میشه.
#sql #dead_lock #programing
🔥12❤4👍1
Ninja Learn | نینجا لرن
💎 چطوری مشکلات Dirty Read، Non-Repeatable Read، Phantom Read و Deadlock رو هندل کنیم؟ 💎 توی پست قبلی درباره چند تا مشکل مثل Dirty Read، Non-Repeatable Read، Phantom Read و Deadlock حرف زدیم. امروز میخوایم ببینیم چطوری میتونیم اینا رو توی برنامهمون هندل…
دوستان اگه سوالی درمورد پستا دارید یا مطلبی رو خوب متوجه نشدید و براتون جانیفتاده حتما تو کامنتا بپرسید تا براتپن توضیح بدیم 😊
1❤6
آیا لازمه بهعنوان یه بکاند دولوپر، DevOps بلد باشیم؟ 🤔
این سوال خیلی از بچههایی که تو زمینه بکاند کار میکنن هست که "آیا لازمه DevOps هم یاد بگیریم یا نه؟".
خب جواب سادهاش اینه:
بله، ولی بستگی داره چقدر! بیایید یه نگاه دقیقتر بندازیم.
چرا DevOps؟
خب DevOps یه فرایند برای اینه که فاصله بین توسعهدهندهها (مثل ما که کد میزنیم) و تیمهای عملیات (کسایی که کد رو روی سرورها اجرا میکنن) کمتر بشه.
اگه شما بهعنوان یه بکاند دولوپر، کمی از DevOps سر دربیاری، این به معنیه که میتونی توی مراحل دیپلویمنت و مدیریت پروژه نقش فعالتری داشته باشی و کدت رو با خیال راحتتری بیاری بالا. این یعنی کمتر وابسته به تیمهای دیگهای و سریعتر مشکلات رو هندل میکنی.
چقدر باید بلد باشیم؟ 📚
حالا سوال مهم اینه: چقدر باید DevOps بلد باشیم؟
نمیخواد یه متخصص کامل DevOps باشی، ولی دونستن چند تا موضوع پایهای کمک زیادی بهت میکنه:
1⃣ کار با Git و CI/CD: دونستن نحوه کار با ابزارهای CI/CD (مثل Jenkins یا GitLab CI) خیلی ضروریه. چون کدایی که مینویسی باید خودکار تست و دیپلوی بشن.
مثال: فرض کن شما کدت رو نوشتی و از طریق یه لوله CI/CD خودکار تست میشه و اگر همه چی اوکی باشه، روی سرور دیپلوی میشه. با این کار خیالت راحتتره که چیزی خراب نشده.
2⃣ آشنایی با Docker: دیگه این روزا کار کردن بدون Docker سخته. بهتره بدونی چطور اپت رو داخل کانتینرهای Docker ببری و اجرا کنی.
مثال: اگه بخوای برنامهات رو سریع روی چندتا سیستم مختلف بدون مشکل اجرا کنی، Docker میتونه مثل یه قهرمان کمکت کنه.
3⃣ کار با سرورها: حداقل باید با محیطهای Linux و مدیریت سرورهای ساده آشنا باشی. مثلاً بدونی چطور سرویسها رو استارت کنی، لاگها رو بخونی و یه سری دستورات پایهای رو بزنی.
مثال: فرض کن اپت روی یه سرور مشکل پیدا کرده و لاگ ارورها رو میخونی تا سریع تر مشکل رو پیدا کنی. اگر اصولی بلد نباشی، باید منتظر بمونی تا یکی دیگه بیاد کمکت کنه.
4⃣ مدیریت کانفیگها: ابزارهایی مثل Ansible یا Terraform برای مدیریت و اتوماسیون کانفیگ سرورها کمک بزرگی هستن. ولی اگه تو محیطهای کوچیک کار میکنی، حتی آشنایی با دستورای ساده Bash هم کافیه.
جمع بندی 🎯
در نهایت، اگه بکاند دولوپری هستی، دونستن مباحث DevOps بهت کمک میکنه مستقلتر و قویتر عمل کنی. لازم نیست همهچیز رو فول باشی، اما آشنایی با اصول و ابزارهای پایهای مثل Docker، Git، CI/CD و مدیریت سرورهای لینوکسی کارتو راحتتر میکنه.
هر چی بیشتر بلد باشی، هم برای خودت بهتره، هم توی تیم میدرخشی. 😎
امید وارم مفید بوده باشه :)
@ninja_learn_ir
این سوال خیلی از بچههایی که تو زمینه بکاند کار میکنن هست که "آیا لازمه DevOps هم یاد بگیریم یا نه؟".
خب جواب سادهاش اینه:
بله، ولی بستگی داره چقدر! بیایید یه نگاه دقیقتر بندازیم.
چرا DevOps؟
خب DevOps یه فرایند برای اینه که فاصله بین توسعهدهندهها (مثل ما که کد میزنیم) و تیمهای عملیات (کسایی که کد رو روی سرورها اجرا میکنن) کمتر بشه.
اگه شما بهعنوان یه بکاند دولوپر، کمی از DevOps سر دربیاری، این به معنیه که میتونی توی مراحل دیپلویمنت و مدیریت پروژه نقش فعالتری داشته باشی و کدت رو با خیال راحتتری بیاری بالا. این یعنی کمتر وابسته به تیمهای دیگهای و سریعتر مشکلات رو هندل میکنی.
چقدر باید بلد باشیم؟ 📚
حالا سوال مهم اینه: چقدر باید DevOps بلد باشیم؟
نمیخواد یه متخصص کامل DevOps باشی، ولی دونستن چند تا موضوع پایهای کمک زیادی بهت میکنه:
1⃣ کار با Git و CI/CD: دونستن نحوه کار با ابزارهای CI/CD (مثل Jenkins یا GitLab CI) خیلی ضروریه. چون کدایی که مینویسی باید خودکار تست و دیپلوی بشن.
مثال: فرض کن شما کدت رو نوشتی و از طریق یه لوله CI/CD خودکار تست میشه و اگر همه چی اوکی باشه، روی سرور دیپلوی میشه. با این کار خیالت راحتتره که چیزی خراب نشده.
2⃣ آشنایی با Docker: دیگه این روزا کار کردن بدون Docker سخته. بهتره بدونی چطور اپت رو داخل کانتینرهای Docker ببری و اجرا کنی.
مثال: اگه بخوای برنامهات رو سریع روی چندتا سیستم مختلف بدون مشکل اجرا کنی، Docker میتونه مثل یه قهرمان کمکت کنه.
3⃣ کار با سرورها: حداقل باید با محیطهای Linux و مدیریت سرورهای ساده آشنا باشی. مثلاً بدونی چطور سرویسها رو استارت کنی، لاگها رو بخونی و یه سری دستورات پایهای رو بزنی.
مثال: فرض کن اپت روی یه سرور مشکل پیدا کرده و لاگ ارورها رو میخونی تا سریع تر مشکل رو پیدا کنی. اگر اصولی بلد نباشی، باید منتظر بمونی تا یکی دیگه بیاد کمکت کنه.
4⃣ مدیریت کانفیگها: ابزارهایی مثل Ansible یا Terraform برای مدیریت و اتوماسیون کانفیگ سرورها کمک بزرگی هستن. ولی اگه تو محیطهای کوچیک کار میکنی، حتی آشنایی با دستورای ساده Bash هم کافیه.
جمع بندی 🎯
در نهایت، اگه بکاند دولوپری هستی، دونستن مباحث DevOps بهت کمک میکنه مستقلتر و قویتر عمل کنی. لازم نیست همهچیز رو فول باشی، اما آشنایی با اصول و ابزارهای پایهای مثل Docker، Git، CI/CD و مدیریت سرورهای لینوکسی کارتو راحتتر میکنه.
هر چی بیشتر بلد باشی، هم برای خودت بهتره، هم توی تیم میدرخشی. 😎
#backend #devops
1👍24❤5