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
پست پیشنهادی دارید؟ 🌚 (لطف چیزی باشه که بشه درقالب پست اراعه داد)
❤7
ـ Dependency Injection چیه؟ 🤔
امروز میخوایم بررسی کنیم Dependency Injection یا همون تزریق وابستگی چیه
خب Dependency injection یه مفهومی توی برنامهنویسی شیگراست که به سادهترین شکل میشه گفت برای جداسازی وابستگیها بین کلاسها استفاده میشه. یعنی چی؟ یعنی به جای اینکه هر کلاس خودش مستقلاً وابستگیهای مورد نیازش رو بسازه، این وابستگیها از بیرون بهش تزریق میشه. این کار باعث میشه کد ما تمیزتر، انعطافپذیرتر و قابل تستتر بشه.
چرا مهمه؟ 🤨
فرض کن یه کلاس داری که برای کارکردش نیاز به یه سری سرویسهای دیگه داره. مثلاً کلاسی که مسئول لاگین کاربره، نیاز به سرویس دیتابیس داره. حالا اگه این سرویس رو خود کلاس بسازه، دیگه وابستگی محکمی بین این دو تا وجود داره. یعنی هر وقت بخوای دیتابیس رو عوض کنی، باید بری توی این کلاس دست ببری. اما اگه از Dependency Injection استفاده کنی، میتونی هر وقت خواستی به این کلاس هر دیتابیسی که دوست داری تزریق کنی، بدون اینکه نیاز باشه توی کدش تغییری بدی.
یه مثال ساده 🤓
فرض کن کلاس زیر رو داری که برای ارسال پیام نیاز به یه سرویس پیامرسان داره:
اینجا کلاس
حالا با استفاده از Dependency Injection اینجوری مینویسیمش:
تو این حالت،
مزایای Dependency Injection 📈
1⃣ قابلیت تست بیشتر: چون وابستگیها از بیرون تزریق میشن، میتونی راحتتر mock کنی و تست بنویسی.
2⃣ انعطافپذیری بیشتر: راحت میتونی وابستگیهای مختلف رو جایگزین کنی بدون اینکه توی کلاس تغییر بدی.
3⃣ کاهش coupling: وابستگی بین کلاسها کمتر میشه و این باعث میشه کدات مستقلتر باشن.
جمعبندی 🎯
فهمیدیم که Dependency Injection بهت کمک میکنه که کدهای تمیزتری داشته باشی که راحتتر تست و اپدیت میشن. خیلی وقتا که بخوای یه اپلیکیشن بزرگ و مقیاسپذیر بنویسی، این الگو میتونه کارتو خیلی راحتتر کنه. پس دفعه بعد که داشتی کد میزدی و حس کردی یه کلاس داره زیادی به کلاسهای دیگه وابسته میشه، به فکر استفاده از این روش باش 😉
ممنون میشم با ریکشن و شیر از ما حمایت کنید :) ❤️🔥
@ninja_learn_ir
امروز میخوایم بررسی کنیم Dependency Injection یا همون تزریق وابستگی چیه
خب Dependency injection یه مفهومی توی برنامهنویسی شیگراست که به سادهترین شکل میشه گفت برای جداسازی وابستگیها بین کلاسها استفاده میشه. یعنی چی؟ یعنی به جای اینکه هر کلاس خودش مستقلاً وابستگیهای مورد نیازش رو بسازه، این وابستگیها از بیرون بهش تزریق میشه. این کار باعث میشه کد ما تمیزتر، انعطافپذیرتر و قابل تستتر بشه.
چرا مهمه؟ 🤨
فرض کن یه کلاس داری که برای کارکردش نیاز به یه سری سرویسهای دیگه داره. مثلاً کلاسی که مسئول لاگین کاربره، نیاز به سرویس دیتابیس داره. حالا اگه این سرویس رو خود کلاس بسازه، دیگه وابستگی محکمی بین این دو تا وجود داره. یعنی هر وقت بخوای دیتابیس رو عوض کنی، باید بری توی این کلاس دست ببری. اما اگه از Dependency Injection استفاده کنی، میتونی هر وقت خواستی به این کلاس هر دیتابیسی که دوست داری تزریق کنی، بدون اینکه نیاز باشه توی کدش تغییری بدی.
یه مثال ساده 🤓
فرض کن کلاس زیر رو داری که برای ارسال پیام نیاز به یه سرویس پیامرسان داره:
class NotificationService:
def __init__(self):
self.sender = EmailSender()
def send(self, message):
self.sender.send(message)
اینجا کلاس
NotificationService
مستقیم وابسته به EmailSender
هست، یعنی اگه بعداً بخوای از یه روش دیگه برای ارسال پیام (مثلاً SMSSender
) استفاده کنی، باید بری کد این کلاس رو تغییر بدی. این باعث میشه کدات به هم گره بخورن و انعطافپذیری کم بشه.حالا با استفاده از Dependency Injection اینجوری مینویسیمش:
class NotificationService:
def __init__(self, sender):
self.sender = sender
def send(self, message):
self.sender.send(message)
تو این حالت،
sender
(که میتونه EmailSender
، SMSSender
یا هر چیز دیگهای باشه) از بیرون به NotificationService
تزریق میشه. حالا اگه بخوای نوع ارسال پیام رو تغییر بدی، فقط کافیه یه شیء جدید بهش تزریق کنی:email_sender = EmailSender()
sms_sender = SMSSender()
notification = NotificationService(email_sender) # استفاده از ایمیل
notification.send("Hello via Email!")
notification_sms = NotificationService(sms_sender) # استفاده از SMS
notification_sms.send("Hello via SMS!")
مزایای Dependency Injection 📈
1⃣ قابلیت تست بیشتر: چون وابستگیها از بیرون تزریق میشن، میتونی راحتتر mock کنی و تست بنویسی.
2⃣ انعطافپذیری بیشتر: راحت میتونی وابستگیهای مختلف رو جایگزین کنی بدون اینکه توی کلاس تغییر بدی.
3⃣ کاهش coupling: وابستگی بین کلاسها کمتر میشه و این باعث میشه کدات مستقلتر باشن.
جمعبندی 🎯
فهمیدیم که Dependency Injection بهت کمک میکنه که کدهای تمیزتری داشته باشی که راحتتر تست و اپدیت میشن. خیلی وقتا که بخوای یه اپلیکیشن بزرگ و مقیاسپذیر بنویسی، این الگو میتونه کارتو خیلی راحتتر کنه. پس دفعه بعد که داشتی کد میزدی و حس کردی یه کلاس داره زیادی به کلاسهای دیگه وابسته میشه، به فکر استفاده از این روش باش 😉
#programing #backend
❤23