Forwarded from Linuxor ?
ساخت یه وب اپلیکشین بزرگ تیمی سخته؟ Ember یه راهحل قدیمی ولی کارآمده، وقتی همه اعضای تیم دارن با یه سری الگو و ابزار مشخص کار میکنن، دیگه لازم نیست بابت تفاوت سبک کدنویسی سختی بکشی. Ember با معماری opinionatedش این هماهنگی رو بهصورت طبیعی ایجاد میکنه. شرکت هایی مثل نتفلیکس، مایکروسافت، لینکدین و اپل ازش استفاده میکنن
ابزارهایی مثل Ember Inspector و testing داخلی کمک میکنن راحتتر باگ بگیری و توسعه رو پایدارتر پیش ببری یه خط فرمان هم داره باهاش میشه کد تولید کرد.
راهنما :
guides.emberjs.com/release/getting-started
@Linuxor
ابزارهایی مثل Ember Inspector و testing داخلی کمک میکنن راحتتر باگ بگیری و توسعه رو پایدارتر پیش ببری یه خط فرمان هم داره باهاش میشه کد تولید کرد.
راهنما :
guides.emberjs.com/release/getting-started
@Linuxor
Forwarded from Linuxor ?
فکر میکنی مانیتورینگ فقط متریک CPU و رم گرفتن از سروره؟ SkyWalking میگه نه، باید بفهمی سرویس A چرا دیر جواب داد، کدوم کال ازش رد شد و چطور به سرویس C رسید. اینجاست که tracing و dependency mapش به کارت میاد.
یه ابزار لازم برای هرکسی که با معماری سرویسمحور (microservices) زیاد سرو کله میزنه، خیلی جالبه آپاچی انقدر ابزار هاش زیاده من تازه اینو دیدم :)
دانلود :
skywalking.apache.org
@Linuxor
یه ابزار لازم برای هرکسی که با معماری سرویسمحور (microservices) زیاد سرو کله میزنه، خیلی جالبه آپاچی انقدر ابزار هاش زیاده من تازه اینو دیدم :)
دانلود :
skywalking.apache.org
@Linuxor
Forwarded from Linuxor ?
آموزش هوش مصنوعی دیدی ولی هنوز نمیدونی چرا Random Forest اینقدر خوب کار میکنه؟ یا فرق SVM و KNN چیه دقیق؟ این ریپو دونهبهدونه الگوریتمها رو با کد پایتون خام پیاده کرده، برای دانشجوها، معلمها، یا کسایی که میخوان مصاحبه ML بدن، یه مرجع واقعی و سادهفهمه.
github.com/eriklindernoren/ML-From-Scratch
@Linuxor
github.com/eriklindernoren/ML-From-Scratch
@Linuxor
Forwarded from Software Engineer Labdon
اگه یه چیزی مثل curl برای gRPC میخواین میتونین از این استفاده کنین:
https://github.com/fullstorydev/grpcurl
<بلک استیت />
https://github.com/fullstorydev/grpcurl
<بلک استیت />
GitHub
GitHub - fullstorydev/grpcurl: Like cURL, but for gRPC: Command-line tool for interacting with gRPC servers
Like cURL, but for gRPC: Command-line tool for interacting with gRPC servers - fullstorydev/grpcurl
Forwarded from Gopher Academy
💐امکانات جدید در GoLand 2025.2
۱. تحلیل جریان داده برای جلوگیری از nil dereference
اGoLand اکنون از تحلیل بینتابعی (interprocedural) استفاده میکند تا جریان دادههای nil را در حلقههای فراخوانی تابع، فایلها و بستهها دنبال کند. در نتیجه، هشدارهایی برای استفادههای ناایمن از اشارهگرها (dereference) به شکل مستقیم در ادیتور نمایش داده میشود. علاوه بر این، تب جدیدی به نام Data Flow Analysis در پنجره Problems اضافه شده که مسیر دقیق جریان nil را نشان میدهد.
۲. صفحه خوشآمدگویی غیرمسدودکننده (Non‑blocking Welcome screen)
صفحه خوشآمدگویی (Welcome Screen) حالا به صورت تب (tab) در IDE باز میشود، بدون آنکه اجرای محیط توسعه را متوقف کند. این امکان را دارید که بدون باز کردن پروژه به ترمینال، ابزار HTTP، Docker، Kubernetes یا پایگاهداده دسترسی داشته باشید و حتی فایلهای مستقل را ویرایش کنید.
۳. کشف هوشمندانهتر endpointها و تولید درخواست (Request) خودکار
ابزار Endpoints بهبود یافته تا الگوهای مدرن ServeMux را بهتر بشناسد؛ از جمله مسیرهای wildcard یا آنهایی که با HTTP method همراه هستند، مانند GET /task/{id}/.
علاوه بر این، متد HTTP در کنار هر endpoint نمایش داده شده، autocomplete برای ساخت آسانتر request فعال شده و پشتیبانی از فریمورکهایی مانند Chi, Gin, Gorilla نیز بهبود یافته است.
۴. اJunie؛ عامل هوشمند داخل IDE
عامل هوشمند Junie حالا سریعتر شده (حدود ۳۰٪ افزایش سرعت)، از پروتکل MCP (Model Context Protocol) پشتیبانی میکند و امکان کار در محیط Remote Development را فراهم میآورد—همه اینها در دل IDE برای تسهیل کارهای حرفهایتر.
۵. ارتقا در پشتیبانی از golangci-lint نسخه ۲
ادغام با golangci-lint بهبود یافته، به طوری که نسخهی جدید آن (v2) در تحلیل بلادرنگ (real-time) بهتر و مطمئنتر عملکرد دارد.
---
خلاصه کاربردی
ویژگی جدید کاربرد
تحلیل Nil با DFA جلوگیری از خطاهای اشارهگری قبل از runtime
صفحه خوشآمدگویی غیرمسدودکننده دسترسی سریعتر به ابزارها بدون باز کردن پروژه
کشف و Request خودکار endpointها تسهیل تعامل با HTTP در توسعه وب
اJunie با MCP و پشتیبانی Remote افزایش سرعت و قابلیت هوشمند برای توسعه حرفهای
ارتقاء golangci‑lint integration تحلیل کد دقیقتر و قابلاعتمادتر در زمان توسعه
---
در مجموع، نسخه 2025.2 تمرکزش را روی بهبود تجربه توسعهدهنده معطوف کرده—از تشخیص هوشمند خطا تا دسترسی سریع به ابزارها و هوشمندسازی کمکها در IDE.
۱. تحلیل جریان داده برای جلوگیری از nil dereference
اGoLand اکنون از تحلیل بینتابعی (interprocedural) استفاده میکند تا جریان دادههای nil را در حلقههای فراخوانی تابع، فایلها و بستهها دنبال کند. در نتیجه، هشدارهایی برای استفادههای ناایمن از اشارهگرها (dereference) به شکل مستقیم در ادیتور نمایش داده میشود. علاوه بر این، تب جدیدی به نام Data Flow Analysis در پنجره Problems اضافه شده که مسیر دقیق جریان nil را نشان میدهد.
۲. صفحه خوشآمدگویی غیرمسدودکننده (Non‑blocking Welcome screen)
صفحه خوشآمدگویی (Welcome Screen) حالا به صورت تب (tab) در IDE باز میشود، بدون آنکه اجرای محیط توسعه را متوقف کند. این امکان را دارید که بدون باز کردن پروژه به ترمینال، ابزار HTTP، Docker، Kubernetes یا پایگاهداده دسترسی داشته باشید و حتی فایلهای مستقل را ویرایش کنید.
۳. کشف هوشمندانهتر endpointها و تولید درخواست (Request) خودکار
ابزار Endpoints بهبود یافته تا الگوهای مدرن ServeMux را بهتر بشناسد؛ از جمله مسیرهای wildcard یا آنهایی که با HTTP method همراه هستند، مانند GET /task/{id}/.
علاوه بر این، متد HTTP در کنار هر endpoint نمایش داده شده، autocomplete برای ساخت آسانتر request فعال شده و پشتیبانی از فریمورکهایی مانند Chi, Gin, Gorilla نیز بهبود یافته است.
۴. اJunie؛ عامل هوشمند داخل IDE
عامل هوشمند Junie حالا سریعتر شده (حدود ۳۰٪ افزایش سرعت)، از پروتکل MCP (Model Context Protocol) پشتیبانی میکند و امکان کار در محیط Remote Development را فراهم میآورد—همه اینها در دل IDE برای تسهیل کارهای حرفهایتر.
۵. ارتقا در پشتیبانی از golangci-lint نسخه ۲
ادغام با golangci-lint بهبود یافته، به طوری که نسخهی جدید آن (v2) در تحلیل بلادرنگ (real-time) بهتر و مطمئنتر عملکرد دارد.
---
خلاصه کاربردی
ویژگی جدید کاربرد
تحلیل Nil با DFA جلوگیری از خطاهای اشارهگری قبل از runtime
صفحه خوشآمدگویی غیرمسدودکننده دسترسی سریعتر به ابزارها بدون باز کردن پروژه
کشف و Request خودکار endpointها تسهیل تعامل با HTTP در توسعه وب
اJunie با MCP و پشتیبانی Remote افزایش سرعت و قابلیت هوشمند برای توسعه حرفهای
ارتقاء golangci‑lint integration تحلیل کد دقیقتر و قابلاعتمادتر در زمان توسعه
---
در مجموع، نسخه 2025.2 تمرکزش را روی بهبود تجربه توسعهدهنده معطوف کرده—از تشخیص هوشمند خطا تا دسترسی سریع به ابزارها و هوشمندسازی کمکها در IDE.
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
یه خبر فوقالعاده برای کسایی که دنبال دورههای باکیفیت هستن ولی شرایط مالیشون مناسب نیست
مکتبخونه بعضی از دورههای ارزشمندش رو رایگان کرده؛
از جمله دورههای اساتید معروف مثل آقای بیگدلی، جادی، و سهیل تهرانیپور.
📌 جزئیات کامل رو میتونید از پست لینکدین ببینید
توجه داشته باشید این یک تبلیغ نیست
#موقت
مکتبخونه بعضی از دورههای ارزشمندش رو رایگان کرده؛
از جمله دورههای اساتید معروف مثل آقای بیگدلی، جادی، و سهیل تهرانیپور.
📌 جزئیات کامل رو میتونید از پست لینکدین ببینید
توجه داشته باشید این یک تبلیغ نیست
#موقت
Linkedin
#مکتبخونه | Soheil Tehranipour | 241 comments
گاهی اوضاع زندگی، فشار مالی یا دوری از منابع آموزشی باعث میشه یادگیری از اولویتها عقب بیفته. ما تو مکتبخونه خوب میدونیم این روزها برای خیلیها، شروع یاد گرفتن یه مهارت جدید شاید آسون نباشه.
ما همیشه باورمون این بوده که هیچکس نباید بهخاطر محدودیتهای…
ما همیشه باورمون این بوده که هیچکس نباید بهخاطر محدودیتهای…
Forwarded from Golden Code (علی 🇨🇴)
نکته مهم برای کوئریهای MySQL
اگه روی یک ستون دیتابیس ایندکس تعریف شده، استفاده از توابعی مثل YEAR(), MONTH() یا هر تابع دیگه ای روی همون ستون در شرطهای WHERE باعث میشه MySQL نتونه از ایندکس استفاده کنه.
📌 چرا؟
چون وقتی تابعی روی ستون اعمال میشه، مقدار ستون تغییر میکنه و ایندکس روی مقدار اصلی ستونه، نه مقدار تبدیلشده توسط تابع.
در نتیجه MySQL مجبور میشه کل جدول رو اسکن کنه (Full Table Scan) که عملکرد کوئری رو به شدت کاهش میده.
مثال
فرض کنین روی ستون تاریخ paid_at ایندکس دارید و میخواید رکوردهای مربوط به سال 2023 رو بگیرید.
روش اشتباه:
درین حالت، MySQL برای هر ردیف ابتدا تابع YEAR() رو اجرا میکنه و سپس مقایسه میکنه، که باعث غیرفعال شدن ایندکس میشه.
روش بهینه:
درین حالت شرط مستقیماً روی ستون paid_at اعمال میشه و MySQL میتونه از ایندکس استفاده کنه، بنابرین کوئری بسیار سریعتر اجرا میشود.
#SQL
#MySql
@GoldenCodeir
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/mmartin_joo/status/1952704402038333586?s=35
اگه روی یک ستون دیتابیس ایندکس تعریف شده، استفاده از توابعی مثل YEAR(), MONTH() یا هر تابع دیگه ای روی همون ستون در شرطهای WHERE باعث میشه MySQL نتونه از ایندکس استفاده کنه.
📌 چرا؟
چون وقتی تابعی روی ستون اعمال میشه، مقدار ستون تغییر میکنه و ایندکس روی مقدار اصلی ستونه، نه مقدار تبدیلشده توسط تابع.
در نتیجه MySQL مجبور میشه کل جدول رو اسکن کنه (Full Table Scan) که عملکرد کوئری رو به شدت کاهش میده.
مثال
فرض کنین روی ستون تاریخ paid_at ایندکس دارید و میخواید رکوردهای مربوط به سال 2023 رو بگیرید.
روش اشتباه:
WHERE YEAR(paid_at) = 2023
درین حالت، MySQL برای هر ردیف ابتدا تابع YEAR() رو اجرا میکنه و سپس مقایسه میکنه، که باعث غیرفعال شدن ایندکس میشه.
روش بهینه:
WHERE paid_at >= '2023-01-01' AND paid_at < '2024-01-01'
درین حالت شرط مستقیماً روی ستون paid_at اعمال میشه و MySQL میتونه از ایندکس استفاده کنه، بنابرین کوئری بسیار سریعتر اجرا میشود.
#SQL
#MySql
@GoldenCodeir
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/mmartin_joo/status/1952704402038333586?s=35
X (formerly Twitter)
Martin Joo (@mmartin_joo) on X
💡 If you have a database index, it's important to note that MySQL cannot use it with functions.
The most common situation is date columns and date functions such as 'year' or 'month'.
So instead of using 'year(paid_at)', use 'where between':
The most common situation is date columns and date functions such as 'year' or 'month'.
So instead of using 'year(paid_at)', use 'where between':
❤1
Forwarded from Armon technical logs (armon Taheri)
من باب فضیلت مهارت پرزنت کردن و مارکتینگ همین ویدیو بس
ایشون چند سال بعد CEO ماکروسافت شدن
https://youtu.be/DgJS2tQPGKQ
ایشون چند سال بعد CEO ماکروسافت شدن
https://youtu.be/DgJS2tQPGKQ
YouTube
Windows 1.0 with Steve Ballmer (1986) (HQ, 60FPS)
This is the famous Windows 1.0 parody "advertisement" shown internally at Microsoft, now in glorious 60FPS and high-quality audio! Surreal to think this was only previously available in a highly compressed form for over a decade.
Forwarded from محتوای آزاد سهراب
اول یادی کنیم از این مورد
بعدش دعوت میکنم این رو بخونید :)) خیلی جالبه.
https://cybersecuritynews.com/windows-user-account-control-bypassed/
@SohrabContents
بعدش دعوت میکنم این رو بخونید :)) خیلی جالبه.
https://cybersecuritynews.com/windows-user-account-control-bypassed/
@SohrabContents
Forwarded from کانال مهرداد لینوکس
🚀 نسخه جدید Proxmox Virtual Environment 9.0
🔥 روی Debian 13 ("Trixie")
🎉با هسته Linux 6.14.8
🎁 رابط وب موبایل بازنویسیشده (Rust + Yew)
منتشر شد🤩
💠یک مجازیساز متنباز و رایگان برای مدیریت ماشینهای مجازی و کانتینرها، با رابط وب ساده و قدرتمند.
✅ چرا مهم است و مزیتش نسبت به ESXi؟
بدون لایسنس پولی، پشتیبانی از KVM و LXC، ابزارهای بکاپ داخلی، و جامعه کاربری فعال.
✅امکانات کلیدی:
🔹مدیریت VM و Container همزمان
🔹HA و Clustering داخلی
🔹پشتیبانی از ZFS، Ceph، و بکاپ زمانبندیشده
🔹 Snapshot روی LVM Thick – حتی برای NFS و CIFS
🔹 Affinity در HA – کنترل محل اجرای سرویسها
🔹 SDN Fabrics – پشتیبانی Spine-Leaf و OSPF
✅چطور تست کنیم؟
حتی روی VirtualBox هم میتوانید ISO را نصب و تجربه کنید، بدون نیاز به سرور واقعی.
✅چرا باید یاد بگیریم؟
رشد سریع در بازار کار، کاهش هزینهها، انعطاف بالا و جایگزین جدی ESXi در آینده.
لینک ویدیو معرفی
@MehrdadLinuxchannel
🔥 روی Debian 13 ("Trixie")
🎉با هسته Linux 6.14.8
🎁 رابط وب موبایل بازنویسیشده (Rust + Yew)
منتشر شد🤩
💠یک مجازیساز متنباز و رایگان برای مدیریت ماشینهای مجازی و کانتینرها، با رابط وب ساده و قدرتمند.
✅ چرا مهم است و مزیتش نسبت به ESXi؟
بدون لایسنس پولی، پشتیبانی از KVM و LXC، ابزارهای بکاپ داخلی، و جامعه کاربری فعال.
✅امکانات کلیدی:
🔹مدیریت VM و Container همزمان
🔹HA و Clustering داخلی
🔹پشتیبانی از ZFS، Ceph، و بکاپ زمانبندیشده
🔹 Snapshot روی LVM Thick – حتی برای NFS و CIFS
🔹 Affinity در HA – کنترل محل اجرای سرویسها
🔹 SDN Fabrics – پشتیبانی Spine-Leaf و OSPF
✅چطور تست کنیم؟
حتی روی VirtualBox هم میتوانید ISO را نصب و تجربه کنید، بدون نیاز به سرور واقعی.
✅چرا باید یاد بگیریم؟
رشد سریع در بازار کار، کاهش هزینهها، انعطاف بالا و جایگزین جدی ESXi در آینده.
لینک ویدیو معرفی
@MehrdadLinuxchannel
Forwarded from Geek Alerts
قرار هست تبلیغات در بین چتهای Grok هم نمایش داده بشه، گفتن دلیلش اینه که هزینه GPUهای گراک خیلی زیاده و مجبورن راهی برای بهبود درآمدهاش پیدا کنن. خبر نشون میده شاید اونقدر کاربرا اشتراکهای Grok رو نخریدن. البته OpenAI هم با وجود داشتن بیشترین تعداد کاربران پولی هنوز به سودآوری نرسیده. [L]
🤓 abolfazl @geekalerts
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Linuxor ?
تا حالا شده چند روز درگیر تیون کردن یه مدل یادگیری عمیق باشی و آخرش هم نتیجه نگیری؟ حس میکنی داری شانسی پارامترها رو عوض میکنی و هیچ روش مشخصی نداری؟ این مشکل خیلی از ماهاست. انگار داریم توی تاریکی دنبال کلید میگردیم و فقط وقت و پول (هزینه پردازش) رو هدر میدیم.
گوگل یه "پلیبوک" یا دفترچه راهنما منتشر کرده که دقیقاً برای همین ساخته شده. به جای آزمون و خطای بیهدف، یه فرآیند علمی و قدمبهقدم برای تیون کردن مدل بهت میده. از کجا شروع کنی، اول کدوم هایپرپارامتر رو تغییر بدی و چطور نتایج رو تحلیل کنی تا به جواب برسی.
github.com/google-research/tuning_playbook
@Linuxor
گوگل یه "پلیبوک" یا دفترچه راهنما منتشر کرده که دقیقاً برای همین ساخته شده. به جای آزمون و خطای بیهدف، یه فرآیند علمی و قدمبهقدم برای تیون کردن مدل بهت میده. از کجا شروع کنی، اول کدوم هایپرپارامتر رو تغییر بدی و چطور نتایج رو تحلیل کنی تا به جواب برسی.
github.com/google-research/tuning_playbook
@Linuxor
Forwarded from DevTwitter | توییت برنامه نویسی
This media is not supported in your browser
VIEW IN TELEGRAM
وقتی عمو فری تازه کات کرده و بجای چس ناله رو به نو آوری میاره
ما که جدا شدیم امیدوارم این دوتا توپ جدا نشن
لینک پروژه این زیره لطفا ستاره فراموش نشه
https://github.com/fariborz0015/multi-tab-effect
@DevTwitter | <Fariborz Shalghooni/>
ما که جدا شدیم امیدوارم این دوتا توپ جدا نشن
لینک پروژه این زیره لطفا ستاره فراموش نشه
https://github.com/fariborz0015/multi-tab-effect
@DevTwitter | <Fariborz Shalghooni/>
Forwarded from جامعهٔ فارسی زبان کیدیای (Sohrab)
این هفته در پلاسمای جدید هم با یک تغییر بزرگ برای کیدیای ۶.۵ منتشر شد.
از این پس، صفحات «تنظیمات سیستم» میتوانند با برنامه مادر تعامل بیشتری داشته باشند؛ مثلاً اگر سختافزار لازم را نداشته باشید، خودشون رو «غیرمرتبط» علامتگذاری میکنند. (به عنوان مثال اگر سختافزار لازم برای بلوتوث را نداشته باشید خودش را غیرمرتبط علامتگذاری میکند).
همچنین دکمهای در نوار کناری اضافه شده تا شما بتونید خیلی سریع گزینههایی مثل بلوتوث و وایفای را روشن یا خاموش کنید. این قابلیت همین حالا برای بلوتوث فعال شده و بهزودی صفحات بیشتری نیز ازش استفاده خواهند کرد.
@kde_fa
از این پس، صفحات «تنظیمات سیستم» میتوانند با برنامه مادر تعامل بیشتری داشته باشند؛ مثلاً اگر سختافزار لازم را نداشته باشید، خودشون رو «غیرمرتبط» علامتگذاری میکنند. (به عنوان مثال اگر سختافزار لازم برای بلوتوث را نداشته باشید خودش را غیرمرتبط علامتگذاری میکند).
همچنین دکمهای در نوار کناری اضافه شده تا شما بتونید خیلی سریع گزینههایی مثل بلوتوث و وایفای را روشن یا خاموش کنید. این قابلیت همین حالا برای بلوتوث فعال شده و بهزودی صفحات بیشتری نیز ازش استفاده خواهند کرد.
@kde_fa
Forwarded from جامعهٔ فارسی زبان کیدیای (Sohrab)
همچنین سایر تغییرات رخ داده عبارتند از:
- اگر از میانبر متا + دکمه بیصدا کردن میکروفون استفاده کنید، تمامی ورودیهای میکروفون مسدود میشن.
- افزونه سازگاری با مرورگر پلاسما هم اکنون وقتی که شما در فایرفاکس دارید یک فایلی رو دانلود میکنید، از به خواب رفتن (sleep) سیستم جلوگیری میکنه. این ویژگی به صورت محلی در فایرفاکس وجود ندارد.
- همچنین شبکههای وایفای شناسایی شده هم در یک صفحه مخصوص داخل تنظیمات نشان داده میشوند. قبلاً صرفاً از سینی قابل دسترسی بودند.
- همچنین در دیسکاور سرعت بهروزرسانی فریمور به شدت بیشتر شده. این اتفاق به علت بهبود در بکاند fwupd برای کیدیای دیسکاور رخ داده.
- همچنین یک تغییر بزرگ در کیدیای فریمورک ۶.۱۸ رخ داده که به شما اجازه میده تا دکمه بدردنخور کوپایلت رو برای اجرای یک برنامهخاص یا یک دستور در میانبرها استفاده کنید.
@kde_fa
- اگر از میانبر متا + دکمه بیصدا کردن میکروفون استفاده کنید، تمامی ورودیهای میکروفون مسدود میشن.
- افزونه سازگاری با مرورگر پلاسما هم اکنون وقتی که شما در فایرفاکس دارید یک فایلی رو دانلود میکنید، از به خواب رفتن (sleep) سیستم جلوگیری میکنه. این ویژگی به صورت محلی در فایرفاکس وجود ندارد.
- همچنین شبکههای وایفای شناسایی شده هم در یک صفحه مخصوص داخل تنظیمات نشان داده میشوند. قبلاً صرفاً از سینی قابل دسترسی بودند.
- همچنین در دیسکاور سرعت بهروزرسانی فریمور به شدت بیشتر شده. این اتفاق به علت بهبود در بکاند fwupd برای کیدیای دیسکاور رخ داده.
- همچنین یک تغییر بزرگ در کیدیای فریمورک ۶.۱۸ رخ داده که به شما اجازه میده تا دکمه بدردنخور کوپایلت رو برای اجرای یک برنامهخاص یا یک دستور در میانبرها استفاده کنید.
@kde_fa
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
این داستان Query Planning 😯
احتمالا با دیتابیس هایی مثل PostgreSQL یا MySQL کوئری زدین، اگه دقت کرده باشید این کوری ها چه ساده باشن چه پیچیده سریع اجرا میشن، دلیلشم تو یه فرایند جالب به اسم Query Planning هست.
تو این پست قراره ببینیم چیه، چطور کار میکنه.
🧠 Query Planning چیه؟
Query Planning (یا برنامهریزی کوئری) فرایندی تو دیتابیسهای رابطهایه که توش دیتابیس تصمیم میگیره بهترین راه برای اجرای یه کوئری SQL چیه. وقتی یه کوئری مثل
مینویسین، دیتابیس نمیره مستقیم اجرا کنه؛ اول یه نقشه میکشه که چطور دادهها رو پیدا کنه، فیلتر کنه و برگردونه. این نقشه که بهش Query Plan یا Execution Plan میگن، مثل یه GPSه که به دیتابیس میگه از کدوم مسیر بره تا سریعتر به مقصد برسه.
هدف اصلیش بهینهسازی پرفورمنس با کم کردن زمان اجرا، مصرف CPU، حافظه و I/O (خوندن/نوشتن دیسک). دیتابیس این کار رو با تحلیل ساختار کوئری، آمار جدولها و ایندکسها انجام میده.
📚 Query Planning چطور کار میکنه؟
دیتابیسها (مثل PostgreSQL، MySQL، SQL Server) یه بخش به اسم Query Optimizer دارن که مسئول ساختن پلن بهینهست. بیاین قدمبهقدم ببینیم چی به چیه:
1⃣ پارس کردن کوئری (Parsing)
دیتابیس اول کوئری رو بررسی میکنه تا مطمئن شه درست نوشته شده (از نظر گرامری و معنایی). مثلاً چک میکنه جدول
خروجی این مرحله یه درخت نحوی (parse tree)ه که ساختار کوئری رو نشون میده.
2⃣ بازنویسی کوئری (Rewriting)
تو این مرحله، دیتابیس کوئری رو سادهتر یا بهینهتر میکنه، بدون اینکه نتیجهش تغییر کنه. مثلاً:
تبدیل ساب کوری ها به جوینها.
حذف شرطهای اضافی (مثل
تو PostgreSQL، این کار توسط Query Rewriter انجام میشه.
3⃣ تولید پلنهای ممکن (Plan Generation)
حالا Query Optimizer کلی پلن ممکن برای اجرای کوئری میسازه. مثلاً برای یه کوئری ساده:
ممکنه این گزینهها بررسی شه:
Sequential Scan:
کل جدول رو خطبهخط بخونه.
Index Scan:
از ایندکس روی ستون
Bitmap Scan:
ترکیبی از ایندکس و اسکن.
برای کوئریهای پیچیده (با جوین، گروهبندی و غیره)، تعداد پلنها میتونه به هزارتا برسه
4️⃣ تخمین هزینه (Cost Estimation)
دیتابیس برای هر پلن یه هزینه (cost) تخمین میزنه. این هزینه یه عدد خیالیه که شامل:
مصرف CPU (برای مقایسهها، مرتبسازی و غیره).
I/O (خوندن از دیسک یا کش).
شبکه (اگه دیتابیس توزیعشده باشه).
دیتابیس از آمار جدولها (مثل تعداد ردیفها، توزیع دادهها) و ساختار ایندکسها برای این تخمین استفاده میکنه.
مثلاً تو PostgreSQL، دستور
5️⃣ انتخاب بهترین پلن
Optimizer پلنی رو انتخاب میکنه که کمترین هزینه رو داره. این پلن میشه Execution Plan و برای اجرا به Executor فرستاده میشه.
تو بعضی دیتابیسها (مثل Oracle)، میتونین از hints استفاده کنین تا Optimizer رو به یه پلن خاص هدایت کنین.
6️⃣ اجرا و بازخورد
بعد از اجرا، دیتابیس ممکنه بازخورد بگیره (مثلاً آمار واقعی تعداد ردیفها) و پلنهای بعدی رو بهتر کنه.
🛠 چرا Query Planning مهمه؟
Query Planning مثل مغز دیتابیسه و مستقیم روی پرفورمنس تأثیر میذاره:
سرعت: یه پلن خوب میتونه یه کوئری رو از چند دقیقه به چند میلیثانیه برسونه.
مصرف منابع: پلن بد میتونه CPU و دیسک رو بیخودی درگیر کنه و سرور رو خفه کنه.
مقیاسپذیری: تو دیتابیسهای بزرگ با میلیونها ردیف، یه پلن بهینه فرق بین موفقیت و فاجعهست.
تجربه کاربر: اگه APIتون به یه دیتابیس کند وصل باشه، کاربراتون فرار میکنن
🔍 مشکلات رایج تو Query Planning
آمار قدیمی: اگه آمار جدولها بهروز نباشه، Optimizer ممکنه پلن بد انتخاب کنه.
کوئریهای پیچیده: جوینهای چندگانه یا شرطهای مبهم میتونن Optimizer رو گیج کنن.
عدم ایندکس: بدون ایندکس، دیتابیس مجبوره کل جدول رو اسکن کنه.
دیتابیسهای توزیعشده:
تو دیتابیسهایی مثل CockroachDB، شبکه هم به معادله اضافه میشه و پلنها پیچیدهتر میشن.
✍ جمعبندی
Query Planning مثل یه شطرنجباز حرفهایه که تو دیتابیس تصمیم میگیره بهترین حرکت چیه. با تحلیل کوئری، آمار جدولها و ایندکسها، یه پلن بهینه میسازه که میتونه سرعت و کارایی پروژهتون رو زیر و رو کنه.
➖➖➖➖➖➖➖➖➖➖
احتمالا با دیتابیس هایی مثل PostgreSQL یا MySQL کوئری زدین، اگه دقت کرده باشید این کوری ها چه ساده باشن چه پیچیده سریع اجرا میشن، دلیلشم تو یه فرایند جالب به اسم Query Planning هست.
تو این پست قراره ببینیم چیه، چطور کار میکنه.
🧠 Query Planning چیه؟
Query Planning (یا برنامهریزی کوئری) فرایندی تو دیتابیسهای رابطهایه که توش دیتابیس تصمیم میگیره بهترین راه برای اجرای یه کوئری SQL چیه. وقتی یه کوئری مثل
SELECT * FROM users WHERE age > 30 مینویسین، دیتابیس نمیره مستقیم اجرا کنه؛ اول یه نقشه میکشه که چطور دادهها رو پیدا کنه، فیلتر کنه و برگردونه. این نقشه که بهش Query Plan یا Execution Plan میگن، مثل یه GPSه که به دیتابیس میگه از کدوم مسیر بره تا سریعتر به مقصد برسه.
هدف اصلیش بهینهسازی پرفورمنس با کم کردن زمان اجرا، مصرف CPU، حافظه و I/O (خوندن/نوشتن دیسک). دیتابیس این کار رو با تحلیل ساختار کوئری، آمار جدولها و ایندکسها انجام میده.
📚 Query Planning چطور کار میکنه؟
دیتابیسها (مثل PostgreSQL، MySQL، SQL Server) یه بخش به اسم Query Optimizer دارن که مسئول ساختن پلن بهینهست. بیاین قدمبهقدم ببینیم چی به چیه:
1⃣ پارس کردن کوئری (Parsing)
دیتابیس اول کوئری رو بررسی میکنه تا مطمئن شه درست نوشته شده (از نظر گرامری و معنایی). مثلاً چک میکنه جدول
users وجود داره یا نه.خروجی این مرحله یه درخت نحوی (parse tree)ه که ساختار کوئری رو نشون میده.
2⃣ بازنویسی کوئری (Rewriting)
تو این مرحله، دیتابیس کوئری رو سادهتر یا بهینهتر میکنه، بدون اینکه نتیجهش تغییر کنه. مثلاً:
تبدیل ساب کوری ها به جوینها.
حذف شرطهای اضافی (مثل
WHERE TRUE).تو PostgreSQL، این کار توسط Query Rewriter انجام میشه.
3⃣ تولید پلنهای ممکن (Plan Generation)
حالا Query Optimizer کلی پلن ممکن برای اجرای کوئری میسازه. مثلاً برای یه کوئری ساده:
SELECT * FROM users WHERE age > 30;
ممکنه این گزینهها بررسی شه:
Sequential Scan:
کل جدول رو خطبهخط بخونه.
Index Scan:
از ایندکس روی ستون
age استفاده کنه.Bitmap Scan:
ترکیبی از ایندکس و اسکن.
برای کوئریهای پیچیده (با جوین، گروهبندی و غیره)، تعداد پلنها میتونه به هزارتا برسه
4️⃣ تخمین هزینه (Cost Estimation)
دیتابیس برای هر پلن یه هزینه (cost) تخمین میزنه. این هزینه یه عدد خیالیه که شامل:
مصرف CPU (برای مقایسهها، مرتبسازی و غیره).
I/O (خوندن از دیسک یا کش).
شبکه (اگه دیتابیس توزیعشده باشه).
دیتابیس از آمار جدولها (مثل تعداد ردیفها، توزیع دادهها) و ساختار ایندکسها برای این تخمین استفاده میکنه.
مثلاً تو PostgreSQL، دستور
ANALYZE این آمار رو بهروز میکنه.5️⃣ انتخاب بهترین پلن
Optimizer پلنی رو انتخاب میکنه که کمترین هزینه رو داره. این پلن میشه Execution Plan و برای اجرا به Executor فرستاده میشه.
تو بعضی دیتابیسها (مثل Oracle)، میتونین از hints استفاده کنین تا Optimizer رو به یه پلن خاص هدایت کنین.
6️⃣ اجرا و بازخورد
بعد از اجرا، دیتابیس ممکنه بازخورد بگیره (مثلاً آمار واقعی تعداد ردیفها) و پلنهای بعدی رو بهتر کنه.
🛠 چرا Query Planning مهمه؟
Query Planning مثل مغز دیتابیسه و مستقیم روی پرفورمنس تأثیر میذاره:
سرعت: یه پلن خوب میتونه یه کوئری رو از چند دقیقه به چند میلیثانیه برسونه.
مصرف منابع: پلن بد میتونه CPU و دیسک رو بیخودی درگیر کنه و سرور رو خفه کنه.
مقیاسپذیری: تو دیتابیسهای بزرگ با میلیونها ردیف، یه پلن بهینه فرق بین موفقیت و فاجعهست.
تجربه کاربر: اگه APIتون به یه دیتابیس کند وصل باشه، کاربراتون فرار میکنن
🔍 مشکلات رایج تو Query Planning
آمار قدیمی: اگه آمار جدولها بهروز نباشه، Optimizer ممکنه پلن بد انتخاب کنه.
کوئریهای پیچیده: جوینهای چندگانه یا شرطهای مبهم میتونن Optimizer رو گیج کنن.
عدم ایندکس: بدون ایندکس، دیتابیس مجبوره کل جدول رو اسکن کنه.
دیتابیسهای توزیعشده:
تو دیتابیسهایی مثل CockroachDB، شبکه هم به معادله اضافه میشه و پلنها پیچیدهتر میشن.
✍ جمعبندی
Query Planning مثل یه شطرنجباز حرفهایه که تو دیتابیس تصمیم میگیره بهترین حرکت چیه. با تحلیل کوئری، آمار جدولها و ایندکسها، یه پلن بهینه میسازه که میتونه سرعت و کارایی پروژهتون رو زیر و رو کنه.
#️⃣ #web #programming #db
➖➖➖➖➖➖➖➖➖➖
🥷🏻 CHANNEL | GROUP