آموزش ویدیویی پایگاه داده، SQL و NoSQL و ...
2.09K subscribers
227 photos
116 videos
1.84K links
* پیشنهادات، تبلیغات و تبادل و ... : @ma_limbs

* تعرفه تبلیغات:
https://t.me/+w-o6dHW5O31jMWNk
Download Telegram
📚 نکته #SQLite

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏حالت‌های تراکنش (IMMEDIATE, EXCLUSIVE)

نکته 1:
‏SQLite سه حالت مختلف برای شروع تراکنش با دستور BEGIN ارائه می‌دهد: DEFERRED، IMMEDIATE و EXCLUSIVE که نحوه مدیریت قفل‌ها و همزمانی (Concurrency) را تعیین می‌کنند.

نکته 2:
‏حالت پیش‌فرض BEGIN DEFERRED است که قفل نوشتن (Write Lock) را تا زمان اجرای اولین دستور نوشتن (مانند INSERT یا UPDATE) به تأخیر می‌اندازد.

نکته 3:
‏در حالت DEFERRED، چندین تراکنش می‌توانند به طور همزمان به پایگاه داده دسترسی خواندن داشته باشند، اما تنها یک تراکنش می‌تواند همزمان عملیات نوشتن را آغاز کند.

نکته 4:
‏حالت BEGIN IMMEDIATE بلافاصله یک قفل نوشتن را بر روی پایگاه داده اعمال می‌کند، به محض شروع تراکنش و قبل از اجرای هر دستور DML.

نکته 5:
‏هنگامی که قفل نوشتن فوری (IMMEDIATE) توسط یک تراکنش به دست می‌آید، هیچ تراکنش دیگری نمی‌تواند عملیات نوشتن را آغاز کند، اما تراکنش‌های خواننده موجود می‌توانند ادامه دهند.

نکته 6:
‏حالت BEGIN EXCLUSIVE بالاترین سطح انزوا را فراهم می‌کند و بلافاصله یک قفل انحصاری را بر روی پایگاه داده اعمال می‌کند.

نکته 7:
‏در حالت EXCLUSIVE، نه تنها هیچ تراکنش دیگری نمی‌تواند عملیات نوشتن را آغاز کند، بلکه هیچ تراکنش دیگری (حتی خواننده) نیز اجازه دسترسی به پایگاه داده را ندارد.

نکته 8:
‏استفاده از حالت IMMEDIATE برای برنامه‌هایی که قصد دارند حتماً عملیات نوشتن را انجام دهند، توصیه می‌شود، زیرا از احتمال شکست تراکنش در میانه راه به دلیل قفل‌های تأخیری جلوگیری می‌کند.

نکته 9:
‏حالت EXCLUSIVE معمولاً در مواقعی استفاده می‌شود که نیاز به انجام یک سری عملیات حساس و حیاتی است و هیچ فعالیت همزمان دیگری (حتی خواندن) نباید دخالت کند.

نکته 10:
‏انتخاب حالت مناسب تراکنش بر روی کارایی و رفتار همزمانی برنامه تأثیر مستقیم دارد؛ DEFERRED بیشترین همزمانی خواندن را فراهم می‌کند، در حالی که EXCLUSIVE کمترین همزمانی را دارد.


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #SQLite

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏دستور VACUUM

نکته 1:
‏VACUUM چیه؟ 🤔 مثل یه جاروبرقی قوی برای دیتابیس SQLite می‌مونه! فایل دیتابیس رو تمیز و بهینه‌سازی می‌کنه. 🧹

نکته 2:
‏هدف اصلیش اینه که فضای خالی (Free Space) که بعد از حذف و آپدیت‌ها تو فایل جا مونده رو حذف کنه و حجم فایل رو واقعاً کوچک کنه. 💾

نکته 3:
‏وقتی VACUUM رو اجرا می‌کنی، SQLite کل دیتابیس رو بازسازی و داده‌ها رو تو یه فایل جدید مرتب کپی می‌کنه، بعد فایل قدیمی رو پاک می‌کنه. 🛠️

نکته 4:
‏اگه دیتابیس تو بعد از حذف داده‌ها هنوز بزرگه، VACUUM تنها راهیه که می‌تونی حجم فایل رو به اندازه واقعی داده‌ها برگردونی. 📏💡

نکته 5:
‏نکته مهم: موقع اجرای VACUUM، دیتابیس قفل می‌شه و هیچ فرآیند دیگه‌ای نمی‌تونه بهش دسترسی داشته باشه. پس تو زمان کم‌ترافیک اجراش کن. 🚫

نکته 6:
‏VACUUM یه عملیات زمان‌بره، چون کل دیتابیس رو کپی می‌کنه. برای دیتابیس‌های خیلی بزرگ، ممکنه طول بکشه! 🐘

نکته 7:
‏برای اینکه VACUUM کل دیتابیس رو قفل نکنه، می‌تونی از PRAGMA incremental_vacuum استفاده کنی که فقط یه تعداد مشخص از صفحات رو تمیز می‌کنه. ذره‌ذره تمیزکاری! 🤏

نکته 8:
‏اگه می‌خوای یه کپی تمیز و فشرده از دیتابیس بگیری، می‌تونی از VACUUM INTO 'backup_path.db'; استفاده کنی. هم تمیز می‌شه، هم بک‌آپ می‌گیری! 📦🔥

نکته 9:
‏تو نمی‌تونی VACUUM رو توی یه تراکنش باز (Open Transaction) اجرا کنی. باید اول تراکنش رو با COMMIT یا ROLLBACK ببندی. 🛑

نکته 10:
‏یه ترفند: اگه PRAGMA auto_vacuum = FULL; رو فعال کنی، بعد از هر حذف، SQLite سعی می‌کنه یه کم فضا رو تمیز کنه. این به جای VACUUM بزرگ، به درد می‌خوره. 😎


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #SQLite

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏مشکلات همزمانی و راه‌حل‌ها

نکته 1:
‏مشکل اصلی همزمانی تو SQLite اینه که فقط یک فرآیند می‌تونه در هر لحظه بنویسه. اگه چند نفر همزمان بخوان بنویسن، یکی باید منتظر بشه.

نکته 2:
‏رایج‌ترین مشکل، خطای SQLITE_BUSY هست. یعنی "بابا، یکی داره می‌نویسه، بیا چند لحظه دیگه!" راه‌حل: دوباره تلاش کن! 🔄💡

نکته 3:
‏راه‌حل طلایی: تو کدت یه حلقه تلاش مجدد (Retry Loop) بذار. اگه BUSY دیدی، چند میلی‌ثانیه صبر کن و کوئری رو دوباره بفرست. اینجوری برنامه هنگ نمی‌کنه. 🛠️🔥

نکته 4:
‏برای بهینه‌سازی، همیشه از تراکنش‌ها استفاده کن! جمع کردن چندین عملیات نوشتن تو یک BEGIN...COMMIT، زمان قفل بودن رو خیلی کم می‌کنه. 🚀

نکته 5:
‏اگه خواندن‌های همزمان داری که باعث مشکل می‌شن، با دستور PRAGMA read_uncommitted = 1 می‌تونی اجازه بدی که فرآیندها دیتای نیمه‌کاره رو هم بخونن (با ریسک کمتر). 🧐

نکته 6:
‏یکی از بهترین راه‌حل‌ها، فعال کردن حالت WAL (Write-Ahead Logging) هست. این مکانیزم اجازه می‌ده خواندن‌ها و نوشتن‌ها همزمان انجام بشن (با قفل‌های هوشمندتر). ✍️📖

نکته 7:
‏تو حالت عادی (Journal Mode)، موقع نوشتن، خواندن‌ها بلاک می‌شن. اما با WAL، خواندن‌ها می‌تونن از فایل کمکی WAL بخونن و بلاک نمی‌شن. 🥳

نکته 8:
‏اگه خطای BUSY داری، سعی کن دستور COMMIT یا ROLLBACK رو سریع‌تر اجرا کنی. باز نگه داشتن طولانی تراکنش، کل سیستم رو کند می‌کنه. ⏱️

نکته 9:
‏برای برنامه‌هایی که خیلی خیلی ترافیک نوشتن بالا دارن، شاید SQLite دیگه مناسب نباشه! باید به دیتابیس‌های بزرگتر (مثل PostgreSQL یا MySQL) که همزمانی واقعی دارن کوچ کنی. 🐘

نکته 10:
‏اگه داری از دیتابیس‌های موقتی (TEMP) استفاده می‌کنی، برای اونها مشکلی با همزمانی نوشتن نداری، چون هر اتصال دیتابیس موقتی خودش رو داره. راحت باش! 😎


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #MySQL

🟣 موضوع : ‏کار با انواع JOIN در MySQL به صورت عملی
📖 سرفصل : ‏مثال عملی دیگر با SELF JOIN: یافتن مشتریان هم‌شهر

‏فکر کن داری از جدول مشتری‌هات یه کپی می‌گیری و کنار خودش می‌ذاری تا ردیف به ردیف با هم مقایسه‌شون کنی. یه جورایی همزادبازی! 👯‍♂️

‏جادوی اصلی تو شرط ON اتفاق میفته! وقتی می‌نویسی a.City = b.City یعنی فقط مشتری‌هایی که تو یه شهرن رو بیار کنار هم.

‏یادت نره که یه مشتری رو با خودش مقایسه نکنی! حتماً این شرط رو بذار: a.CustomerID <> b.CustomerID وگرنه الکی شلوغ میشه. 🤦‍♀️💡

‏استفاده از اسم‌های مستعار (alias) مثل c1 و c2 برای جدولات، کوئری رو خیلی خوشگل و خوانا می‌کنه. مثلاً FROM Customers AS c1, Customers AS c2 😎

‏برای اینکه نتیجه رو واضح ببینی، اسم هر دو مشتری و شهرشون رو کنار هم بیار. مثلا: SELECT c1.FullName, c2.FullName, c1.City 👀

‏برای اینکه جفت‌های تکراری (مثلا علی و رضا، بعد رضا و علی) رو نبینی، یه شرط کوچولوی دیگه اضافه کن: WHERE c1.CustomerID < c2.CustomerID. اینجوری کوئریت تمیز میشه! 🧹

‏اگه جدول مشتری‌هات خیلی بزرگه، حتما روی ستون شهر یه ایندکس (Index) بذار. سرعت کوئری‌ت زمین تا آسمون فرق می‌کنه! 🚀

‏میتونی خلاق باشی! حالا که اینو یاد گرفتی، مشتری‌های هم‌استانی یا حتی با فامیلی یکسان رو هم پیدا کن. دستت بازه! 🌌

‏این تکنیک برای کمپین‌های تبلیغاتی محلی یا پیدا کردن مشتری‌های یه منطقه خاص عالیه. حسابی به دردت می‌خوره! 🎯

‏از SELF JOIN نترس! انگار جدول داره با خودش حرف می‌زنه تا رفیق‌هاشو پیدا کنه. تو هم می‌تونی! 💪🔥


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 نکته یادگیری ماشین

یه مثال ساده با پایتون در مورد تاثیر نرمال‌سازی داده‌ها


from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score

# داده نمونه
data = load_iris()
X, y = data.data, data.target

# تقسیم داده به آموزش و تست
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# مدل KNN بدون نرمال‌سازی
model = KNeighborsClassifier()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print("دقت بدون نرمال‌سازی:", accuracy_score(y_test, y_pred))

# مدل KNN با نرمال‌سازی
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

model_scaled = KNeighborsClassifier()
model_scaled.fit(X_train_scaled, y_train)
y_pred_scaled = model_scaled.predict(X_test_scaled)
print("دقت با نرمال‌سازی:", accuracy_score(y_test, y_pred_scaled))


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



ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ


لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #MySQL

🟣 موضوع : ‏کار با انواع JOIN در MySQL به صورت عملی
📖 سرفصل : ‏معرفی عبارت‌های جدول مشترک (Common Table Expressions - CTE)

‏CTE ها مثل یه اسم مستعار باحال برای زیرquery هات هستن! خیلی خوانا میکنه کوئری رو. 😎

‏با CTE ها، میتونی یه بار یه چیزی رو حساب کنی و بعد چند بار ازش استفاده کنی! ♻️ دیگه لازم نیست کدتو تکرار کنی.

‏یادت باشه CTE ها فقط تو همون کوئری که تعریف شدن اعتبار دارن. مثل یه راز باحال! 😉🤫

‏CTE های بازگشتی برای کار با داده‌های سلسله مراتبی خیلی به درد میخورن. مثلاً ساختار سازمانی یه شرکت. 🌳🏢

‏میتونی چند تا CTE رو پشت سر هم تعریف کنی، فقط کافیه با کاما از هم جداشون کنی. خیلی شیک و مجلسی! 👌

‏وقتی از CTE استفاده میکنی، اول اسم CTE رو میاری، بعد ستون هاش رو (اگه خواستی اسم بدی)، بعدش هم AS و بعدش SELECT statement خودت. ✍️

‏اگه یه CTE داری که هیچی برنمیگردونه، کل کوئری هیچی برنمیگردونه. پس حواست باشه! 👻

‏با CTE ها میتونی کوئری های پیچیده رو به تیکه های کوچیکتر و قابل فهم تر تقسیم کنی. مثل پازل! 🧩🤓

‏میتونی CTE ها رو با جدول های دیگه join کنی. اینجوری قدرتت چند برابر میشه! 💪💥

‏قبل از اینکه CTE رو تو production استفاده کنی، حتماً تستش کن. نمیخوای یهو خرابکاری بشه! 💣🔥


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #MySQL

🟣 موضوع : ‏کار با انواع JOIN در MySQL به صورت عملی
📖 سرفصل : ‏RIGHT JOIN: حفظ تمام رکوردهای جدول راست

‏یادت باشه تو RIGHT JOIN، جدول سمت راست همیشه مهمونه ویژه است! همه‌ی رکورداش میان، حتی اگه تو جدول سمت چپی هیچی پیدا نشه براشون 😅🔥

‏وقتی از RIGHT JOIN استفاده می‌کنی، خیالت راحت باشه که تمام داده‌های جدول سمت راستت رو داری، هیچ‌کدوم جا نمی‌مونن! 💡

‏یه ترفند باحال: اگه می‌خوای ببینی کدوم رکوردهای جدول سمت راست تو جدول سمت چپ نیستن، یه شرط WHERE left_table.column IS NULL بذار ته کوئریت! 😉🔥

‏وقتی با RIGHT JOIN کار می‌کنی، حواست به NULL ها باشه! ممکنه جاهایی که تو جدول سمت چپ اطلاعاتی نیست، NULL برگرده. از COALESCE استفاده کن که خوشگلش کنی! 😎💡

‏تصور کن RIGHT JOIN یه مهمونیه که همه مهمونای سمت راست دعوتن، ولی ممکنه بعضی‌هاشون همراه نداشته باشن از سمت چپ! 🎉

‏اگه گیج شدی که کی به کیه، یه نقاشی کوچیک بکش از جدولا و ارتباطشون. RIGHT JOIN یعنی همه از راست! 🤓🔥

‏یه موقع‌هایی RIGHT JOIN خیلی بدرد می‌خوره، مثلاً وقتی می‌خوای گزارش کاملی از همه‌ی مشتری‌هات داشته باشی، حتی اونایی که هنوز سفارشی ندادن! 📊💡

‏با RIGHT JOIN می‌تونی ببینی کدوم محصولات تو انبارت هستن که هنوز کسی نخریده. اینجوری می‌فهمی چی داره خاک می‌خوره! 🧐

‏تمرین، تمرین، تمرین! با چندتا جدول کوچیک RIGHT JOIN رو امتحان کن تا قشنگ دستت راه بیفته. نترس، خرابکاری نداره! 💪🔥

‏یادت نره که RIGHT JOIN برعکس LEFT JOIN عمل می‌کنه! پس اگه یه جا قاطی کردی، جای این دوتا رو عوض کن، شاید درست شد! 😜💡


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 کوییز #یادگیری_ماشین

🟣 موضوع : ‏مدل‌های گراف توجهی (Graph Attention Networks - GATs)

🟢 سوال :

‏کدام روش برای جلوگیری از overfitting در GAT معمولاً به کار نمی‌رود؟

گزینه 1:
dropout
گزینه 2:
weight decay
گزینه 3:
early stopping
گزینه 4:
‏افزایش داده‌ها

🔵 گزینه صحیح: 4

🟢 توضیح :

‏روش افزایش داده‌ها (data augmentation) عموماً در قالب GAT استفاده نمی‌شود.


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #MySQL

🟣 موضوع : ‏کار با انواع JOIN در MySQL به صورت عملی
📖 سرفصل : ‏مقایسه نتایج LEFT JOIN و RIGHT JOIN

‏LEFT JOIN: همه چی از جدول چپ! اگه می‌خوای همه ردیف‌های جدول سمت چپ رو داشته باشی، حتی اگه تو جدول راست match پیدا نشد (با NULL پر می‌شه)، LEFT JOIN رفیقته. 🤝

‏RIGHT JOIN: همه چی از جدول راست! برعکس LEFT JOIN، این یکی همه ردیف‌های جدول سمت راست رو نشون میده. اگه تو چپ چیزی نباشه، NULL می‌بینی. 😉

‏تبدیل RIGHT به LEFT: همیشه میشه! یادت باشه، هر RIGHT JOIN رو می‌تونی با عوض کردن جای جدول‌ها به LEFT JOIN تبدیل کنی. مثلاً A RIGHT JOIN B همون B LEFT JOIN A هست. این یه ترفند باحاله!

‏کدوم رو انتخاب کنم؟ معمولاً LEFT JOIN پرکاربردتره، چون بیشتر ما با یه "جدول اصلی" شروع می‌کنیم و اطلاعات رو بهش اضافه می‌کنیم. اما هر دو کاربرد خودشون رو دارن. 💡

‏NULLها رو بشناس! مهم‌ترین تفاوتشون اینه که کدوم طرف رو با NULL پر می‌کنن وقتی match پیدا نشه. LEFT JOIN سمت راست رو و RIGHT JOIN سمت چپ رو. اینو یادت نره! 🧐

‏مثال کاربردی LEFT JOIN: فرض کن لیست همه مشتری‌ها رو می‌خوای، حتی اگه سفارشی ثبت نکرده باشن. Customers LEFT JOIN Orders. ساده و مفید! 🛍️

‏مثال کاربردی RIGHT JOIN: کمتر پیش میاد مستقیم ازش استفاده کنیم، ولی مثلاً اگه بخوای همه محصولات رو ببینی، حتی اگه هیچ سفارشی براشون ثبت نشده (با فرض اینکه Orders رو سمت چپ و Products رو سمت راست JOIN کنی). 🛒

‏تمرین کن! بهترین راه برای درکشون اینه که با چندتا جدول کوچیک و داده‌های تستی خودت امتحانشون کنی. نتایج رو ببین و مقایسه کن. دستت راه میفته! 💪

‏عملکرد (Performance): در اکثر موارد، از نظر عملکرد تفاوت محسوسی بین LEFT JOIN و RIGHT JOIN نیست، چون MySQL هر دو رو بهینه می‌کنه. مهم اینه که کدوم رو برای منطق کوئریت لازم داری.

‏JOIN‌های دیگه رو هم دریاب! اینا فقط دو تا از انواع JOIN هستن. INNER JOIN (فقط مشترکات) و FULL JOIN (همه چیز از هر دو طرف، که در MySQL مستقیم نداریم و باید با UNION ALL شبیه‌سازی بشه) رو هم بشناس. دنیای JOINها بزرگه! 🚀


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #NoSQL

🟣 موضوع : Memory vs Disk‑Based Storage

نکته :

‏حجم داده‌هات خیلی زیاده و نمی‌خوای ورشکست شی؟ 💸 Disk-Based Storage انتخاب منطقی‌تریه. مثلاً MongoDB برای داده‌های بزرگ عالیه، فقط یه کم صبور باش!


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 نکته یادگیری ماشین

افزایش داده (Data Augmentation) 🖼

همیشه می‌گن "بیشتر بهتره"، مخصوصاً در یادگیری ماشین. هرچی داده‌های آموزشی بیشتری داشته باشی، مدل‌ت بهتر یاد می‌گیره و قوی‌تر می‌شه. 💪 اما گاهی اوقات، جمع‌آوری داده‌های بیشتر خیلی سخت یا حتی غیرممکنه.

اینجا افزایش داده به کمکمون میاد. این تکنیک مثل یه شعبده‌بازی عمل می‌کنه که با چندتا داده موجود، کلی داده جدید می‌سازه! 🪄

به زبان ساده‌تر:

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

به جای اینکه بری دنبال هزارتا عکس دیگه، می‌تونی همون یه عکس رو دستکاری کنی:

عکس رو برگردونیش (آینه‌ای‌اش کنی). ↔️

یکم بچرخونیش. 🔄

نور و روشنیش رو عوض کنی. 💡

یه ذره زوم کنی یا کوچیکش کنی. 🔍

حالا مدل‌ت فکر می‌کنه با ۴ یا ۵ عکس کاملاً جدید روبرو شده، در حالی که همه از همون یه عکس اصلی ساخته شدن. به این ترتیب، با اینکه داده‌های اولیه کم بودن، مدل می‌تونه گربه رو در شرایط مختلف بهتر تشخیص بده.

این تکنیک بیشتر در حوزه بینایی کامپیوتر استفاده می‌شه، اما ایده‌اش در سایر حوزه‌ها هم کاربرد داره.

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

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ


لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #NoSQL

🟣 موضوع : ‏Metrics و Health Checks

نکته :

‏از ابزارهای مانیتورینگ که متریک‌های NoSQL رو خوب نشون میدن استفاده کنید. 📊💡


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
🔵 نکته یادگیری ماشین

می‌دونیم مدل‌ها با تابع هزینه اشتباهاتشون رو می‌سنجن، بریم سراغ اینکه چطور اون اشتباهات رو درست می‌کنن! 🔧

نزول گرادیان (Gradient Descent)

تصور کن چشم‌هات بسته است و در بالای یک تپه ایستادی. هدف تو اینه که به پایین‌ترین نقطه در دره برسی. چطور این کار رو می‌کنی؟

یک راه اینه که شیب زمین رو زیر پات حس کنی و هر بار در جهت شیب‌دارترین سراشیبی، یک قدم کوچک برداری. اگر این کار رو تکرار کنی، بالاخره به پایین‌ترین نقطه می‌رسی. 🚶‍♂️

این دقیقاً کاری است که الگوریتم نزول گرادیان (Gradient Descent) انجام می‌ده.

به زبان ساده‌تر:

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

تپه: تابع هزینه (هر چه بالاتر، خطا بیشتر).

تو: پارامترهای مدل (مثل وزن‌ها و بایاس‌ها).

جهت شیب‌دارترین سراشیبی: گرادیان، که به مدل می‌گه در کدوم جهت باید پارامترهاش رو تغییر بده تا خطا سریع‌تر کم بشه.

قدم‌های کوچک: نرخ یادگیری (Learning Rate)، که تعیین می‌کنه هر بار چقدر تغییر در پارامترها ایجاد بشه. (قدم‌های بزرگ سریع‌ترن اما ممکنه از دره رد بشن؛ قدم‌های کوچک کندن اما امن‌تر.)

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

نزول گرادیان قلب الگوریتم‌های آموزش بسیاری از مدل‌های قدرتمند، از جمله شبکه‌های عصبی است و به مدل‌ها اجازه می‌ده که از داده‌ها یاد بگیرن.

خلاصه که، نزول گرادیان به مدل می‌گه که 'با قدم‌های کوچک و با دقت، به سمت کمترین خطا حرکت کن!' 📉

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ


لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #SQL

🟣 موضوع : ‏توابع کاربر-تعریف‌شده (UDF)

نکته :

‏میتونی UDF ها رو به صورت اسکالر (Scalar) یا جدولی (Table-Valued) بسازی! هر کدوم یه کاربردی دارن! 🤩


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #SQLite

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏روش‌های پشتیبان‌گیری

نکته 1:
‏ساده‌ترین روش، کپی کردن مستقیم فایل دیتابیس (.db) به یه جای امنه. چون SQLite فقط یه فایله، این روش سریع‌ترینه! 📦💾

نکته 2:
‏روش حرفه‌ای‌تر، استفاده از Backup API خود SQLite (تو زبان‌های برنامه‌نویسی) هست. اینجوری می‌تونی حتی موقع کار کردن برنامه با دیتابیس، بک‌آپ بگیری. 🛠️💡

نکته 3:
‏اگه حالت WAL (Write-Ahead Logging) فعال باشه، برای بک‌آپ باید علاوه بر فایل اصلی، فایل‌های .wal و .shm رو هم کپی کنی. اینا داده‌های جدید رو نگه می‌دارن! ⚠️

نکته 4:
‏بهترین کار اینه که از دستور VACUUM INTO 'مسیر_بک‌آپ.db'; استفاده کنی. این یه بک‌آپ تمیز و فشرده (بدون فضای خالی) برات می‌گیره. 🧹

نکته 5:
‏اگه می‌خوای بک‌آپت فقط یه فایل متنی حاوی دستورات SQL باشه، از ابزار sqlite3 با دستور .dump استفاده کن. این خروجی رو می‌تونی رو هر دیتابیس دیگه‌ای اجرا کنی. 📝

نکته 6:
‏برای بک‌آپ گرفتن، می‌تونی از ATTACH DATABASE هم استفاده کنی. دیتابیس مقصد رو وصل کن و با INSERT INTO ... SELECT ... داده‌ها رو کپی کن. 🔗

نکته 7:
‏یادت باشه، اگه فقط فایل اصلی رو کپی کنی، تراکنش‌های نیمه‌کاره‌ای که تو فایل Journal بودن، توی بک‌آپ اعمال نمی‌شن. پس مطمئن شو که تراکنش فعالی نباشه. 🛑

نکته 8:
‏برای بک‌آپ‌های بسیار بزرگ، می‌تونی از ابزارهای سیستمی (مثل rsync یا robocopy) استفاده کنی تا فقط تغییرات فایل رو کپی کنن و سرعتت بیشتر بشه. 🚀

نکته 9:
‏هیچ‌وقت از روش Cut/Paste برای بک‌آپ استفاده نکن! همیشه کپی کن تا اگه مشکلی پیش اومد، فایل اصلی سر جاش باشه. ✂️

نکته 10:
‏بهترین استراتژی، ترکیب این روش‌هاست: بک‌آپ‌های روزانه با کپی فایل و بک‌آپ‌های دوره‌ای با VACUUM INTO برای تمیزکاری! 💯😎


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #NoSQL

🟣 موضوع : ‏توزیع جغرافیایی داده (Geo‑Distribution)

نکته :

‏همگام‌سازی دیتا: چطوری مطمئن بشیم همه کپی‌ها به‌روزن؟ دیتابیس‌های NoSQL خودشون معمولاً این کارو می‌کنن، ولی مدل "Consistency"شون (سازگاری) رو بشناس. خیلی مهمه! 🔄


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #SQLite

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏مزایا و معایب پایگاه داده در حافظه

نکته 1:
‏مزیت اصلی: دیتابیس‌های In-Memory فوق‌العاده سریع هستن چون داده‌ها رو مستقیم از RAM می‌خونن، نه از دیسک کند. 🚀💡

نکته 2:
‏مزیت کاربردی: برای تست‌های واحد (Unit Tests) عالی هستن! Schema رو می‌سازی، تست می‌کنی و بعدش همه چی پاک می‌شه، بدون هیچ فایل اضافی. 🧪

نکته 3:
‏عیب بزرگ: داده‌ها ناپایدار (Volatile) هستن. اگه برق بره، برنامه کرش کنه یا اتصال قطع شه، کل داده‌ها از دست می‌رن! 💥😭

نکته 4:
‏مزیت محیطی: برای محیط‌هایی که فضای دیسک مهم و محدوده (مثل بعضی دستگاه‌های IoT) یا نمی‌خوای فایل دائمی بسازی، بهترین هستن. 💾

نکته 5:
‏عیب محدودیت: حجم دیتابیس In-Memory به میزان RAM موجود شما بستگی داره. نمی‌تونی داده‌ی بیشتر از ظرفیت RAM توش بریزی. 🧠

نکته 6:
‏مزیت سرعت بالا: برای پردازش‌های سریع و موقت روی داده‌ها (مثل فیلتر و مرتب‌سازی داده‌های بزرگ) که نیازی به ذخیره دائمی ندارن، عالی عمل می‌کنن.

نکته 7:
‏عیب اشتراک‌گذاری: به طور پیش‌فرض، دیتابیس In-Memory فقط تو یه Connection قابل دسترسیه. برای اشتراک‌گذاری، باید تنظیمات خاصی رو فعال کنی. 🔗

نکته 8:
‏مزیت سادگی: دیگه درگیر مدیریت فایل‌ها، قفل دیسک یا فضای اشغال‌شده توسط دیتابیس روی دیسک نیستی. همه چی تو حافظه است. 🎈

نکته 9:
‏عیب بازیابی: از اونجایی که داده‌ها موقت هستن، اگر یه خطای برنامه پیش بیاد، هیچ راهی برای بازیابی دیتای لحظه‌ای وجود نداره. 🛡️

نکته 10:
‏کاربرد عملی: برای کش کردن (Caching) داده‌های سرور که باید با سرعت بالا خونده بشن ولی نیاز به ماندگاری طولانی ندارن، این نوع دیتابیس پادشاهه. 👑😎


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #SQLite

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏مدیریت پایگاه داده‌های بزرگ

نکته 1:
‏برای دیتابیس‌های بزرگ (در حد گیگابایت)، حتماً حالت WAL (Write-Ahead Logging) رو فعال کن. این کار همزمانی و سرعت نوشتن رو خیلی بهتر می‌کنه! 🚀🔥

نکته 2:
‏ایندکس‌ها دوست صمیمی دیتابیس‌های بزرگ هستن. روی ستون‌هایی که زیاد جستجو می‌کنی یا مرتب می‌کنی، ایندکس بساز تا کند نشی. 💡

نکته 3:
‏سعی کن عملیات نوشتن (INSERT/UPDATE/DELETE) رو تو تراکنش‌های بزرگ (بین BEGIN و COMMIT) انجام بدی. این کار صدها برابر سریع‌تر از نوشتن‌های تکیه. 🚄

نکته 4:
‏اگه دیتابیس خیلی بزرگ داری، می‌تونی سایز صفحات (Page Size) رو از ۴ کیلوبایت پیش‌فرض به ۸ یا ۱۶ کیلوبایت افزایش بدی. این برای داده‌های حجیم خوبه. 📏

نکته 5:
‏برای خواندن‌های زیاد، حافظه کش (Cache Size) رو تو RAM بزرگتر کن: PRAGMA cache_size = -20000;. اینجوری SQLite داده‌ها رو از دیسک نمی‌خونه. 🧠

نکته 6:
‏اگه حجم دیتابیس خیلی زیاد شده، به جای ذخیره‌ی فایل‌های بزرگ (مثل تصاویر) به صورت BLOB، اونا رو تو سیستم فایل بذار و فقط مسیرشون رو تو دیتابیس نگه دار. 📦💾

نکته 7:
‏به صورت دوره‌ای و در زمان‌های کم‌ترافیک، دستور VACUUM رو اجرا کن. این کار فضای خالی رو حذف می‌کنه و دیتابیس رو بهینه نگه می‌داره. 🧹

نکته 8:
‏ستون‌های متنی (TEXT) طولانی رو فقط زمانی ایندکس کن که واقعاً لازمه. ایندکس‌های بزرگ، حجم دیتابیس رو به شدت زیاد می‌کنن. 📝

نکته 9:
‏برای مدیریت بهتر دیتابیس‌های خیلی بزرگ، می‌تونی داده‌های قدیمی رو به یه دیتابیس آرشیو منتقل کنی (با ATTACH و DETACH). دیتابیس اصلیت سبک می‌مونه. 🔗

نکته 10:
‏اگر دیتابیس تو دائماً توسط چندین کاربر همزمان نیاز به نوشتن داره، SQLite برای اون سناریو طراحی نشده. باید به دیتابیس‌های سرور-محور (مثل PostgreSQL) کوچ کنی. 🐘😎


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #SQLite

🟣 موضوع : ‏بررسی و مقایسه انواع ذخیره‌سازی داده‌ها در SQLite
📖 سرفصل : ‏مفاهیم اولیه داده‌های جغرافیایی

نکته 1:
‏داده‌های جغرافیایی یعنی هر چیزی که با موقعیت روی زمین سر و کار داره، مثل مختصات GPS، نقشه‌ها و محدوده‌های مکانی. 🗺️💡

نکته 2:
‏اولین مفهوم، نقطه (Point) هست. مثل یه جای خاص روی نقشه که فقط با دو عدد عرض و طول جغرافیایی (Latitude و Longitude) مشخص می‌شه. 📍

نکته 3:
‏بعد از نقطه، خط (LineString) رو داریم. این از وصل شدن چند تا نقطه به هم ایجاد می‌شه. مثلاً مسیر یه خیابون یا مسیر حرکت یه ماشین. 📏

نکته 4:
‏مفهوم بعدی چندضلعی (Polygon) هست که برای نشون دادن یه محدوده یا منطقه استفاده می‌شه، مثلاً مرز یه شهر یا یه پارک. 🏞️

نکته 5:
‏ما دو سیستم برای مختصات داریم: کروی (Spherical) که زمین رو گرد در نظر می‌گیره (مثل GPS) و صفحه‌ای (Planar) که برای نقشه‌های کوچک‌تر استفاده می‌شه. 🌐

نکته 6:
‏تمام این اشکال جغرافیایی معمولاً تو یه قالب استاندارد به نام WKT (Well-Known Text) ذخیره می‌شن. مثل POINT(35 51). 📝

نکته 7:
‏برای ذخیره این داده‌ها تو SQLite، باید از افزونه SpatiaLite استفاده کنی. SQLite معمولی این مفاهیم رو نمی‌فهمه. 🦸‍♂️🔥

نکته 8:
‏R-Tree یه نوع ایندکس جادوییه که برای جستجوی سریع داده‌های جغرافیایی استفاده می‌شه. ایندکس‌های معمولی تو این کار ضعیفن. 🌳🚀

نکته 9:
‏یکی از کاربردی‌ترین کارها، محاسبه فاصله بین دو نقطه است. توابع جغرافیایی این کار رو به شکل دقیق و استاندارد انجام می‌دن. 📐

نکته 10:
‏مفهوم رابطه مکانی (Spatial Relationship) یعنی بررسی کنیم که آیا یه نقطه درون یه چندضلعی هست یا دو تا خط همدیگه رو قطع می‌کنن. 🧐


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #NoSQL

🟣 موضوع : ‏Modeling روابط در گراف‌دیتابیس

نکته :

‏اگه تعداد روابط زیاد شد، نترس! 💪 ساختار مناسب، همه چی رو حل می‌کنه. 😉


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir
💡 نکته #MySQL

🟣 موضوع : ‏کار با انواع JOIN در MySQL به صورت عملی
📖 سرفصل : ‏درک مقادیر NULL در دو طرف نتیجه FULL OUTER JOIN

‏تصور کن یه مهمونی گرفتی و میخوای همه رو از دو تا گروه مختلف (جدول A و B) دعوت کنی. 🎉 FULL OUTER JOIN دقیقا همین کارو میکنه! اگه کسی از گروه A با کسی از گروه B جور نباشه، جاش با NULL پر میشه. همینطور برعکس!

‏وقتی تو نتیجه FULL OUTER JOIN میبینی ستون‌های سمت چپ (جدول A) پر از NULL شده، یعنی این ردیف‌ها فقط توی جدول سمت راست (جدول B) وجود داشتن و هیچ زوجی تو A براشون پیدا نشده. 🤷‍♀️ اینا اون مهمونای تکی از گروه B هستن!

‏برعکس نکته قبل، اگه ستون‌های سمت راست (جدول B) خالی باشن و NULL داشته باشن، یعنی این ردیف‌ها فقط تو جدول سمت چپ (جدول A) بودن و هیچ زوجی تو B نداشتن. 🙋‍♂️ اینا اون مهمونای تکی از گروه A محسوب میشن!

‏NULL ها تو FULL OUTER JOIN فقط دارن میگن "اینجا اطلاعاتی برای این ردیف از اون جدول دیگه نیست". 👻 یعنی "عدم وجود" نه "صفر" یا "رشته خالی". حواست باشه تو شرط‌هات با IS NULL چک‌شون کنی! 🕵️‍♀️

‏اگه میخوای فقط اون ردیف‌هایی رو ببینی که توی یکی از جدول‌ها بودن ولی توی اون یکی نبودن (یعنی همون مهمونای تکی از هر دو گروه)، میتونی از WHERE TableA.ID IS NULL OR TableB.ID IS NULL استفاده کنی. 🎯 اینجوری فقط خطوطی رو میبینی که حداقل یه سمتشون NULL داره.

‏برای اینکه بهتر درک کنی NULL ها از کجا میان، به شکل "ون دایاگرام" فکر کن. ⭕️ FULL OUTER JOIN کل دایره‌های دو جدول رو پوشش میده. بخش‌هایی که فقط تو یه دایره هستن (و نه تقاطع)، همون جاییه که NULL ها ظاهر میشن. 💡

‏گاهی اوقات دوست نداری NULL ببینی و میخوای یه متن جایگزین نشون بدی. مثلاً به جای NULL بنویسی "ناموجود". ✍️ اون موقع COALESCE(TableA.Column, TableB.Column, 'ناموجود') خیلی به کارت میاد! این فانکشن اولین مقدار غیر NULL رو برمیگردونه. 🛠️

‏اگه داری FULL OUTER JOIN رو با ترکیب LEFT JOIN و UNION ALL شبیه‌سازی میکنی (چون MySQL مستقیم پشتیبانی نمیکنه)، باید خیلی حواست به WHERE TableB.ID IS NULL تو بخش RIGHT JOIN باشه تا ردیف‌های تکراری تو تقاطع رو حذف کنی. ⚠️ این یه ترفند رایجه!

‏NULLها تو FULL OUTER JOIN کمکت میکنن بفهمی کدوم داده‌ها تو یک جدول "منحصر به فرد" هستن و هیچ ارتباطی با جدول دیگه ندارن. 📊 این برای تحلیل داده‌ها و پیدا کردن رکوردهای یتیم (orphan records) خیلی مفیده. 🧐

‏به یاد داشته باش که NULL در SQL یه وضعیت نامعلومه. پس NULL = NULL همیشه FALSE هست! به جای مساوی، همیشه از IS NULL یا IS NOT NULL برای بررسی NULL ها استفاده کن تا به مشکلات منطقی برنخوری. 🚫 این یه نکته طلاییه! 💰


ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

لطفا ما رو به دیگران هم معرفی کنید...

آدرس کانال اصلی :
https://t.me/Tu_24

آدرس وبسایت:
https://Tutorial24.ir