مهندسی داده
792 subscribers
112 photos
7 videos
24 files
314 links
BigData.ir کانال رسمی وب سایت
مطالبی راجع به مهندسی داده و طراحی زیرساخت‌های پردازش دیتا و ابزارهای مدرن دیتا
ارتباط با ادمین: @smbanaei
گروه تخصصی مهندسی داده 👇
https://t.iss.one/bigdata_ir_discussions2
کانال یوتیوب 👇
https://www.youtube.com/@irbigdata
Download Telegram
Forwarded from عکس نگار
🔴 بحران پنهان مهندسی داده: چرا کمبود متخصصان این حوزه زنگ خطر بزرگی است؟

📌 این مطلب ترجمه‌ای است از مقاله Shashwath Shenoy در مدیوم با عنوان: 🔗 The Data Engineering Talent Crisis No One Is Talking About!

🚀 مهندسی داده؛ ستون فقرات تحول دیجیتال که در حال نادیده گرفته شدن است

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

⚠️ اما یک چالش بزرگ در حال شکل‌گیری است:

ما به تعداد کافی مهندس داده‌ی متخصص نداریم!


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


🤔 چرا تمرکز بیش از حد روی علم داده، مشکل‌ساز شد؟


🔍 سال‌ها، شرکت‌ها اولویت خود را روی استخدام دانشمندان داده گذاشتند و تصور کردند که این افراد موتور محرک نوآوری خواهند بود.


اما مشکل کجاست؟

💡 بدون زیرساخت مناسب و خطوط پردازش داده‌ی بهینه، دانشمندان داده کارایی لازم را ندارند!

📉 داده‌های بی‌کیفیت، عملکرد ضعیف کوئری‌ها و نبود زیرساخت‌های مقیاس‌پذیر، باعث شکست بسیاری از پروژه‌های هوش مصنوعی و تحلیلی شده است.

🆘 حتی اکنون، آگهی‌های شغلی برای مهندسان داده از دانشمندان داده پیشی گرفته است، اما دانشگاه‌ها همچنان روی علم داده تمرکز دارند و دوره‌های آموزشی فقط سطحی‌ترین مباحث مهندسی داده را پوشش می‌دهند.


🏢 چرا استارتاپ‌ها و شرکت‌های متوسط از رقابت برای جذب مهندسان داده بازمانده‌اند؟

💰 یکی دیگر از دلایل این بحران، جذب گسترده‌ی مهندسان داده توسط غول‌های فناوری مانند گوگل، آمازون و مایکروسافت با پرداخت حقوق‌های نجومی است.

🔹 بسیاری از استارتاپ‌ها و شرکت‌های متوسط ماه‌ها به دنبال استخدام متخصصان مناسب می‌گردند اما موفق نمی‌شوند.

🔹 مهندسان داده‌ای که در شرکت‌های کوچک‌تر استخدام می‌شوند، ناچارند چندین نقش را همزمان ایفا کنند: معمار داده، مهندس زیرساخت و حتی مسئول DevOps، که این فشار کاری منجر به فرسودگی شغلی و نرخ بالای استعفا می‌شود.

🧠 هوش مصنوعی جایگزین مهندسان داده خواهد شد؟ 🤖 یک باور اشتباه!

⚡️ با پیشرفت ابزارهای ETL خودکار و پلتفرم‌های هوشمند پردازش داده، برخی تصور می‌کنند که مهندسی داده به‌زودی کاملاً خودکار خواهد شد.

🚫 اما این یک باور اشتباه و خطرناک است.

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

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


🔧 چگونه می‌توان این بحران را حل کرد؟

🔄 برای جلوگیری از گسترش این بحران، شرکت‌ها باید رویکرد خود را تغییر دهند:

✔️ به‌جای رقابت بر سر تعداد محدودی از متخصصان، نیروهای موجود را آموزش دهند

🎓 بسیاری از برنامه‌نویسان، مهندسان نرم‌افزار و مدیران پایگاه داده می‌توانند با آموزش مناسب، به مهندسان داده‌ی توانمند تبدیل شوند.

✔️ دانشگاه‌ها و بوت‌کمپ‌ها باید دوره‌های عملی مهندسی داده ارائه دهند

📚 مهارت‌هایی مانند اسپارک، ایرفلو، کوبرنتیز و معماری‌های ابری باید بخش کلیدی آموزش‌های مهندسی داده باشند.

✔️ شرکت‌ها باید بر روی نگهداشت نیروی انسانی تمرکز کنند

🏆 سازمان‌هایی که روی ایجاد تیم‌های قدرتمند مهندسی داده سرمایه‌گذاری کنند یک مزیت رقابتی پایدار خواهند داشت.

📸 عکس از Unsplash🔗
👍6
Forwarded from عکس نگار
تحول معماری داده: از Data 1.0 تا Data 3.0

شرکت سرمایه گذاری خطر پذیر BVP اخیرا یک گزارش با عنوان «نقشه راه: Data 3.0 در عصر Lakehouse» منتشر کرده است که نکات اصلی آنرا در این نوشتار با هم مرور می‌کنیم (https://lnkd.in/gFFwjBDg).

توضیح اینکه Bessemer Venture Partners (BVP) یک شرکت سرمایه‌گذاری خطرپذیر با بیش از یک قرن سابقه است که بر روی استارتاپ‌های نوآور در حوزه‌هایی مانند هوش مصنوعی، محاسبات ابری، فین‌تک و امنیت سایبری سرمایه‌گذاری می‌کند. این شرکت در رشد برندهای بزرگی مانند Shopify، LinkedIn، Pinterest و Databricks نقش داشته و با تمرکز بر فناوری‌های پیشرفته، به کارآفرینان کمک می‌کند تا کسب‌وکارهای تحول‌آفرین ایجاد کنند. بنابراین گزارشی که این شرکت منتشر کرده است می‌تواند حائز اهمیت و حاوی نکات ارزشمندی باشد. این نوشتار، خلاصه ای از گزارش فوق است.

🔎 مقدمه: چرا Data 3.0 مهم است؟

مدیریت و پردازش داده‌ها از گذشته تا کنون چندین مرحله تحول را پشت سر گذاشته است. هر نسل از فناوری‌های داده‌ای مشکلات نسل قبل را برطرف کرده و امکانات جدیدی را برای تحلیل، ذخیره‌سازی و استفاده از داده‌ها فراهم کرده است. اکنون در آستانه ورود به نسل سوم مدیریت داده، یعنی Data 3.0 هستیم. اما قبل از آن، بیایید نگاهی به دو نسل قبلی بیندازیم.



🛠دوره اول - Data 1.0: پایگاه‌های داده و انبارهای اطلاعاتی

📅 دوره: ۱۹۷۰ تا ۲۰۰۰

🔹 ویژگی: پردازش متمرکز داده‌های ساختاریافته

🔹 ابزارها: RDBMS (Oracle, MySQL, SQL Server)، انبار داده

محدودیت: عدم پشتیبانی از داده‌های غیرساختاریافته، هزینه بالا

در این دوران، شرکت‌ها از پایگاه‌های داده رابطه‌ای مانند Oracle, MySQL, SQL Server برای مدیریت اطلاعات استفاده می‌کردند. با ظهور انبار داده (Data Warehouse)، سازمان‌ها توانستند داده‌های عملیاتی را برای گزارش‌گیری و تحلیل‌های BI بهینه کنند.


🌊 دوره دوم - Data 2.0: کلان‌داده و دریاچه‌های داده

📅 دوره: از ۲۰۱۰ به بعد

🔹 ویژگی: ذخیره‌سازی و پردازش داده‌های حجیم و متنوع

🔹 ابزارها: Hadoop، Spark، Data Lake

مزایا: پشتیبانی از انواع داده‌ها، پردازش موازی

چالش: کیفیت پایین داده (Data Swamp)، پیچیدگی بالا

در این دوره، شرکت‌ها سعی کردند حجم عظیمی از داده‌های خام را بدون پردازش اولیه ذخیره کنند و بعداً برای تحلیل‌های مختلف از آن استفاده کنند. اما نبود استانداردهای کیفیت داده باعث شد بسیاری از پروژه‌های Data Lake با شکست مواجه شوند.


🚀 دوره سوم - Data 3.0: ترکیب بهترین‌های گذشته با فناوری‌های جدید
🔹 دوره زمانی: از ۲۰۲۰ به بعد
🔹 ویژگی اصلی: یکپارچگی، هوشمندی و انعطاف‌پذیری
🔹 ابزارهای کلیدی: Lakehouse، AI-powered Pipelines، پردازش لحظه‌ای

🔹 Data 3.0 چه چیزی را حل می‌کند؟
Lakehouse ترکیب قدرت انبار داده (DW) و دریاچه داده (DL) را ارائه می‌دهد.
پردازش داده‌های ساختاریافته، نیمه‌ساختاریافته و غیرساختاریافته بدون نیاز به انتقال بین سیستم‌های مختلف.
استفاده از هوش مصنوعی و یادگیری ماشین برای خودکارسازی پردازش داده‌ها.
پشتیبانی از فرمت‌های مدرن مانند Delta Lake، Iceberg و Hudi برای ذخیره و مدیریت داده.
معماری‌های Cloud-Native و Serverless باعث کاهش هزینه‌های پردازشی شده‌اند.


🎯 مهم‌ترین فناوری‌ها و مفاهیم در Data 3.0

1️⃣ Lakehouse:
مدلی که ساختار داده‌های Data Warehouse را با انعطاف‌پذیری Data Lake ترکیب می‌کند.

2️⃣ Data Mesh:
مدلی که مالکیت داده‌ها را بین تیم‌های مختلف توزیع می‌کند تا به جای یک تیم مرکزی، هر تیم مسئولیت داده‌های خود را داشته باشد.

3️⃣ Metadata & Data Governance:
مدیریت متادیتا و کیفیت داده اهمیت بیشتری پیدا کرده است.

4️⃣ AutoML & AI-driven Pipelines:
یادگیری ماشین و هوش مصنوعی فرآیندهای ETL را بهینه می‌کنند.

5️⃣ Real-time & Streaming Analytics:
تحلیل‌های لحظه‌ای (مانند Apache Flink) به جای پردازش‌های دسته‌ای.

6️⃣ New Data Formats (Delta/Iceberg/Hudi)


🔮 آینده Data 3.0: به کجا می‌رویم؟


💡 در آینده، معماری‌های داده‌ای بیشتر خودکار، توزیع‌شده و هوشمند خواهند شد. تیم‌های مهندسی داده دیگر مجبور به مدیریت زیرساخت‌های پیچیده نخواهند بود، بلکه تمرکز بیشتری روی ارزش‌آفرینی از داده‌ها خواهند داشت.
👍6
Forwarded from عکس نگار
📌 چرا استک داده‌های امروزی ناکارآمد شده‌اند؟ و راه‌حل چیست؟

🔹 امروزه سازمان‌ها با انبوهی از ابزارهای داده (مثل Snowflake، Databricks، Fivetran، dbt، Tableau و ...) مواجه هستند که هرکدام به‌تنهایی کارآمد هستند، اما در کنار هم باعث افزایش پیچیدگی، کاهش بهره‌وری و اتلاف منابع می‌شوند.

📉 مشکلات اصلی استک داده‌های امروزی:

🔸 هزینه‌های پنهان 💸


پرداخت لایسنس به ۵+ فروشنده مختلف.

هزینه‌های زیرساختی (سرورها، پردازش و ذخیره‌سازی مجزا).

نیاز به استخدام متخصصان متعدد برای مدیریت هر ابزار.

۴۰٪ از زمان مهندسان داده صرف یکپارچه‌سازی ابزارها می‌شود!

🔸 بار شناختی بالا و فرسودگی تیم‌ها 🧠

هر ابزار معماری و زبان خاص خود را دارد (Airflow برای Batch، Flink برای Real-time و …).

متخصصان درگیر حل مشکلات ابزارها هستند، نه تحلیل داده.

وابستگی به افراد خاص که فقط یک بخش از استک را می‌شناسند.

🔸 بی‌اعتمادی به داده‌ها 📉

گزارش‌های متناقض در ابزارهای مختلف (مثلاً عدد فروش در Power BI با Tableau متفاوت است).

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

مشکلات حاکمیت داده در معماری‌های متمرکز یا غیرمتمرکز.


🔎 راهکار چیست؟

۱. حرکت به سمت معماری مدولار و مستقل از فروشنده (Vendor-Agnostic)

به‌جای ابزارهای یکپارچه و پیچیده، از ماژول‌های سبک‌وزن و ترکیب‌پذیر برای ETL، ذخیره‌سازی و پردازش استفاده کنید.

نتیجه؟ کاهش هزینه، افزایش انعطاف‌پذیری و امکان انتخاب بهترین ابزار برای هر نیاز.

۲. ایجاد یک لایه یکپارچه (Utility Plane) برای مدیریت داده‌ها


این لایه وظایف پردازش، ذخیره‌سازی و متادیتا را به‌صورت استاندارد ارائه می‌دهد. مثال: Netflix با Utility Plane داده‌هایش را بین Redshift، Snowflake و Athena هماهنگ نگه می‌دارد.

۳. کاهش پیچیدگی بدون تغییرات ناگهانی

به‌جای حذف یکباره ابزارهای قدیمی، از Adapterها برای اتصال آنها به Utility Plane استفاده کنید.

به‌مرور، ابزارهای سنگین و ناکارآمد را با ماژول‌های جدید جایگزین کنید.

۴. پیاده‌سازی پلتفرم توسعه‌دهنده داده (Data Developer Platform)

- مدیریت متمرکز منابع (Central Control Plane):

کنترل دسترسی‌ها، متادیتا و خط‌مشی‌ها از یک نقطه.

- توسعه ماژولار (Development Plane):

مهندسان داده می‌توانند ماژول‌های کوچک (مثل یک Transform یا Validator) بنویسند و در کل سازمان استفاده کنند.

- معماری Right-to-Left:


شروع از نیاز کسب‌وکار (مثلاً "چرا فروش کاهش یافته؟") و سپس انتخاب ماژول‌های موردنیاز.

💡 جمع‌بندی:


📌 مشکل اصلی: پیچیدگی بیش‌ازحد، وابستگی به ابزارهای متعدد و ناکارآمدی عملیات داده.

📌 راه‌حل: حرکت به سمت معماری ماژولار، Utility Plane یکپارچه، و رویکرد تدریجی در بهینه‌سازی استک داده.


📖 مقاله کامل را در مدیوم بخوانید: https://lnkd.in/di9w9Hgz
👍4
Forwarded from عکس نگار
یک خرید استراتژیک در دنیای مهندسی داده متن‌باز: SDF+DBT
اگر دنیای فناوری را دنبال کرده باشید، احتمالاً بارها دیده‌اید که یک شرکت نوپا با ایده‌ای جذاب، قبل از اینکه به رقیبی جدی بدل شود، توسط یکی از غول‌های صنعت خریداری می‌شود.
📌 WarpStream که در ۲۰۲۴ توسط Confluent خریداری شد، یکی از همین نمونه‌ها بود. WarpStream ابزار پردازش داده‌های جریانی نوآورانه‌ای بود که در Confluent ادغام شد.
🔎 چرا این اتفاق می‌افتد؟
زیرا شرکت‌های بزرگ ترجیح می‌دهند نوآوری را بخرند و آن را در محصولات خود ادغام کنند، نه اینکه با آن رقابت کنند. این دقیقاً همان اتفاقی است که برای SDF Labs، یکی از رقبای جدید dbt، رخ داد.

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

💡 ببینیم DBT چیست ؟
سالهاست که dbt به عنوان یک ابزار اصلی در دنیای تحلیل داده‌ها، تحولی اساسی در ETL های مبتنی بر SQL ایجاد کرده است. dbt به تحلیلگران داده این امکان را می‌دهد که بدون نیاز به ابزارهای پیچیده، فرآیندهای Transform را خودشان مدیریت کنند، آن‌هم تنها با استفاده از SQL استاندارد. این ابزار به سرعت در تیم‌های داده در سراسر دنیا محبوب شد و به یک استاندارد صنعتی تبدیل شد.

💡 محدودیت‌های dbt
با وجود تمام مزایای dbt، یک مشکل اساسی همیشه باقی بود:
ابزار dbt درک مستقیمی از SQL نداشت و فقط آن را به عنوان یک string پردازش می‌کرد.
🔍 این یعنی SQL نوشته‌شده به‌صورت مستقیم توسط پایگاه داده اجرا می‌شد و dbt توانایی بررسی و تحلیل دقیق آن را نداشت.
🚧 نتیجه؟ فرایندهای پیچیده‌تر، مشکلات ناشی از تغییرات غیرمنتظره و زمان طولانی برای اجرا!

🔥 حالا SDF چرا در عرض دو سال به سرعت محبوب شد؟
در حالی که dbt به خوبی نیازهای بسیاری از تیم‌های داده را پوشش می‌داد، SDF توانست به نحوی نوآورانه به چالش‌های آن پاسخ دهد.
📊 با توجه به محبوبیت و رواج SQL در بین تیم‌ها تحلیل داده، SDF می‌تواند کدهای SQL را عمیق‌تر تحلیل کند، خطاها را سریع‌تر شناسایی کند و حتی تغییرات نادرست را قبل از ورود به محیط واقعی متوقف کند.
ویژگی‌های کلیدی SDF:
🔹 تشخیص سریع خطاها و جلوگیری از مشکلات داده‌ای
🔹 بهینه‌سازی کدهای SQL
🔹 ردیابی دقیق مسیر حرکت داده‌ها در سطح ستون‌ها
🔹 پشتیبانی از چندین نوع SQL و اتصال به ابزارهای مختلف مثل Snowflake
🔹 محیط توسعه ایزوله برای تست و بررسی تغییرات بدون تأثیر بر داده‌های واقعی

ابزار SDF به تیم‌های داده این امکان را می‌داد که با خیال راحت‌تر و سریع‌تر کار کنند و پیش از وقوع مشکلات، آنها را شبیه‌سازی و شناسایی کنند.

آینده متن‌باز در دنیای داده‌ها
این خرید، یکی از دلایلی است که به معماری دریاچه داده‌های باز (Open Data Lakehouse) اشاره می‌کند، جایی که هر جزء از استک باید مدل باز داشته باشد. این باز بودن می‌تواند از ذخیره‌سازی متن‌باز گرفته تا فرمت‌های جداول باز مانند Iceberg، Delta Lake، و Hudi، به موتورهای کوئری و حالا به لایه‌های تبدیل داده‌های SQL با dbt و SDF Labs ادامه یابد.

امیدواریم که با وجود این خرید استراتژیک، SDF Core همچنان به‌صورت متن‌باز باقی بماند .

نگاهی سریع به SDF :
https://docs.sdf.com/introduction/welcome

منبع خبر :
https://www.getdbt.com/blog/dbt-labs-acquires-sdf-labs
Forwarded from عکس نگار
ده سال با مهندسی داده (BigData.ir) 🎉
ده سال پیش، وقتی تصمیم گرفتم وب‌سایتی برای موضوعی بسازم که آن روزها حتی ترجمه‌اش به فارسی ناشناخته بود – «بیگ دیتا» – نه فکرش را می‌کردم که این مسیر تا امروز ادامه پیدا کند و نه می‌دانستم که روزی «مهندسی داده» به یکی از تخصص‌های کلیدی دنیای فناوری تبدیل خواهد شد.
در این سال‌ها، تلاش کرده‌ام در BigData.ir محتوایی بنویسم که از دل تجربه و یادگیری‌های شخصی‌ام یا گفتگو با دوستان و همکارانم بیرون آمده باشد. نه صرفاً بازنشر، بلکه تحلیل و انتخاب آگاهانه از میان انبوهی از موضوعات و تکنولوژی‌ها. بعضی فناوری‌ها که در گذشته درباره‌شان نوشته‌ام امروز شاید فراموش شده‌اند، اما تلاش من همیشه این بوده که چیزی منتشر کنم که به درد کسی بخورد.

امروز می‌دانم که خیلی‌ها دیگر کمتر به سایت‌ها یا وبلاگ‌های فنی مراجعه می‌کنند، اما مهندسی داده برای من فقط یک وب‌سایت نیست؛ بخشی از مسیر حرفه‌ای من است. دغدغه‌ای که باعث شده همیشه سعی کنم به‌روز بمانم و نوشتن را رها نکنم. حتی لوگوی سایت، که از همان ابتدا «مهندسی داده» بود، آن‌قدر جلوتر از زمان خودش بود که هنوز هم برایم الهام‌بخشه.

امیدوارم در این سال‌ها تونسته باشم نقشی – هرچند کوچک – در رشد جامعه تخصصی داده در ایران داشته باشم.
و اگر دوست داشتید، این هم لینک نوشته‌ام در سایت شخصی خودم درباره راه‌اندازی سایت، دقیقاً ده سال پیش:
🔗 وب‌سایت کلان‌داده (بیگ دیتا) راه‌اندازی شد

به امید ادامه‌ی این مسیر... 🙏
#BigData #مهندسی_داده #DataEngineering # تولید_محتوا #علم_داده #ده_سالگی
12🔥7👍5
Forwarded from عکس نگار
تحولی بزرگ در Apache Airflow: نسخه ۳ در راه است! 🚀

بعد از سال‌ها تجربه با نسخه‌های ۱ و ۲، حالا نسخه ۳ با بازطراحی گسترده و حل چالش‌های قدیمی در دسترس توسعه‌دهندگان قرار گرفته — فعلاً به‌صورت نسخه‌ کاندید انتشار (Release Candidate).
در ادامه نگاهی داریم به مهم‌ترین تغییرات:


🔁 نسخه‌بندی DAGها و تاریخچه اجراها

در گذشته بررسی تغییرات در DAGها کاری زمان‌بر و دشوار بود.

حالا در نسخه ۳، تاریخچه‌ی کامل DAGها از طریق UI (در Grid و Graph View) در دسترس است — حتی حذف یا اضافه شدن Taskها بین نسخه‌ها قابل ردیابی شده است.


🧠 Backfill هوشمند و یکپارچه

Backfillها قبلاً مشکلاتی در عملکرد و مقیاس‌پذیری داشتند.

اکنون توسط Scheduler مدیریت می‌شوند و از طریق UI هم قابل اجرا هستند. مناسب برای ML و ETL.


🌐 اجرای وظایف در هر زبان و محیطی

تا قبل از این، فقط Python در دسترس بود.

با Task Execution API، Airflow به معماری Client/Server رسیده.

می‌توانید Taskها را از Python، Go (و بزودی زبان‌های دیگر) اجرا کنید — حتی در Edge یا Multi-cloud.


📩 زمان‌بندی بر اساس رویدادها (Event-Driven Scheduling)

در نسخه‌های قبلی، اجرای DAGها تنها براساس زمان یا وابستگی‌های داخلی ممکن بود.

حالا Airflow 3 با معرفی مفهوم «دارایی‌های داده‌ای» (Data Assets) و «ناظران» (Watchers) امکان اجرای DAG بر اساس رویدادهای خارجی را فراهم کرده است.

به‌صورت پیش‌فرض، اتصال به AWS SQS فراهم شده است — مثلاً با رسیدن یک پیام به SQS، یک DAG می‌تواند اجرا شود.

اما نکته مهم‌تر:

🔄 این ساختار ماژولار است و می‌توانید Apache Kafka یا سایر سیستم‌های پیام‌رسان را نیز جایگزین کنید. کافی است یک Watcher مخصوص Kafka بنویسید که روی Topic مشخصی گوش دهد و پیام‌های جدید را به Airflow منتقل کند.
این امکان، Airflow را برای سناریوهای real-time در مقیاس بالا، بسیار انعطاف‌پذیر می‌کند.



🤖 اجرای بلادرنگ برای هوش مصنوعی

تاکنون وابستگی به execution_date مانع اجرای DAGهای Realtime بود.

اکنون می‌توانید DAGهایی بدون وابستگی زمانی اجرا کنید — عالی برای Inference و API-based Workflows.


🖥 رابط کاربری کاملاً جدید

UI قدیمی سنگین و محدود بود.

Airflow 3 با React و FastAPI بازنویسی شده. سریع، سبک و قابل توسعه.

همچنین Flask AppBuilder از Core جدا شده و به یک پکیج مستقل تبدیل شده.


🔐 ایزولاسیون وظایف و امنیت بالا

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

حالا هر Task می‌تواند به‌صورت ایزوله اجرا شود. CLI هم با airflowctl برای دسترسی از راه دور مجهز شده.

🗳 این نسخه فعلاً در مرحله آزمایشی و بررسی جامعه توسعه‌دهندگان است. اگر تجربه Airflow دارید، فرصت خوبیه برای تست و ارسال بازخورد قبل از انتشار نهایی.

#مهندسی_داده #ApacheAirflow3 #DataEngineering #MLOps #Kafka #EventDriven #DataOps #Automation 🚀

منبع : https://www.linkedin.com/pulse/apache-airflow-3-release-candidate-apr-4-2025-vikram-koka-3lhmc/
👍3
Forwarded from عکس نگار
طراحی یک موتور پردازش جریان با Rust: بررسی Sail 0.2.2

چند وقت پیش به کتابخانه متن‌باز Sail برخوردم که نسخه 0.2.2 آن تازه منتشر شده. با اینکه هنوز در مراحل ابتدایی است، طراحی هوشمندانه‌اش توجه من را جلب کرد. Sail یک موتور پردازش داده سبک، سریع و مدرن است که با زبان Rust توسعه یافته و از پیشرفت‌های اخیر در پردازش داده‌ها و تجربیات سیستم‌های پردازش جریان بهره می‌برد.

هدف؟ ساختن جایگزینی برای ابزارهای سنگینی مثل Spark Structured Streaming—اما با طراحی ساده‌تر، هزینه کمتر، و عملکرد بسیار بالاتر.

🧠 معماری دوبخشی: تفکیک واضح بین Control و Data
کتابخانه Sail از یک معماری دو لایه استفاده می‌کنه:

بخش کنترل - Control Plane: مغز سیستم که مسئول زمان‌بندی، هماهنگی و مدیریت اجرای تسک‌هاست. ارتباط بین اجزا از طریق gRPC انجام می‌شه که latency پایین و بازدهی بالا داره.

بخش مدیریت داده - Data Plane: محل پردازش و انتقال داده‌ها. با بهره‌گیری از Apache Arrow IPC، داده‌ها بدون serialization بین اجزا جابجا می‌شن. این یعنی کارایی بالا و پردازش سریع در حافظه.

🦀 چرا Rust؟ برای کارایی، ایمنی و کنترل
زبان Rust انتخاب شده چون:
مدیریت حافظه در زمان کامپایل داره → بدون نیاز به GC → بدون توقف ناگهانی
پشتیبانی از async/await با کتابخونه‌هایی مثل Tokio → هم‌زمانی ایمن و سریع
zero-cost abstractions → abstraction بدون هزینه‌ی runtime
جلوگیری از race condition و memory leak

ترکیب این ویژگی‌ها باعث شده Sail به‌صورت طبیعی مناسب real-time data processing باشه—با latency پایین و throughput بالا.


🔁 اتصال سریع به دنیای Python و AI

کتابخانه Sail راه ارتباط با پایتون رو ساده و سریع کرده:
پشتیبانی از UDFهای پایتون (مثل PySpark)
استفاده از PyO3 برای ارتباط با Python، بدون Py4J و سربار serialization
zero-copy بودن ارتباط → انتقال داده بدون کپی اضافی
پشتیبانی از Pandas UDFs و تبادل مستقیم داده با NumPy/Arrow

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


💡 موتور SQL قدرتمند و قابل توسعه
کتابخانه Sail یک موتور SQL اختصاصی دارد که با استفاده از پارسرهای ترکیبی chumsky و Rust macros برای گسترش گرامر SQL پیاده‌سازی شده. این موتور قادر است کوئری‌های پیچیده استاندارد مانند TPC-H و TPC-DS را به‌خوبی اجرا کند. همچنین، با بهره‌گیری از Apache DataFusion، از قابلیت‌های بهینه‌سازی برداری، پردازش ستونی و اجرای هم‌زمان پشتیبانی می‌کند.


🧩 مدل Actor برای هم‌زمانی ایمن و مقیاس‌پذیر
کتابخانه Sail از الگوی Actor برای اجرای توزیع‌شده استفاده می‌کنه:
هر node مثل driver یا worker → یک actor مستقل
ارتباط بین actorها از طریق پیام → بدون lock یا شرایط رقابتی
اجرا در event loop غیربلوکه شونده → هم‌زمانی بهینه
تحمل خطا بالا → crash یک actor کل سیستم رو متوقف نمی‌کنه

این معماری به‌ویژه برای سیستم‌هایی که با داده‌های زنده یا حجم بالا کار می‌کنن عالیه—مثل real-time dashboards یا AI pipelines.

کتابخانه Sail نشون می‌ده چطور با انتخاب‌های درست—مثل Rust برای کارایی، مدل Actor برای هم‌زمانی، Arrow برای انتقال داده و سازگاری با Spark—سیستمی ساخته می‌شه که هم نیازهای فعلی رو برآورده می‌کنه، هم برای آینده آماده است. این طراحی نه‌تنها در تئوری جذابه، بلکه در عمل هم موفق بوده: کاهش ۹۴٪ هزینه سخت‌افزار و سرعت ۴ برابر بیشتر نسبت به Spark.


اگر قصد دارید با Spark کار کنید، شاید بد نباشه این گزینه رو به جای اسپارک اصلی امتحان کنید.

آدرس پروژه : https://github.com/lakehq/sail
👍41
از خبر تا پادکست در چند دقیقه: جادوی n8n و هوش مصنوعی بدون یک خط کدنویسی 🎙

همه‌ی ما که در تیم‌های فنی/تحلیل‌داده یا توسعه سامانه‌ها کار می‌کنیم، خوب می‌دونیم که بخشی از کارها باید به‌صورت خودکار و زمان‌بندی‌شده انجام بشن؛ مثلاً:

🧩گرفتن بکاپ دیتابیس به‌صورت شبانه

🧩اجرای اسکریپت‌های پردازش داده در ساعات کم‌ترافیک

🧩همگام‌سازی داده‌ها بین چند سرویس

🧩ارسال اعلان، ایمیل یا گزارش‌های روزانه و هفتگی

🧩یا حتی پاک‌سازی فایل‌های موقت و مانیتورینگ وضعیت سرویس‌ها


تا چند سال پیش برای این کارها معمولاً سراغ کرون‌جاب‌ها، اسکریپت‌های دستی، یا نهایتاً Airflow می‌رفتیم. ولی دنیای اتوماسیون خیلی سریع‌تر از اون چیزی که فکر می‌کردیم پیشرفت کرده...


🌍 جایی که اتوماسیون به عامل‌های هوشمند می‌رسه...

با رشد ابزارهای هوش مصنوعی مولد (مثل GPT, Gemini, Claude)، حالا انتظار ما از سیستم‌های اتوماسیون فقط اجرای زمان‌بندی‌شده نیست—بلکه می‌خوایم:

- 📦 ورودی‌ها رو هوشمند تحلیل کنه

- 📦 تصمیم بگیره که چه کاری انجام بشه

- 📦 با سایر ابزارها گفت‌وگو کنه

- 📦 نتیجه نهایی رو تولید کنه، اونم بدون دخالت ما

اینجا دقیقا جاییه که ابزارهایی مثل n8n وارد می‌شن—که نه‌تنها اتوماسیون رو ساده می‌کنن، بلکه بستری برای پیاده‌سازی همین "عامل‌های هوشمند" هم فراهم می‌کنن.

🔄 از NiFi تا n8n: سیر تکامل سیستم‌های Workflow محور

طلیعه‌دار این نوع تفکر، پروژه Apache NiFi بود که مفهوم جریان داده‌های بصری (Visual Flow-Based Programming) رو وارد دنیای بک‌اند کرد. اخیراً هم نسخه ۲ اون با تغییرات اساسی عرضه شده.

اما در مقابل، نیاز امروزی توسعه‌دهندگان به سمت ابزارهایی سبک‌تر، ساده‌تر و سریع‌تر با رابط گرافیکی جذاب و جامعه کاربری فعال حرکت کرده. اینجاست که n8n خودش رو نشون می‌ده:

🎯 چرا n8n محبوب شده؟

نصب ساده و سبک، حتی روی سرورهای کوچک

رابط کاملاً گرافیکی و No-code برای ساخت workflow

اتصال راحت به انواع API، دیتابیس، سرویس‌های ابری و ابزارهای AI

پشتیبانی از زبان‌های مختلف :

JavaScript (Node.js) برای نوشتن فانکشن‌ها

Python (با ماژول Python Node) برای اجرای تحلیل‌های پیچیده‌تر یا مدل‌های ML

ادغام‌های آماده با Hugging Face، Google Gemini، OpenAI و ...


🎧 یک نمونه واقعی: تبدیل اخبار BBC به پادکست صوتی با n8n و AI


اگر دوست دارید قدرت این ابزار رو در عمل ببینید، پیشنهاد می‌کنم این ویدئوی آموزشی فارسی از محمدرضا رنج‌دوست رو ببینید:

🔗 مشاهده در یوتیوب - https://www.youtube.com/watch?v=Z4MaAM6B3S4

این ویدیو چه چیزی رو نشون می‌ده؟

دریافت خودکار اخبار از BBC

پردازش و خلاصه‌سازی متن با استفاده از مدل‌های AI

تولید فایل صوتی حرفه‌ای (Text-to-Speech)

همه این مراحل فقط با چند کلیک ساده و بدون حتی یک خط کدنویسی

🎙 خروجی؟ یک پادکست روزانه، خودکار و هوشمند—فقط با n8n!




🧠 جمع‌بندی

در کنار ابزارهای قدرتمندی مثل Airflow، Prefect یا Dagster برای orchestrating pipelineهای پیشرفته، ابزارهایی مثل n8n دنیای جدیدی رو برای تیم‌های کوچک‌تر، توسعه MVPها، یا حتی خودکارسازی فرآیندهای هوشمند باز کرده‌اند.


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


#هوش_مصنوعی #اتوماسیون #عامل_هوشمند #توسعه_سامانه #پادکست_هوشمند
👍61
چند ثانیه سریع‌تر، یک تجربه متفاوت: افزایش سرعت سرویس ثبت آگهی، رضایت کاربران و درآمد!
این مطلب از وبلاگ مهندسی دیوار در وب سایت ویرگول برداشته شده است . آدرس اصلی مقاله : yun.ir/divar01
سال ۱۴۰۱، سرویس ثبت آگهی دیوار، یکی از حیاتی‌ترین بخش‌های پلتفرم، با چالش‌های فزاینده‌ای روبرو بود. با رشد دیوار و افزایش روزانه‌ی تعداد آگهی‌ها، زیرساخت قدیمی که با پایتون نوشته شده بود، دیگر پاسخگوی نیازهای ما نبود. کاربران هنگام ثبت آگهی با کندی و خطا مواجه می‌شدند و این موضوع مستقیماً بر تجربه‌ی آن‌ها و در نتیجه بر موفقیت دیوار تأثیر می‌گذاشت.

تیم فنی تصمیم گرفت برای حل ریشه‌ای این مشکلات، سرویس ثبت آگهی را بازنویسی کند. هدف اصلی بهبود پایداری (Reliability) و سرعت سرویس بود، اما نتیجه‌ی کار، یک غافلگیری خوشایند برای همه ما به همراه داشت: بدون اینکه هیچ تغییری در ظاهر یا فرآیند محصولی ثبت آگهی ایجاد کنیم، شاهد بهبود قابل توجه در متریک‌های محصولی و حتی افزایش محسوس درآمد دیوار بودیم!

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

🦀 کندی و خطاهای مکرر: طراحی قدیمی سرویس دیگر نمی‌توانست حجم بالای درخواست‌ها را به خوبی مدیریت کند. کاربران اغلب با کندی در بارگذاری صفحات فرم ثبت آگهی و حتی خطاهای غیرمنتظره در لحظه‌ی نهایی فشردن دکمه «ثبت آگهی» مواجه می‌شدند. طبق گزارش‌ها، نزدیک به ۱۰ درصد تماس‌های پشتیبانی دیوار ناشی از همین مشکلات در فرآیند ثبت یا ویرایش آگهی بود و حدود ۰.۷۵ درصد درخواست‌های ثبت/ویرایش آگهی با خطای غیرمنتظره مواجه می‌شدند.
🦀 وابستگی‌های زیاد و شکنندگی: سرویس ثبت آگهی به سرویس‌های داخلی متعددی وابسته بود. بروز مشکل در هر یک از این سرویس‌ها می‌توانست کل فرآیند ثبت آگهی را مختل کند.
🦀 تجربه‌ی کاربری نامطلوب: کندی و خطاها باعث می‌شد کاربران از ثبت آگهی منصرف شوند یا فرآیند را نیمه‌کاره رها کنند. این تجربه‌ی ناخوشایند، به خصوص برای کاربرانی که برای اولین بار قصد ثبت آگهی داشتند، می‌توانست دلسردکننده باشد.
🦀 بهره‌وری پایین توسعه‌دهندگان: سرویس قدیمی از کتابخانه‌ای به نام ui schema برای ساخت فرم‌ها استفاده می‌کرد که قدیمی، فاقد type safety و مستندات کافی بود. این موضوع باعث بروز خطاهای زیاد در زمان توسعه، کندی فرآیند توسعه (تا ۲۰٪ کندتر طبق گفته‌ی تیم‌ها) و سختی در افزودن قابلیت‌های جدید می‌شد. مذاکرات مداوم بین تیم‌های بک‌اند و کلاینت برای اطمینان از هماهنگی، زمان زیادی را تلف می‌کرد.
با توجه به این چالش‌ها، در اردیبهشت ۱۴۰۲ تیمی اختصاصی برای بازنویسی کامل سرویس ثبت آگهی تشکیل شد. هدف، ساخت سرویسی به‌روز، پایدار، سریع و توسعه‌پذیر بود.

🧠 تغییرات فنی‌ای که دادیم: بازنویسی با نگاهی نو
برای مشاهده ادامه مطلب به سایت ویرگول و وبلاگ فنی دیوار مراجعه کنید.
👍2
داستان یک مهاجرت: از الستیک سرچ به آپاچی دوریس و صرفه‌جویی ۸۰ درصدی در هزینه‌های عملیاتی🌟

در یکی از سرویس‌های Tencent Music (TME)، روزانه بیش از ۶۹۰ گیگابایت داده وارد Elasticsearch می‌شد. این سیستم جستجو با وجود قدرت بالا در Full-Text Search، در مقیاس‌های بزرگ دچار مشکلات جدی شد:

منبع : https://doris.apache.org/blog/tencent-music-migrate-elasticsearch-to-doris

🚨 مشکلات کلیدی Elasticsearch:

💸 هزینه ذخیره‌سازی بسیار بالا

ساختار فهرست‌گذاری سنگین (indexing روی همه فیلدها) و نگهداری نسخه‌های متنوع داده باعث مصرف فضای عظیمی می‌شد. تنها برای یک جدول، روزانه نزدیک به ۷۰۰ گیگابایت فضا اشغال می‌شد!

🐢 سرعت پایین در نوشتن داده‌ها


فرآیند ingest با افزایش داده‌ها بسیار کند شده بود — نوشتن داده‌ی کامل به بیش از ۱۰ ساعت زمان نیاز داشت. این تأخیر برای سرویس‌های زنده قابل‌قبول نبود.

🧩 ضعف در تحلیل‌های پیچیده

الستیک‌سرچ اساساً برای جستجو ساخته شده، نه تحلیل OLAP. انجام عملیات پیچیده مثل JOIN، گروه‌بندی سنگین و کوئری‌های ترکیبی باعث افت محسوس عملکرد می‌شد.

🚫 خطا در کوئری‌های بزرگ و ترکیبی

کوئری‌هایی با شرط‌های تو در تو (AND، OR، فیلترهای عددی/تاریخی) گاهی با خطاهایی مثل too_long_query یا timeouts مواجه می‌شدند.

🔄 پیچیدگی در معماری داده‌ها

برای تحلیل، داده‌ها باید هم در Elasticsearch و هم در سیستم‌های OLAP (مثل Doris) نگهداری می‌شدند؛ این یعنی دو نسخه از داده، پیچیدگی بیشتر و ریسک ناسازگاری.

راه‌حل TME: مهاجرت به Apache Doris 2.0

در سال ۲۰۲۳، تیم TME برای تحلیل‌های اصلی خود از ClickHouse به Apache Doris مهاجرت کرد. در این معماری جدید، تحلیل‌های OLAP روی Doris انجام می‌شد، اما برای تحلیل‌های متنی همچنان از Elasticsearch استفاده می‌کردند. با معرفی Inverted Index بومی در Doris 2.0، حالا می‌توان Full-Text Search را نیز مستقیماً در همین پلتفرم انجام داد — بدون نیاز به Elasticsearch و بدون معماری‌های چندلایه.

🔎 ویژگی‌های جدید Doris:

📝 جستجوی تمام‌متن (Full-Text Search)

حالا Doris از طریق inverted index بومی، امکان جستجو در داده‌های متنی با سرعت بسیار بالا و با قابلیت ترکیب با سایر فیلترهای SQL را فراهم می‌کند.

🔖 جستجوی مبتنی بر تگ (Tag-Based Filtering)

برای اپلیکیشن‌هایی مثل فروشگاه‌های آنلاین یا شبکه‌های اجتماعی، فیلترگذاری سریع بر اساس تگ‌ها اهمیت بالایی دارد. Doris با ساختار جدید، می‌تواند میلیون‌ها رکورد را در زمان بسیار کوتاه segment و فیلتر کند.

📊 تحلیل پیچیده با SQL یکپارچه

برخلاف Elasticsearch که برای هر تحلیل نیاز به دستورات DSL خاص دارد، Doris تمام قدرت SQL استاندارد را در اختیار شما می‌گذارد:

امکان JOIN بین چند جدول

امکان Aggregation تو در تو


امکان Window functions و حتی sub-queryها

همه این عملیات با پرفورمنس بالا، روی داده‌های با حجم بزرگ و حتی real-time قابل اجرا هستند.

💡 نتیجه‌گیری: Elastic در نقش جستجوگر، Doris در نقش تحلیل‌گر – یا هر دو در یک سیستم؟

برای بسیاری از شرکت‌ها، Elastic هنوز برای سناریوهای خاص مانند log analysis یا سرچ‌های مبتنی بر متن، انتخاب مناسبی است. اما زمانی که نیاز به ingestion سنگین، تحلیل‌های real-time، کوئری‌های ترکیبی و مصرف بهینه منابع دارید، بهتر است به ابزارهایی مانند Apache Doris نگاه جدی‌تری داشته باشید — ابزاری که ترکیب جستجو و تحلیل را بدون پیچیدگی معماری و با زبان SQL در یک سیستم ارائه می‌دهد.
پ.ن :
مقاله اخیر علیرضا صادقی در خصوص بررسی وضعیت دیتابیس‌های تحلیلی، تایید کننده همین محبوبیت رو به گسترش آپاچی دوریس و فرزند جداشده آن یعنی استارراکز است . بخصوص پشتیبانی از آپدیت روی داده‌های حجیم تحلیلی، یکی از مزایای اصلی این دیتابیس است که یکی از دلایل اصلی مهاجرت از کلیک هوس به دوریس برای شرکت فوق هم همین موضوع بود : https://www.pracdata.io/p/state-of-open-source-read-time-olap-2025
#مهاجرت #دوریس #الستیک‌سرچ
👏6🙏3👍1
تضمین مقیاس‌پذیری بدون مهاجرت! درس‌هایی از تیم دیتابیس Figma

خیلی از ما وقتی با محدودیت‌های عملکردی یا مقیاس‌پذیری در دیتابیس مواجه می‌شویم، اولین فکری که به ذهن‌مان می‌رسد، مهاجرت به یک تکنولوژی دیگر است:
«شاید وقتشه بریم سمت NoSQL»، یا «بیایید CockroachDB رو تست کنیم»، یا «با BigQuery دردسر نداریم!»

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

📚 تیم دیتابیس Figma دقیقاً همین تصمیم را گرفتند و به جای مهاجرت از PostgreSQL، در طی ۹ ماه، زیرساختی طراحی کردند که تقریباً به مقیاس‌پذیری بی‌نهایت رسید — بدون تغییر ابزار، بدون بازنویسی اپلیکیشن، و بدون ورود به تکنولوژی‌های ناشناخته.

📚 بیایید با هم نگاهی بیندازیم به سفر ۹ ماهه‌ی تیم فنی Figma برای مقیاس‌پذیر کردن PostgreSQL که بدون ترک ابزارهای آشنا، راهی برای تقریباً بی‌نهایت شدن باز کردند

منبع : https://www.figma.com/blog/how-figmas-databases-team-lived-to-tell-the-scale/

🔹 مرحله اول: Vertical Partitioning

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

این کار باعث شد بدون دست زدن به اپلیکیشن، فشار روی CPU و IOPS کاهش یابد و امکان اسکیل مستقل هر بخش فراهم شود.

🎯 نتیجه؟ کاهش چشمگیر بار سیستم و ساده‌تر شدن مسیر مهاجرت به شاردینگ افقی.

🔹 مرحله دوم: اندازه‌گیری ظرفیت واقعی سیستم

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

🔹 مرحله سوم: Horizontal Sharding

اینجا جادو شروع شد! 👇

شاردینگ منطقی قبل از فیزیکی

تیم ابتدا شاردینگ منطقی را با استفاده از Views روی جداول اعمال کرد:



CREATE VIEW table_shard1 AS
SELECT * FROM table
WHERE hash(user_id) BETWEEN 0 AND 1000





با این روش، سیستم طوری رفتار می‌کرد که انگار دیتابیس فیزیکی‌اش شارد شده — بدون اینکه داده‌ها واقعاً جابجا شوند.

طراحی DBProxy برای مدیریت شاردها

برای هدایت کوئری‌ها به شارد مناسب، یک سرویس Go به نام DBProxy ساختند. این سرویس بین اپلیکیشن و PGBouncer قرار گرفت و شامل اجزای زیر بود:

🔍 Query Parser: تبدیل SQL به AST

🧠 Logical Planner: استخراج shard_id از AST

📦 Physical Planner: ترجمه کوئری به سمت دیتابیس فیزیکی مناسب

⛓️ Load shedding، observability و پشتیبانی از transactionها

مدیریت "scatter-gather" هوشمند

اگر کوئری شامل shard key بود، فقط روی یک شارد اجرا می‌شد.

اما در صورت نبود کلید شارد، DBProxy کوئری را به همه‌ی شاردها پخش می‌کرد (scatter) و نتایج را جمع می‌کرد (gather). برای جلوگیری از پیچیدگی، فقط subset محدودی از SQL را پشتیبانی کردند (مثلاً فقط joinهایی که روی shard key و در یک colo بودند).

آنالیز real-world queries

برای انتخاب بهترین subset، از ترافیک واقعی production یک «shadow planner» ساختند و کوئری‌ها را در Snowflake تحلیل کردند. نتیجه؟ طراحی یک زبان SQL سفارشی برای شاردینگ که ۹۰٪ استفاده‌ها را پوشش می‌داد.

🔹 مرحله چهارم: شاردینگ فیزیکی

بعد از اطمینان از عملکرد صحیح شاردینگ منطقی، تیم به سراغ تقسیم فیزیکی داده‌ها رفت. داده‌ها به N دیتابیس جدید منتقل شدند، و ترافیک به صورت real-time از طریق DBProxy به شاردهای فیزیکی هدایت شد.

همه‌ی این مراحل با feature flag و قابلیت rollback فوری انجام شد.

🎯 نتایج کلیدی:

- بدون مهاجرت به دیتابیس جدید به مقیاس‌پذیری نزدیک به بی‌نهایت آنهم با پستگرس رسیدند.

- از ابزارهای آشنا مثل PostgreSQL و RDS استفاده کردند.

- سیستم query engine سفارشی ساختند که هم سریع بود و هم قابل مدیریت.

- عملکرد و پایداری حفظ شد، حتی در هنگام failover به شاردهای جدید.


💡 درس بزرگ این سفر؟
درسی که از Figma می‌گیریم این است که:

گاهی باید قبل از «تغییر ابزار»، «طراحی را تغییر دهی».

اگر شما هم با PostgreSQL یا هر دیتابیس دیگری کار می‌کنید، شاید پاسخ چالش مقیاس‌پذیری در خلاقیت معماری نهفته باشد، نه در مهاجرت.
با درک بهتر از نیاز واقعی، تحلیل دقیق ترافیک، و استفاده‌ی هوشمندانه از ابزارها، می‌شود سیستم‌هایی ساخت که هم مقیاس‌پذیر باشند و هم پایدار — بدون ترک ابزارهای فعلی.


مقیاس‌پذیری همیشه در تعویض تکنولوژی نیست. گاهی فقط باید عمیق‌تر بفهمی و مهندسی‌تر عمل کنی!


#پستگرس #مهندسی_داده
👍3🔥1
پردازش داده‌های جریانی (Stream Processing) با Kafka، Flink , PostgreSQL

در دنیای واقعی، گاهی نیاز داریم که اطلاعات را در کمترین زمان ممکن (Real-Time) دریافت، پردازش و ذخیره کنیم — نه ساعت‌ها بعد. مثل داده‌های بازارهای مالی (بورس)، سیستم‌های IoT، یا مانیتورینگ سرویس‌ها و شبکه‌ها.

توضیح : این مطلب پستی از جناب آقای مجید زرنگ در لینکدین و کانال مهندسی‌داده با افتخار و در جهت هم‌افزایی دانش در حوزه مهندسی داده آنرا باز نشر می‌کند. اگر سایر دوستان هم مطلب مفیدی در حوزه مهندسی داده دارند از طریق ادمین کانال حتما آنرا با ما در میان بگذارند تا در اختیار علاقه‌مندان قرار گیرد.
آدرس پست اصلی در لینکدین :
https://www.linkedin.com/feed/update/urn:li:activity:7321031272133210112

تو این سناریو ما یک API داریم که به‌صورت جریانی داده‌های کاربران رو تولید می‌کنه و این داده‌ها باید در کمترین زمان ممکن پردازش و ذخیره بشن.
در این پروژه، با استفاده از:
یک : Kafka برای مدیریت صف داده‌های ورودی
دو : Apache Flink به‌عنوان موتور اصلی پردازش جریانی
سه : PostgreSQL برای ذخیره‌سازی


یک پایپ‌لاین برای پردازش و پایش داده‌ها ورودی ایجاد کردیم. این سیستم داده‌های کاربران را از API دریافت می‌کند، سن را به سال تولد تبدیل می‌کند و نتیجه را در پایگاه داده ثبت می‌کند.
تو این ویدیو، نحوه کار Flink و روند پردازش داده‌ها به‌صورت خیلی کوتاه و خلاصه توضیح داده شده

در معماری Flink، دو بخش اصلی مسئولیت پردازش را بر عهده دارند:
یک : JobManager: مسئول هماهنگی اجرای وظایف، زمان‌بندی پردازش‌ها و بازیابی سیستم در صورت بروز خطا.
دو : TaskManager: اجرای واقعی پردازش‌ها را انجام می‌دهد؛ داده‌ها را از Kafka می‌خواند، آن‌ها را پردازش می‌کند و نتایج را در PostgreSQL ذخیره می‌کند — با قابلیت پردازش موازی برای افزایش سرعت و مقیاس‌پذیری.


جالب اینجاست که تمامی داده در کمتر از ۱۰ ثانیه پردازش و ذخیره شدند، که نشان دهنده کارایی این پایپ‌لاین در تحلیل داده‌های جریانی است

همچنین راه‌هایی برای کاهش latency وجود داره، از جمله:
تنظیم مناسب buffer size در Kafka و Flink

افزایش parallelism در TaskManagerها

استفاده از checkpointing و tuning در Flink برای بهینه‌سازی اجرای jobها

بهینه‌سازی تنظیمات sink برای نوشتن سریع‌تر در پایگاه داده (مثل PostgreSQL)

البته Flink کاربردهای گسترده‌تری دارد و بیشتر از پروژه‌هایی به‌کار گرفته می‌شود که سرعت در پردازش داده‌ها اهمیت حیاتی دارد.

برای مشاهده کدها و جزئیات بیشتر، می‌تونید به این ریپازیتوری در GitHub سر بزنید:
https://github.com/zerangmajid/StreamProcessing
در پایان، ممنون از همه کسانی به نحوی ازشون چیزی یاد گرفتم. (ویدئو در پست بعدی ارسال شده است )
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
ویدئوی توضیح پست بالا - یک پروژه آموزشی برای کار با کافکا + فلینک
👍4
چگونه PostgreSQL را به یک موتور تحلیلی Iceberg-Powered تبدیل کنیم؟

تصور کنید تیمی فنی هستید که از PostgreSQL به‌عنوان پایگاه‌داده اصلی برای مدیریت داده‌های عملیاتی استفاده می‌کنید. حالا با یک چالش بزرگ مواجه شده‌اید: داده‌های خام مانند کلیک‌های کاربران و بازدید محصولات با سرعت سرسام‌آوری در حال افزایش است و شما باید ضمن ذخیره این داده‌ها، امکان تحلیل سریع آنها را هم فراهم کنید.

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

اضافه کردن یک پایگاه‌داده تحلیلی جدید (مانند کلیک‌هوس) استک داده را پیچیده و هزینه‌های عملیاتی و منابع انسانی را افزایش می‌دهد.

وارد کردن حجم عظیم داده به PostgreSQL باعث فشار بیش‌ازحد به دیتابیس عملیاتی می‌شود.


تیم شما می‌خواهد راهکاری ساده، مقیاس‌پذیر و بدون پیچیدگی‌های زیرساختی پیدا کند.

بیایید یک راه‌حل سریع و ساده و مدرن را که ترکیب پستگرس و DuckDB و Apache Iceberg است را با هم بررسی کنیم.


📊 بسیاری از سازمان‌ها و تیم‌های داده از PostgreSQL به‌عنوان پایگاه‌داده اصلی خود استفاده می‌کنند. قدرت فوق‌العاده‌ی آن در پایداری، قابلیت توسعه با افزونه‌ها (🧩 Extensions) و اکوسیستم گسترده‌اش باعث شده که به یک هاب داده‌ای قابل اعتماد تبدیل شود.

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


🦆 DuckDB یک موتور تحلیلی مدرن و فوق‌العاده سبک است که برای کار با داده‌های کوچک تا متوسط (ده‌ها گیگابایت) طراحی شده. ویژگی‌های کلیدی آن:


بدون نیاز به نصب؛ تنها با یک فایل اجرایی ساده

پشتیبانی از SQL استاندارد

پردازش سریع داده‌ها به لطف ذخیره‌سازی ستونی

یکپارچگی بالا با فرمت‌های Apache مانند Parquet و Arrow

اجرای مستقیم روی فایل‌ها (بدون نیاز به وارد کردن به دیتابیس)


پیشرفت‌های اخیر در اکوسیستم Apache Arrow، DuckDB را به انتخاب اول بسیاری از پروژه‌های داده‌محور تبدیل کرده است. حتی پروژه SmallPond از شرکت DeepSeek از DuckDB برای رسیدن به راهکار تحلیلی سریع و مقیاس‌پذیر خود استفاده کرده است.

حال برگردیم به مشکل ابتدای مقاله

📦 تصور کنید داده‌های حجیمی مانند کلیک‌ها، بازدید محصولات یا لاگ‌های خام را بتوانید به‌صورت فایل‌های استاندارد Iceberg در MinIO به کمک خود DuckDB ذخیره کنید (با فرمت خام اما قابل کوئری گرفتن و ساختارمند) و کلا این داده‌های تحلیلی و سنگین را از روی پستگرس بردارید. با ذخیره این داده‌ها در خود DuckDB و یا به صورت استانداردتر در یک آبجکت استوریج مثل MiniO، با کمک DuckDB درون PostgreSQL می‌توانید به‌سادگی روی این داده‌ها کوئری بزنید و الگوها را استخراج کنید، بدون آنکه فشار بیش‌ازحدی به دیتابیس عملیاتی وارد شود.


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

🎥 برای آشنایی بیشتر با این رویکرد، پیشنهاد می‌کنم این ارائه عالی از Marco Slot را ببینید که در آن ترکیب PostgreSQL، DuckDB و Iceberg را به‌صورت واقعی و اجرایی توضیح می‌دهد:

👉 https://www.youtube.com/watch?v=iQaXD2YeKNI

فایل ارائه ویدئوی فوق را هم در زیر می توانید مشاهده و استفاده کنید.
👇👇👇
👍61
مهندسان واقعی ابزارباز نیستند! 🛠

هر روز تو لینکدین ابزارهای جدید داده معرفی می‌شن که انگار قراره کل دنیای مهندسی داده رو عوض کنن! 📈 اما آیا باید دنبال هر کدوم از این ابزارها بدویم؟ خیر! 🚫
مقاله‌ای مرتبط از Shashwath Shenoy خوندم که می‌گه به جای گرفتار شدن تو این چرخه بی‌پایان، باید روی اصول مهندسی داده تمرکز کنیم. خلاصه آنرا در اینجا با شما به اشتراک گذاشته‌ام🔍


https://blog.det.life/the-brutal-truth-about-data-engineering-stop-chasing-tools-like-a-headless-chicken-b8a4b8e05835

مروری بر مقاله: چرا نباید دنبال ابزارهای جدید بدویم؟ 📝

مقاله اصلی با عنوان The Brutal Truth About Data Engineering: Stop Chasing Tools Like a Headless Chicken! (ترجمه: «حقیقت تلخ مهندسی داده: از تعقیب بی‌هدف ابزارها دست بکشید!») به ما نشون می‌ده چرا نباید اسیر هیاهوی ابزارهای جدید بشیم.


1️⃣ چرخه بی‌پایان ابزارها 🔄

تازه به یه ابزار مثل Hadoop یا Spark مسلط می‌شیم، یهو Snowflake، Databricks یا یه چیز جدید دیگه با کلی سر و صدا میاد! 😵 خیلی از این ابزارها فقط نسخه‌های به‌روز تکنولوژی‌های قبلی‌ان، ولی مهندسا رو مجبور می‌کنن مدام خودشون رو آپدیت کنن.


2️⃣ هیاهوی تبلیغاتی ابزارها 📣

ابزارهایی مثل Informatica، Talend، Airflow و dbt با حمایت اینفلوئنسرها تو لینکدین معرفی می‌شن. 🗣 ممکنه بعضی‌هاشون برای یه نیاز خاص مفید باشن، اما نباید فقط چون همه دارن دربارشون حرف می‌زنن، دنبالشون بریم. مثلاً برای زمان‌بندی کارها، خیلیا سراغ Airflow می‌رن، ولی با چند کانتینر ساده داکر و ویژوال‌سازی با Grafana هم می‌شه همون نتیجه رو گرفت! 🐳📊


3️⃣ یادگیری واقعی یا اسیر تبلیغات؟ 🤔

آیا واقعاً داریم ابزارها رو یاد می‌گیریم یا فقط دنبال موج تبلیغاتیم؟ تمرکز زیاد روی ابزارهای جدید، ما رو از یادگیری عمیق اصول مهندسی داده دور می‌کنه.


4️⃣ اصول، مهم‌تر از ابزارها! 💡

به جای ابزاربازی، روی اینا تمرکز کنیم:

🏢 نیازهای کسب‌وکار: بدونیم چرا یه سیستم می‌سازیم، نه فقط چطور.

📚مفاهیم پایه داده: SQL، ETL، مدل‌سازی داده و محاسبات توزیع‌شده همیشه به کار میان.

📈 داستان‌گویی با داده: استخراج بینش‌های معنادار از داده‌ها یه مهارت همیشگیه.

🎯 یادگیری هدفمند: فقط وقتی یه ابزار مشکلی رو حل می‌کنه، بریم سراغش.


5️⃣ مهندسان برتر ابزارباز نیستن! 🌟

بهترین مهندسان داده کسایی‌ان که:

🏗 پایپ‌لاین‌های مقیاس‌پذیر می‌سازن، مهم نیست از چه ابزاری.

⚙️ به معماری و کارایی اهمیت می‌دن، نه تبلیغات.

💬 می‌تونن توضیح بدن چرا یه سیستم کار می‌کنه.

🧠 استراتژیک ابزار انتخاب می‌کنن، نه شتاب‌زده.


6️⃣ سوالای کلیدی قبل از انتخاب ابزار

این ابزار ۵ سال دیگه هنوز به درد می‌خوره؟

🎭 واقعاً مشکلی رو حل می‌کنه یا فقط هیاهوی تبلیغاتیه؟


7️⃣ حرف آخر

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

عکس از مقاله اصلی برداشته شده است.
👍6🤔1
مهندس داده خوب، ناپیداست؛ تیم داده حرفه‌ای، بی‌صدا می‌درخشد👻

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

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

کوئری‌ها کند نمی‌شوند چون قبلاً بهینه شده‌اند.

گزارش‌ها ناقص نیستند چون کیفیت داده تضمین شده.

نیازمندی‌های جدید خیلی سریع وارد سیستم می‌شوند چون گوش شنوا دارند.

خطاها قبل از اینکه روی داشبورد بیایند، شناسایی و رفع شده‌اند.

و نتیجه؟

«همه‌چیز کار می‌کنه!»

و اینجا یک خطای سیستماتیک وجود داره و اون هم اینکه چون مشکلی دیده نمی‌شود، ارزش تیم هم کمتر به چشم می‌آید.


📉 توی چشم نبودن ≠ کم‌اهمیت بودن


در بیشتر شرکت‌ها، تا وقتی چیزی خراب نشه، کسی سراغ تیم دیتا نمیاد. برعکس، تیم‌هایی که همیشه باید «فایر فایت» کنن، بیشتر به چشم میان چون هی داد می‌زنن «ما بودیم که این بحران را حل کردیم!»

اما واقعیت اینه که:

بهترین تیم‌ها، تیم‌هایی هستن که نیاز به قهرمان ندارن، چون سیستم‌شون سالم طراحی شده.



👨‍🔧 مهندسی داده واقعی یعنی:


پیش‌بینی قبل از بحران

شنیدن نیازهای کسب‌وکار، قبل از اینکه تبدیل به مشکل شن

طراحی سیستم‌های مقیاس‌پذیر

مانیتورینگ دقیق برای پیشگیری

اتومات‌سازی برای جلوگیری از خطای انسانی

💬 حرف آخر: اگه دنبال دیده شدن همیشگی هستی...

شاید مهندسی داده حوزه‌ی مناسبی برات نباشه. چون وقتی کارت رو خوب انجام بدی، خیلی‌ها فکر می‌کنن اصلاً کاری نبوده که بخواد انجام بشه!

اما اون‌هایی که باید بدونن — مدیران فنی، محصول، و هم‌تیمی‌های باتجربه — دقیقاً می‌فهمن چه هنری پشت این «سکوت» هست.



📌 یادمون نره:

«👨‍🔧 مهندسی داده خوب، مثل یک لوله‌کش ماهر می‌مونه.

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

اما اگه از اول طراحی یا اجرا بد باشه، خرابی‌ها پشت سر هم پیش میان و مدام باید سراغش برید.»




عکس از آدرس زیر برداشته شده :

https://unsplash.com/photos/black-remote-control-on-red-table-6sAl6aQ4OWI
👍12
معرفی سایت DataNerd.tech؛ مرجعی برای تحلیل مهارت‌ها و حقوق مشاغل داده‌ای

سایت DataNerd.tech به عنوان یک مرجع تحلیلی📊، با هدف کمک به متخصصان داده ایجاد شده است تا بتوانند با آگاهی بیشتر، مسیر شغلی خود را انتخاب کنند.

این پلتفرم با جمع‌آوری روزانه حدود ۶۵۰۰ آگهی شغلی از نتایج جستجوی گوگل و تحلیل آن‌ها از طریق پردازش زبان طبیعی (NLP)، پرطرفدارترین مهارت‌ها و متوسط حقوق هر موقعیت شغلی را ارائه می‌دهد.

آدرس سایت : https://datanerd.tech

در بخش مربوط به مهندسین داده، مهارت‌هایی مانند #SQL، #Python، #AWS، #Azure و #Spark جزو پرجستجوترین مهارت‌ها هستند. این داده‌ها به کاربران کمک می‌کند تا بدانند چه مهارت‌هایی در بازار کار بیشتر مورد توجه قرار دارند و بر چه زمینه‌هایی تمرکز بیشتری داشته باشند. همچنین سایت دارای بخشی برای مشاهده روند تغییرات محبوبیت مهارت‌ها در طول زمان است که تصویری دقیق‌تر از تحولات بازار ارائه می‌دهد. 📈

بر اساس تحلیل‌های ارائه‌شده در DataNerd.tech، پردرآمدترین مشاغل 💵 به ترتیب شامل مهندس نرم‌افزار، مهندس یادگیری ماشین و مهندس داده هستند.

از سوی دیگر، گران‌ترین مهارت‌های 💎 بازار عبارتند از #Scala، #Spark، #Snowflake، #Java و #Python که توجه به آن‌ها می‌تواند در افزایش فرصت‌های شغلی و درآمد تأثیر قابل توجهی داشته باشد.

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


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


#مهندسی_داده #تحلیل_داده #علم_داده #بازار_کار_داده #هوش_مصنوعی #Data_Engineering #Data_Science #Data_Analytics #Machine_Learning #Career_Growth
👍2
چطور از هوش مصنوعی در برنامه‌نویسی حرفه‌ای‌تر استفاده کنیم؟
در دنیای امروز، ابزارهای هوش مصنوعی مثل Cursor و Copilot باعث شده‌اند فکر کنیم ساخت هر پروژه‌ای ساده‌تر از همیشه شده‌ است.
اما خیلی زود با یک واقعیت روبرو می‌شویم: اگر بدون طراحی درست و مدیریت دقیق از AI کمک بگیریم، خیلی راحت در چرخه‌ی فرساینده‌ی خطاها و آشفتگی گم می‌شویم.
🔁 این چرخه‌ی آزاردهنده معمولا اینطور شروع می‌شود:

از عامل هوشمند می‌خواهیم مشکلی را حل کند.

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

دوباره درخواست می‌کنیم،
#AI قول می‌دهد بهتر شده، ولی مشکل جدیدی ظاهر می‌شود.

خطای جدید رفع می‌شود، ولی خطای قبلی برمی‌گردد!

در نهایت حتی یادمان می‌رود دقیقا چه چیزی می‌خواستیم بسازیم...


برای بهبود این تجربه‌ی فرساینده و جلوگیری از این چرخه‌ی غیرحرفه‌ای، امروز خلاصه‌ای از پست آموزنده‌ی آقای Peter Wooldridge در لینکدین را با هم مرور می‌کنیم و ادامه متن الهام گرفته از پست ایشان است:
https://www.linkedin.com/feed/update/urn:li:activity:7321534312430854146/

✏️ برای جلوگیری از این مسیر فرسایشی و ساختن یک تجربه‌ی حرفه‌ای‌تر، چند اصل ساده ولی حیاتی وجود دارد:

🔁 قبل از هر کاری طراحی واضح انجام بده: دقیقا مشخص کن چه چیزی می‌خواهی و چه بخش‌هایی در پروژه وجود دارد.

به جای اینکه مستقیم درخواست کدنویسی بدهی، سوالات روشن و هدفمند بپرس. مثلا: "بهترین روش برای مدیریت خطاهای API چیست؟"

📜 اگر از Cursor استفاده می‌کنی، حتما یک فایل .cursorrules بساز تا هوش مصنوعی بداند کی باید فکر کند و کی باید کدنویسی کند.

( از آدرس زیر قوانین cursor‌ را بردارید و آنرا به بخش قوانین در تنظیمات cursor اضافه کنید :https://x.com/0xDesigner/status/1915152801761812783 )

🌐 برای دسترسی سریع به مستندات، از دستور @web استفاده کن.

🛠 هنگام دیباگ کردن، به جای فرمان دادن، با سوال پیش برو. هدایت کردن بهتر از تحمیل کردن است.


اگر تغییرات بد پیش رفت، ریورت کن، به عقب برگرد، و برنامه را ساده‌تر بچین.

🔁 در صورت نیاز، بدون ترس پروژه را بازطراحی کن و با یک طرح ساده‌تر دوباره شروع کن.

توضیحات فوق به همراه شکل‌های مورد نیاز از تنظمیات cursor در این آدرس از توئیتر قابل مشاهده است :
https://x.com/0xDesigner/status/1915152801761812783

🧠 در مورد Copilot هم بهتر است بدانیم:
دستیار Copilot برای پاسخ‌های سریع و تولید اولیه‌ی کد فوق‌العاده است.
اما استفاده‌ی بدون مدیریت از حالت Agent آن می‌تواند خیلی سریع پروژه را وارد آشفتگی کند.
🎯 توصیه‌ی کاربردی: بیشتر از بخش Ask استفاده کن، و تنها زمانی سراغ حالت Agent برو که طراحی، تقسیم وظایف و هدف هر بخش را از قبل مشخص کرده باشی.

پس یادت باشد:
اول خوب طراحی کن → سوال دقیق بپرس → بعد از قدرت AI برای ساختن استفاده کن.
وگرنه به راحتی در یک حلقه‌ی بی‌پایان از خطاها و دوباره‌کاری گیر می‌کنی!
👍5