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

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

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

نکته 1:
‏تراکنش (Transaction) چیه؟ 🤔 مثل یه سبد خریده که توش چند تا کار رو می‌ذاری و می‌خوای همه‌شون با هم انجام بشن یا هیچ‌کدوم انجام نشن! 🛒

نکته 2:
‏هدف تراکنش اینه که همه عملیات‌ها رو به صورت یه واحد غیرقابل تفکیک اجرا کنه. اگه یکی از کارها خراب شد، بقیه هم لغو می‌شن (Rollback). 🛑

نکته 3:
‏برای شروع یه تراکنش از دستور BEGIN TRANSACTION یا فقط BEGIN استفاده می‌کنی. از اینجا به بعد، دیگه هر کاری کنی موقتیه. 🎬

نکته 4:
‏اگه همه چیز خوب پیش رفت، باید با دستور COMMIT تراکنش رو نهایی کنی. اینجوری تغییراتت به طور دائمی توی دیتابیس ذخیره می‌شن. 💾

نکته 5:
‏اگه وسط کار یه مشکلی پیش اومد یا پشیمون شدی، از دستور ROLLBACK استفاده کن. دیتابیس برمی‌گرده به قبل از BEGIN. انگار هیچ اتفاقی نیفتاده!

نکته 6:
‏یکی از مهم‌ترین ویژگی‌های تراکنش‌ها، ACID بودنه. به‌خصوص Atomicity (تجزیه‌ناپذیری) که می‌گه یا همه یا هیچ! Consistency هم مهمه. ⚛️💡

نکته 7:
‏تو SQLite، اگه یه دستور INSERT, UPDATE یا DELETE رو بدون BEGIN اجرا کنی، SQLite به صورت خودکار یه تراکنش کوچیک دورش می‌سازه و COMMIT می‌کنه. 🤓

نکته 8:
‏استفاده از تراکنش‌ها، به‌خصوص وقتی تعداد زیادی INSERT داری، می‌تونه سرعت عملیات نوشتن رو به شدت افزایش بده. به جای ۱۰۰۰ تراکنش، فقط ۱ تراکنش داری! 🚀🔥

نکته 9:
‏برای مدیریت تراکنش‌های پیچیده، می‌تونی از Savepoints استفاده کنی. اینا مثل یه سری نقطه عطف تو دل تراکنش هستن که می‌تونی بهشون برگردی. 🚩

نکته 10:
‏وقتی دو نفر همزمان سعی می‌کنن یه جدول رو تغییر بدن، تراکنش‌ها کمک می‌کنن تا دیتابیس قفل نشه یا اطلاعات خراب نشن (Concurrency Control). امنیت داده‌ها رو تضمین می‌کنه! 🔒😎


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

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

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

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

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

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

نکته 2:
‏قبل از اینکه فایل رو کپی کنی، مطمئن شو که هیچ فرآیندی مشغول نوشتن یا تغییر دادن دیتابیس نیست. اگه هست، فایل رو قفل می‌کنه. 🚫✍️

نکته 3:
‏برای بک‌آپ گرفتن مطمئن‌تر، می‌تونی از دستور VACUUM INTO 'backup_path.db'; استفاده کنی. این دستور یه کپی فشرده و تمیز می‌گیره. 🧹

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

نکته 5:
‏برای بازیابی (Restore)، کافیه فایل بک‌آپ رو برگردونی به جای فایل اصلی. اما اول برنامه رو ببند تا تداخل پیش نیاد.

نکته 6:
‏یکی از بهترین راه‌های بک‌آپ گرفتن، استفاده از API بک‌آپ خود SQLite هست که بهت اجازه می‌ده موقعی که برنامه داره از دیتابیس استفاده می‌کنه هم، بک‌آپ بگیری. 🛠️

نکته 7:
‏با استفاده از دستور ATTACH DATABASE می‌تونی فایل بک‌آپ رو به دیتابیس فعال وصل کنی و با دستورات SQL داده‌ها رو بینشون کپی کنی. 🔗💡

نکته 8:
‏هیچ‌وقت فایل‌های بک‌آپت رو تو همون مسیر فایل اصلی نگه ندار! اگه هاردت بسوزه، هر دو با هم از دست می‌رن. بک‌آپ رو یه جای دیگه بذار. 📍

نکته 9:
‏یه روش دستی بازیابی اینه که با sqlite3 یه فایل SQL از Schema و داده‌ها بگیری (با دستور .dump) و بعد اون رو تو یه فایل جدید RESTORE کنی. 📝

نکته 10:
‏بهترین کار اینه که بک‌آپ گرفتن رو به صورت منظم و خودکار تنظیم کنی تا همیشه یه نسخه امن از داده‌هات داشته باشی. این یه اصل طلاییه! 💯😎


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

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

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

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


داده‌های پرت (Outliers) می‌تونن مدل رو به شدت خراب کنن.

🔹 داده پرت یا Outlier یعنی داده‌ای که خیلی از بقیه فاصله داره (مثلاً حقوق ۵ میلیاردی وسط یه دیتاست با میانگین ۱۰ میلیون 😅).
🔹 بعضی الگوریتم‌ها مثل Linear Regression یا KNN خیلی حساسن به داده‌های پرت، در حالی که مدل‌هایی مثل Random Forest کمتر آسیب می‌بینن.

🔹 روش‌های برخورد:

شناسایی و حذف: با استفاده از Z-score، IQR یا روش‌های آماری.

ترنسفورم داده: مثل استفاده از log یا sqrt برای کاهش اثر مقادیر خیلی بزرگ.

مدل‌های مقاوم (Robust): مثل Robust Regression یا استفاده از الگوریتم‌هایی که به outlier حساس نیستن.

به زبان ساده: Outlier مثل “نویز خیلی بلند” توی یک موسیقیه؛ اگه کنترل نشه کل آهنگ رو خراب می‌کنه. 🎵

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


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

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

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

🟣 موضوع : ‏کار با انواع JOIN در MySQL به صورت عملی
📖 سرفصل : ‏آماده‌سازی محیط کار: نصب MySQL و ابزارهای لازم

‏رفیق، وقتی می‌خوای MySQL رو نصب کنی، حواست باشه که همیشه جدیدترین نسخه بهترین نیست! 🧐 گاهی اوقات نسخه‌های پایدارتر یا سازگار با پروژه‌ات، خیلی بهترن. قبل نصب یه چک کوچولو بزن! 👍

‏برای شروع و کارای اولیه، نیازی نیست خیلی خودتو درگیر کنی! 🚀 بسته‌هایی مثل XAMPP یا WAMP یه راه خیلی آسونن که MySQL رو با PHP و Apache یکجا نصب می‌کنن. برای شروع کارآموزی محشره!

‏بعد از اینکه نصب کردی، چطوری مطمئن بشی که MySQL داره کار می‌کنه؟ 🤔 برو تو سرویس‌های ویندوز یا با دستور sudo systemctl status mysql تو لینوکس وضعیتش رو چک کن. اگه سبز بود، یعنی اوکیه!

‏مهم‌ترین قدم امنیتی! 🛡️ بعد از نصب، حتماً یه رمز عبور قوی برای کاربر root ست کن. هیچ وقت بدون رمز عبور رهاش نکن، وگرنه ممکنه هکرها به راحتی وارد شن! 🚨

‏کار کردن با خط فرمان اوکیه، ولی برای دید بصری بهتر، حتماً یه ابزار گرافیکی مثل MySQL Workbench یا phpMyAdmin نصب کن. 🎨 کلی کارت رو راحت‌تر می‌کنه و جذاب‌تره! 🤩

‏اگه می‌خوای از یه کامپیوتر دیگه به MySQL وصل بشی، حواست به فایروال سیستم باشه! 🔥 باید پورت 3306 رو باز کنی تا اتصال برقرار بشه. اگه نه، ممکنه کلی سرش گیج شی! 😵‍💫

‏وقتی MySQL رو نصب کردی و رمز root رو گذاشتی، وقتشه اولین اتصال رو برقرار کنی! 💪 کافیه تو خط فرمان بزنی mysql -u root -p و بعد رمزتو وارد کنی. یه دنیای جدید به روت باز میشه! 🚀

‏هر چیزی یه فایل تنظیمات داره، MySQL هم همینطور! 💡 تو ویندوز معمولاً my.ini و تو لینوکس my.cnf هست. گاهی اوقات برای تغییر پورت یا تنظیمات پیشرفته، باید سراغ این فایل بری! 🕵️‍♂️

‏کار کردن همیشه با کاربر root مثل اینه که با کلید گاوصندوق بری خرید! 🔑 همیشه یه کاربر جدید برای هر پروژه بساز و بهش فقط دسترسی‌های لازم رو بده. اینطوری امن‌تره! 🔐

‏گاهی اوقات ممکنه MySQL روشن نشه! 😩 نگران نباش، معمولاً یا یه سرویس دیگه پورت 3306 رو اشغال کرده (مثل اسکایپ قدیمی) یا فایل تنظیمات ایراد داره. لاگ‌ها رو چک کن! 📜 خیلی کمک می‌کنه. 😉


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

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

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

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

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

‏برای اینکه بتونی تمام ردیف‌های دو تا جدول رو حتی اگه نقطه مشترکی نداشتن ببینی، از FULL OUTER JOIN استفاده کن. انگار داری می‌گی: "همه رو بیار، چه با هم جور بشن چه نشن!" 😉

‏وقتی می‌خوای فقط ردیف‌هایی رو ببینی که توی جدول چپ هستن ولی توی جدول راست نیستن، LEFT JOIN (یا LEFT OUTER JOIN) بهترین دوستته. مثل این می‌مونه که می‌گی: "اول مال خودم، بعد اگه چیزی اضافه بود از تو هم بگیر!" 😎

‏اگه برعکس حالت قبل، یعنی فقط ردیف‌هایی که توی جدول راست هستن ولی توی جدول چپ نیستن رو خواستی، RIGHT JOIN (یا RIGHT OUTER JOIN) کارتو راه میندازه. یه جورایی دیگه از اون ور بوم افتادی! 🙃

‏وقتی فقط دنبال ردیف‌هایی هستی که هم توی جدول چپ باشن هم توی جدول راست (یعنی نقاط مشترک)، INNER JOIN همون چیزیه که لازم داری. ساده و سرراست! 👍

‏CROSS JOIN یه گزینه‌ی باحاله که تمام ترکیبات ممکن از ردیف‌های دو جدول رو بهت نشون میده. خیلی وقتا ممکنه زیاد به درد نخوره، ولی برای تست کردن یا تولید داده‌های اولیه می‌تونه مفید باشه. 🚀

‏اگه خواستی فقط یه سری ردیف از جدول اول رو با ردیف‌های منطبق از جدول دوم ترکیب کنی و اگه منطبق نبود، فقط ستون‌های جدول اول رو نشون بدی، LEFT JOIN رو فراموش نکن. 🌟

‏به طور پیش‌فرض، JOIN توی MySQL معادل INNER JOIN هست. پس اگه نخواستی از INNER JOIN استفاده کنی، بهتره صراحتاً نوع JOIN رو مشخص کنی. 💡

‏گاهی وقت‌ها، استفاده از LEFT JOIN با شرط WHERE می‌تونه به اندازه‌ی NOT EXISTS یا LEFT JOIN IS NULL سریع باشه. حتماً امتحان کن! 💨

‏برای اینکه بفهمی کدوم ردیف‌ها در یک جدول وجود دارن ولی در جدول دیگه نه، ترکیب LEFT JOIN با چک کردن IS NULL در ستون جدول دوم خیلی کاربردیه. یه راه سریع و باحال!

‏یادت باشه که OUTER توی LEFT OUTER JOIN و RIGHT OUTER JOIN اختیاریه. یعنی LEFT JOIN و RIGHT JOIN همون کار رو انجام میدن. پس سخت نگیر! 😄


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

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

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

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

🟣 موضوع : ‏یادگیری ماشین: انتقال یادگیری - چالش‌ها - تفاوت دامنه بین داده‌های منبع و هدف (Domain Shift)

نکته :

‏وقتی داری انتقال یادگیری می‌کنی، اول یه مدل کوچیک رو با داده‌های منبع تمرین بده، بعد کم کم پیچیده‌ترش کن. اینجوری زودتر نتیجه می‌گیری! 🚀🎯


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

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

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

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

🟣 موضوع : ‏یادگیری ماشین: DBSCAN - DBSCAN در داده‌های جریانی (Streaming Data)

نکته :

‏DBSCAN برای داده‌های جریانی مثل یه چالش هیجان‌انگیزه! 🎢 چون DBSCAN دوست داره همه داده‌ها رو با هم ببینه، ولی تو داده‌های جریانی، داده‌ها هی میان و میرن. باید فکر چاره باشی! 🤔


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

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

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

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

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

نکته :

‏از ابزارهای ویژوال برای تجسم روابط استفاده کن. 🖼️ خیلی راحت‌تر میشه فهمید چی به چیه! 😄


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

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

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

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

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

‏یه راه آسون برای پیدا کردن اطلاعات، استفاده از دستور "SELECT" هست. مثلاً SELECT * FROM tablename WHERE columnname = 'value'; 😎

‏اگه می خوای جدولت رو ببینی، از SHOW TABLES; استفاده کن! خیلی سریع و مفیده.

‏برای اینکه بفهمی ساختار جدولت چیه، از DESCRIBE table_name; استفاده کن. این خیلی بهت کمک می‌کنه! 🧐

‏فراموش نکن قبل از هر تغییری، از دیتابیست بک‌آپ بگیری! 😉 پیشگیری بهتر از درمانه. 🛡️

‏برای اضافه کردن یه ستون جدید به جدولت، از ALTER TABLE tablename ADD columnname datatype; استفاده کن. 💪

‏اگه می خوای یه ردیف جدید به جدولت اضافه کنی، از INSERT INTO table_name (column1, column2) VALUES ('value1', 'value2'); استفاده کن. ✍️

‏اگه می خوای یه چیزی رو از جدولت پاک کنی، از DELETE FROM table_name WHERE condition; استفاده کن. مراقب باش! 😬

‏برای آپدیت کردن اطلاعات یه رکورد، از UPDATE tablename SET columnname = 'new_value' WHERE condition; استفاده کن. 🛠️

‏اگه سرعت کوئری‌هات کمه، حتماً ایندکس‌ها رو بررسی کن و به جدولت اضافه کن! 🚀🔥

‏موقعی که داری یه کوئری می‌نویسی، از کامنت‌ها استفاده کن! اینطوری بعداً راحت‌تر می‌فهمی چی نوشتی. 📝💡


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

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

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

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

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

راه‌حل‌های کم‌برازش و بیش‌برازش 💊

کم‌برازش (Underfitting) وقتی اتفاق می‌افته که مدل‌ت زیادی ساده‌ است و نمی‌تونه از داده‌ها یاد بگیره. 📉 برعکس، بیش‌برازش (Overfitting) وقتی اتفاق می‌افته که مدل‌ت زیادی پیچیده است و نویز و جزئیات بی‌ربط رو حفظ می‌کنه. 📈

حالا ببینیم برای هر کدوم چه راه‌حل‌هایی داریم:

راه‌حل‌های کم‌برازش (Underfitting)

ویژگی‌های بیشتر اضافه کن: 💡 مدل‌ت رو با اطلاعات بیشتر تغذیه کن. شاید با مهندسی ویژگی بتونی ویژگی‌های جدید و معناداری بسازی.

از یک مدل پیچیده‌تر استفاده کن: اگر مدل‌ت خطیه، شاید یک مدل غیرخطی (مثل شبکه عصبی) برای داده‌هات مناسب‌تر باشه.

برای مدت طولانی‌تر آموزش بده: ⏱️ شاید مدل‌ت فقط به زمان بیشتری برای یادگیری الگوهای داده‌ها نیاز داره.

راه‌حل‌های بیش‌برازش (Overfitting)

داده‌های بیشتری جمع‌آوری کن: 📈 هرچه داده‌ها متنوع‌تر باشن، مدل بهتر می‌تونه به یک نتیجه کلی و قابل تعمیم برسه. اگر نمی‌تونی داده‌ی واقعی جمع کنی، از افزایش داده (Data Augmentation) استفاده کن.

مدل‌ت رو ساده‌تر کن: ✂️ اگر از یک مدل پیچیده استفاده می‌کنی، می‌تونی تعداد لایه‌ها یا پیچیدگیش رو کم کنی.

از رگولاریزیشن استفاده کن: 🔒 این تکنیک به مدل به خاطر پیچیده بودنش "جریمه" می‌ده و اون رو مجبور می‌کنه ساده‌تر بمونه.

از یادگیری گروهی (Ensemble Learning) استفاده کن: 🤝 ترکیب چندین مدل ساده، اغلب بهتر از یک مدل پیچیده عمل می‌کنه و پایداری بیشتری داره.

اعتبارسنجی متقابل (Cross-Validation) انجام بده: این تکنیک بهت کمک می‌کنه تا بیش‌برازش رو شناسایی کنی و جلوی اون رو بگیری.

خلاصه که، شناختن این دو مشکل و دونستن راه‌های حلشون، کلید ساختن مدل‌های هوشمنده! 🗝

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


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

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

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

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

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

نکته 2:
‏فشرده‌سازی ضمنی در SQLite از طریق ذخیره‌سازی مقادیر NULL, صفرها و رشته‌های خالی با حداقل فضای ذخیره‌سازی (یک بایت یا کمتر) و استفاده مؤثر از رمزگذاری Varint برای اعداد صحیح صورت می‌پذیرد.

نکته 3:
‏برای فشرده‌سازی داده‌های بزرگ (مانند BLOB یا متن‌های طولانی)، رویکرد استاندارد علمی شامل اجرای الگوریتم‌های فشرده‌سازی مانند ZLIB یا LZ4 در لایه برنامه و ذخیره‌سازی محتوای فشرده شده در ستون‌های جدول است.

نکته 4:
‏استفاده از VACUUM اگرچه مستقیماً داده‌ها را فشرده نمی‌کند، اما فضای ذخیره‌سازی را با حذف صفحات خالی و بازسازی ساختار پایگاه داده به صورت فیزیکی بهینه‌سازی کرده و حجم کلی فایل را کاهش می‌دهد.

نکته 5:
‏در صورت ذخیره‌سازی رشته‌های متنی، استفاده از رمزگذاری کاراکترهای با عرض متغیر (مانند UTF-8) به جای عرض ثابت می‌تواند به صورت مؤثری در کاهش فضای مورد نیاز برای ذخیره داده‌ها کمک کند.

نکته 6:
‏برای ستون‌هایی که دامنه مقادیر محدودی دارند، نرمال‌سازی با استفاده از یک جدول نگاشت (Mapping Table) و ذخیره کلیدهای خارجی INTEGER به جای متن‌های تکراری، به شدت فضا را فشرده می‌سازد.

نکته 7:
‏پیاده‌سازی مکانیزم‌های فشرده‌سازی در لایه برنامه نیازمند سربار پردازشی (CPU Overhead) برای فشرده‌سازی قبل از INSERT و دی‌فشرده‌سازی پس از SELECT است که باید با مزایای صرفه‌جویی در فضا متعادل شود.

نکته 8:
‏انتخاب نوع داده INTEGER به جای REAL یا TEXT برای ذخیره‌سازی مقادیر عددی کوچک، به دلیل استفاده از رمزگذاری Varint، به طور مؤثری در بهینه‌سازی فضای ذخیره‌سازی نقش دارد.

نکته 9:
‏برخی از افزونه‌های خارجی یا توابع تعریف شده توسط کاربر (UDFs) برای SQLite توسعه داده شده‌اند که امکانات فشرده‌سازی داخلی را از طریق توابع SQL مانند compress() و uncompress() فراهم می‌کنند.

نکته 10:
‏بهینه‌سازی فضای ذخیره‌سازی در SQLite یک فرآیند چندوجهی است که شامل طراحی ساختار داده، تنظیم پارامترهای پایگاه داده و مدیریت عملیاتی مانند VACUUM و نه صرفاً فشرده‌سازی داده‌های خام می‌باشد.


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

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

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

آدرس وبسایت:
https://Tutorial24.ir
📚 نکته #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