Ninja Learn | نینجا لرن
1.26K subscribers
95 photos
36 videos
11 files
306 links
یادگیری برنامه نویسی به سبک نینجا 🥷
اینجا چیزایی یاد میگیری که فقط نینجاهای وب‌ بلدن 🤫

📄 Send me post: https://t.iss.one/NoronChat_bot?start=sec-fdggghgebe

👥 ɢʀᴏᴜᴘ: https://t.iss.one/+td1EcO_YfSphNTlk
Download Telegram
💎 عملیات‌های 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
73👍3
دوستان میخوایم استارت تولید محتوا رو توی یوتوب بزنیم 😁
بنظرتون درمورد چه موضوعاتی ویدیو بزاریم؟🤔
تو کامنتا بگید 😉
🔥72👍1👎1
بریم لینکدین، اونجا محیط کاری و حرفه ایه

لینکدین:
😁11
💎 اصول Normalization در طراحی دیتابیس 💎

امروز می‌خوام در مورد یکی از مهم‌ترین اصول طراحی دیتابیس یعنی "نرمال‌سازی" صحبت کنم. اگه می‌خواین دیتابیس‌تون پر سرعت و بدون مشکل کار کنه، باید با این سه فرم اصلی نرمال‌سازی آشنا بشین.

1⃣ فرم اول نرمال (1NF)
تو فرم اول نرمال، باید همه‌ی ستون‌های دیتابیس‌تون "اتمی" باشن. یعنی هر سلول از جدول باید فقط یه مقدار داشته باشه، نه چندتا مقدار!
📌 مثال:
فرض کن یه جدول داری که توش شماره تلفن‌های چند نفر رو ذخیره کردی. اگه تو یه سلول چند تا شماره تلفن ذخیره کنی، دیتابیست تو فرم اول نرمال نیست باید هر شماره تلفن توی یه ردیف جدا باشه.

2⃣ فرم دوم نرمال (2NF)
وقتی فرم اول رو رعایت کردی، می‌رسی به فرم دوم. تو این فرم، باید مطمئن بشی که همه‌ی ستون‌های غیرکلیدی، وابسته به کلید اصلی (Primary Key) باشن.
📌 مثال:
فرض کن یه جدول داری که اطلاعات دانش‌آموزان و درس‌هایی که می‌خونن رو ذخیره می‌کنه. اگه یه ستون مربوط به اطلاعات کلاس (مثل شماره کلاس) باشه که وابسته به دانش‌آموز نباشه، دیتابیس‌ت تو فرم دوم نرمال نیست. باید اون اطلاعات رو تو یه جدول جدا ذخیره کنی.

3⃣ فرم سوم نرمال (3NF)
حالا که فرم دوم رو رعایت کردی، می‌رسیم به فرم سوم. اینجا باید مطمئن بشی که هیچ ستون غیرکلیدی به یه ستون غیرکلیدی دیگه وابسته نباشه
📌 مثال:
اگه تو جدول دانش‌آموزان، هم اسم شهر و هم اسم استان رو ذخیره کنی و استان وابسته به شهر باشه، دیتابیس تو فرم سوم نرمال نیست. باید شهر و استان رو تو یه جدول دیگه ذخیره کنی.

جمع بندی 🎯
این سه فرم نرمال‌سازی باعث می‌شن دیتابیس‌تون بهینه‌تر باشه، خطاهای کمتری داشته باشه و به راحتی قابل توسعه باشه. پس اگه می‌خواین دیتابیس‌تون تو پروژه‌های بزرگ دچار مشکل نشه، حتما این اصول رو رعایت کنین 😉

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

#sql #database #db #nf


@ninja_learn_ir
👍111
💎 معرفی adminer 💎

امروز می‌خوایم درباره یه ابزار جذاب برای مدیریت دیتابیس‌ها به اسم Adminer صحبت کنیم و در آخر، یاد بگیریم چطوری با استفاده از Docker سریع و راحت یه سرویس Adminer بیاریم بالا. 🚀

حالا Adminer چیه؟ 🤔

خب Adminer یه ابزار تحت وب برای مدیریت دیتابیس‌هاست که کار باهاش خیلی ساده و رونه. اگه تا حالا با ابزارهایی مثل DBeaver یا HeidiSQL کار کردین و دنبال یه گزینه سبک‌تر و ساده‌تر هستین، Adminer بهترین انتخابه این ابزار از دیتابیس‌های مختلف مثل MySQL، PostgreSQL، SQLite، و حتی MongoDB پشتیبانی می‌کنه.

چرا Adminer؟ 🤷‍♂️

1⃣ سبک و سریع:
دیگه لازم نیست ابزارهای سنگین نصب کنی. Adminer خیلی سبک و کم‌حجمه.

2⃣ پشتیبانی از دیتابیس‌های مختلف: دیتابیس‌های معروف رو به راحتی مدیریت می‌کنه.

3⃣ رابط کاربری ساده:
با یه محیط ساده و بدون شلوغی، سریع به دیتابیس‌هات دسترسی داری.


4⃣ نصب و راه‌اندازی راحت:
با چندتا کامند ساده توی Docker می‌تونی به‌سرعت راهش بندازی

چطور با Docker سرویس Adminer رو بالا بیاریم؟ 🐳

حالا بریم سر اصل مطلب به‌جای نصب دستی، از Docker استفاده می‌کنیم تا Adminer رو در عرض چند دقیقه راه بندازیم. 😎

قدم‌های راه‌اندازی Adminer با Docker:

1⃣ نصب Docker:
اگه Docker رو نصب نداری، اول از همه باید Docker رو نصب کنی. برای این کار می‌تونی به سایت Docker بری و طبق راهنمای اون برای سیستم‌عامل خودت نصبش کنی.

2⃣ اجرای Adminer با Docker:

بعد از اینکه Docker نصب شد، کافیه دستور زیر رو توی ترمینال اجرا کنی:

docker run -d --name adminer -p 8080:8080 adminer



توضیحات:
docker run -d --name adminer

این دستور یه کانتینر در حالت جدا شده (detached) اجرا می‌کنه.

اسم کانتینرت رو "adminer" می‌ذاره.

-p 8080:8080:
پورت 8080 روی سیستم‌ت رو به پورت 8080 داخل کانتینر متصل می‌کنه تا بتونی از مرورگر بهش دسترسی داشته باشی.

adminer:
این قسمت می‌گه که از ایمیج Adminer استفاده کنه.


3⃣ اتصال به Adminer:

حالا Adminer رو توی مرورگر اجرا کن. آدرس زیر رو وارد کن:

https://localhost:8080

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

4⃣ اتصال به دیتابیس:

حالا باید دیتابیس خودت رو به Adminer وصل کنی. اطلاعات مثل نوع دیتابیس، سرور (مثل db برای Docker یا localhost برای لوکال)، نام کاربری و رمز عبور رو وارد کن و تمام 🚀

5⃣ اجرای هم‌زمان دیتابیس و Adminer:

اگر دیتابیس رو هم با Docker اجرا می‌کنی، مثلاً MySQL، می‌تونی با کامپوز Docker (docker-compose) هر دو سرویس رو هم‌زمان بیاری بالا. یه فایل docker-compose.yml شبیه به این درست کن:

version: '3'
services:
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: example
    ports:
      - "3306:3306"

  adminer:
    image: adminer
    ports:
      - "8080:8080"


حالا با دستور زیر، هر دو سرویس رو اجرا کن:

docker-compose up -d


با این دستور، MySQL و Adminer به‌صورت هم‌زمان اجرا می‌شن و به راحتی می‌تونی به دیتابیس وصل شی.

جمع بندی 🎯

فهمیدیم اگه دنبال یه ابزار سریع و ساده برای مدیریت دیتابیس‌هات هستی و می‌خوای بدون دردسر از طریق Docker یه سرویس بالا بیاری، Adminer بهترین گزینه‌ست.

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

#db #adminer #docker


@ninja_learn_ir
👍74
🔸 قطعا بهترین کتاب برای افرادی که علاقه مندن به شکلی ساده و شهودی وارد دنیای الگوریتم‌ها بشن کتاب Grokking Algorithms هستش.

این کتاب با مثال‌های واقعی و کاربردی، به شما کمک می‌کند الگوریتم‌های پیچیده رو به سادگی درک کنید. نویسنده به جای تمرکز بر ریاضیات سنگین و پیچیده، از مثال‌های روزمره مثل جستجوی تلفن یا پیدا کردن کوتاه‌ترین مسیر استفاده می‌کند تا مفاهیم را به صورت تصویری و جذاب جا بیندازد.


زیر این پست تو چنل نسخه فارسی و انگلیسی pdf این کتاب رو براتون میزارم ... 🤩


#️⃣ #algorithm #book

🚀 @coolycode
👍5👌31👎1
💎 معرفی پکیج honeypot 💎

امروز می‌خوام درباره یه پکیج خفن برای جنگو به اسم 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



@ninja_learn_ir
👍122🔥1👏1
Forwarded from پروگرمرزمیم (Mehan Alavimajd)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8👏31😁1
امروز یه پست خفن راجب GraphQL داریم 😁
🔥91
💎 معرفی GraphQL و استفاده ازش 💎

اگه تا حالا اسم GraphQL به گوشتون خورده ولی نمی‌دونستید دقیقاً چیه و چه کاربردی داره، امروز قراره باهم برسیش کنیم و بفهمیم چرا این روزها انقدر محبوب شده🌟

حالا GraphQL چیه؟ 🤔

خب GraphQL یه زبان کوئری برای API هاست که توسط فیسبوک توی سال ۲۰۱۵ معرفی شد. این تکنولوژی به شما اجازه می‌ده که دقیقاً همون داده‌هایی که نیاز دارین رو از سرور درخواست کنین. مهم‌ترین ویژگی GraphQL اینه که به جای دریافت یه ساختار ثابت از اطلاعات، می‌تونین مشخص کنین چه داده‌هایی رو دقیقاً می‌خواین و چه داده‌هایی رو نمی‌خواین.

به زبان ساده، GraphQL به شما کنترل بیشتری روی داده‌هایی که از API می‌گیرین می‌ده. 🌍

چرا از GraphQL استفاده کنیم؟ 🤷‍♂️

1⃣ دریافت داده‌های دقیق 🎯
یکی از بزرگ‌ترین مشکلاتی که معماری‌های سنتی API دارن اینه که گاهی داده‌هایی که لازم نداریم رو هم به ما برمی‌گردونن. GraphQL این مشکل رو حل کرده. شما توی GraphQL می‌تونین کاملاً مشخص کنین که چه فیلدهایی از داده‌ها رو نیاز دارین و فقط همون‌ها رو از سرور بگیرین.
مثال: فرض کنین می‌خواین فقط اسم و ایمیل کاربر رو از API بگیرین. کوئری GraphQL می‌تونه این‌طوری باشه:

{
user(id: 1) {
name
email
}
}

و پاسخ هم دقیقاً همون چیزی خواهد بود که درخواست کردین:

{
"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


@ninja_learn_ir
🔥16👍32
پی‌نوشت:
تو GraphQL، فقط همون داده‌ای که می‌خوای رو می‌گیری، بدون نیاز به تنظیمات اضافه روی سرور. مثلاً با این درخواست فقط اسم و ایمیل رو می‌گیری:

{
user(id: 1) {
name
email
}
}

درسته که تو REST هم می‌تونی با سریالایزرها داده‌های اضافی رو حذف کنی، ولی تو GraphQL از همون اول کاربر تعیین می‌کنه که چه اطلاعاتی رو می‌خواد، بدون دردسر سریالایزر و فیلتر.
🔥18👍43
پست بعدی راجب MongoDB باشه؟ 🧐
Anonymous Poll
80%
اره 🙂‍↕️
20%
نه 🙂‍↔️
🔥61
Ninja Learn | نینجا لرن
پست بعدی راجب MongoDB باشه؟ 🧐
وصد البته نحوه استفاده ازش توی جنگو (django) و نود (node) رو هم میزارم 😁
👍14🔥32
This media is not supported in your browser
VIEW IN TELEGRAM
#fun


الکی نیست انقدر بی منطق ساخته شده 😂😂

@ninja_learn_ir
🤣141👍1
💎معرفی دیتابیس MongoDB 💎

دیتابیس 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


@ninja_learn_ir
👍75🔥3
📌 استفاده از 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 رو توی پروژه‌ات نصب کنی. برای این کار، این دستور رو توی ترمینال پروژه‌ت اجرا کن:
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⃣ مستندات و کدنویسی خوانا

مستندات خوب و کد خوانا خیلی مهمه. وقتی که دولوپر جدید به تیم اضافه می‌شه، با مستندات و کدهای خوب می‌تونه به راحتی با پروژه آشنا بشه.

جمع‌بندی

با رعایت این نکات می‌تونید اپلیکیشن‌هایی بسازید که هم مقیاس‌پذیر باشن و هم کدهای قابل نگهداری داشته باشن. این موضوع باعث می‌شه کارایی اپلیکیشن شما بالا بره و همچنین زمان و هزینه نگهداری رو کم کنه.

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

#text


@ninja_learn_ir
11👍3🔥2
دانشمندان چینی با استفاده از یه رایانه کوانتومی تونستن الگوریتم های رمز نگاری AES و RSA رو بشکنن 😐

این الگوریتم ها توی تبادل اطلاعات نظامی و بانکی استفاده میشه 😄
🔥112😁21👍1