مهندسی داده
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 عکس نگار
ده سال با مهندسی داده (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
چرا دریافت نتایج کوئری گاهی اینقدر طول می‌کشد؟

با پیشرفت روزافزون فناوری دیتابیس‌ها، ضروری است که روش‌ها و پروتکل‌های انتقال داده نیز به‌روزرسانی شوند تا بتوان از تمامی ظرفیت و توان پردازشی این سیستم‌ها به‌طور مؤثر بهره‌برداری کرد.

فرض کنید به عنوان یک تحلیلگر داده، با استفاده از درایور ODBC به ClickHouse متصل شده‌اید و دستوری برای بازیابی ۱۰ هزار رکورد خاص اجرا کرده‌اید. دستور را ارسال می‌کنید و منتظر نتایج می‌مانید، اما متوجه می‌شوید که زمان دریافت نتایج به طرز معناداری بیشتر از زمانی است که همان دستور را مستقیماً در خط فرمان ClickHouse اجرا کرده‌اید. 😕 این تفاوت زمانی از کجا می‌آید و چرا برای کاربرانی مثل شما که با داده‌های بزرگ کار می‌کنید، مهم است؟

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

🚀 فرمت Arrow: استانداردی برای پردازش سریع داده‌های تحلیلی
سال‌هاست که Apache Arrow به عنوان یک فرمت درون حافظه برای کار با داده‌های ستونی، به یک استاندارد رایج برای پردازش سریع و بهینه داده‌های تحلیلی تبدیل شده است. Arrow با طراحی خاص خود، سربار ناشی از تبدیل داده‌ها بین فرمت‌های مختلف را حذف می‌کند و امکان پردازش موازی را فراهم می‌آورد. این یعنی شما می‌توانید داده‌های بزرگ را با سرعت بیشتری تحلیل کنید. 📊 این فرمت با ابزارهای محبوبی مثل Pandas، Apache Spark و Dask سازگار است و به همین دلیل، برای جامعه داده به یک انتخاب ایده‌آل تبدیل شده است.

حالا تصور کنید اگر بتوانید همین سرعت و کارایی را مستقیماً در ارتباط با دیتابیس‌ داشته باشید. ADBC دقیقا با همین هدف و توسط پروژه محبوب Arrow توسعه داده شد.

🌟 کتابخانه ADBC: راهکاری مدرن برای ارتباط سریع با دیتابیس‌ها
اینجاست که ADBC (Arrow Database Connectivity) وارد می‌شود! ADBC یک رابط برنامه‌نویسی کاربردی (API) مدرن است که به شما اجازه می‌دهد داده‌ها را به صورت مستقیم و در فرمت ستونی از دیتابیس‌هایی مثل ClickHouse یا حتی پستگرس دریافت کنید. با ADBC، دیگر نیازی به تبدیل‌های وقت‌گیر به فرمت ردیفی نیست—داده‌ها با همان ساختار ستونی که برای تحلیل بهینه است، به اپلیکیشن شما منتقل می‌شوند. 🚄

🎯 مزایای ADBC برای تحلیلگران و مهندسین داده
- سرعت بیشتر: حذف تبدیل‌های ردیفی، زمان دریافت داده‌ها را به شدت کاهش می‌دهد.
- پشتیبانی از استریمینگ: داده‌ها به صورت پیوسته و بدون وقفه منتقل می‌شوند.
- انعطاف‌پذیری: با دیتابیس‌های مختلف، از ClickHouse تا PostgreSQL، کار می‌کند.
- اکوسیستم کامل: یک API یکپارچه با ابزارهایی مثل Flight SQL که کار توسعه و کاربرد آنرا ساده‌تر می‌کنند.

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

#DataEngineering #Database #ADBC #ApacheArrow #BigData #PerformanceOptimization #DuckDB #PostgreSQL


منبع : https://arrow.apache.org/blog/2025/02/28/data-wants-to-be-free/
👍61
چالش‌های مهندسان داده در دنیای ذخیره‌سازی داده‌ها 🌐

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

💭 انتخاب بین سرویس‌های ذخیره‌سازی مختلف : باید تصمیم بگیرید داده‌ها را در AWS S3، GCS یا Azure Blob Storage ذخیره کنید، اما هر سرویس API خاص خودش را دارد. تغییر بین این سرویس‌ها یا مهاجرت به سرویس جدید، نیازمند بازنویسی بخش زیادی از کدهاست و زمان و منابع تیم را هدر می‌دهد.

🔄ذخیره‌سازی همزمان در فضای ابری و محلی : می‌خواهید داده‌ها را هم در فضای ابری (برای مقیاس‌پذیری) و هم در سرورهای محلی (برای بازیابی سریع) ذخیره کنید. اما هماهنگ‌سازی این دو بدون پیچیدگی و تغییرات گسترده در کدها، تقریباً غیرممکن به نظر می‌رسد.

🌍 دسترسی یکپارچه به منابع داده متنوع : داده‌های شما در سیستم‌های مختلفی مثل یک پایگاه داده کلیدمقدار مانند RocksDB، یک وب‌درایو، فضای ابری و فایل‌سیستم محلی پراکنده‌اند. (شکل را با دقت نگاه کنید) مدیریت این منابع با APIهای متفاوت، زمان توسعه را افزایش می‌دهد و پیچیدگی پروژه را بیشتر می‌کند.

🛠 کتابخانه OpenDAL چگونه این چالش‌ها را حل می‌کند؟

کتابخانه OpenDAL یک لایه دسترسی داده متن‌باز است که با ارائه یک API یکپارچه، این چالش‌ها را به حداقل می‌رساند. با OpenDAL می‌توانید به‌راحتی به سیستم‌های ذخیره‌سازی مختلف متصل شوید، بدون اینکه نیاز به بازنویسی کد یا مدیریت پیچیدگی‌های APIهای متفاوت داشته باشید.

نکته : کد ساده پایتون موجود در شکل را حتما چک کنید .

🔹 مزایای OpenDAL برای مهندسان داده:

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

صرفه‌جویی در زمان و منابع: دیگر نیازی نیست که هر بار بخواهید به یک سیستم ذخیره‌سازی جدید متصل شوید یا تغییرات عمده در کد خود ایجاد کنید. تنها با تغییر تنظیمات OpenDAL می‌توانید به منابع جدید دسترسی پیدا کنید.

پشتیبانی از چندین سرویس ذخیره‌سازی: از AWS S3، Azure Blob Storage، GCS و حتی HDFS پشتیبانی می‌کند، بنابراین هیچ محدودیتی از این بابت نخواهید داشت.

ارتقاء مقیاس‌پذیری و انعطاف‌پذیری سیستم‌های ذخیره‌سازی: OpenDAL به شما این امکان را می‌دهد که ذخیره‌سازی داده‌ها را به راحتی در سیستم‌های توزیع‌شده گسترش دهید.

🌟 آهسته و پیوسته، مهرش به دل نشسته : باز هم Rust

یکی از ویژگی‌های برجسته OpenDAL، استفاده از زبان برنامه‌نویسی Rust در توسعه آن است. در دنیای داده‌ها، جایی که پردازش حجم عظیمی از اطلاعات و اطمینان از عملکرد بهینه اهمیت دارد، Rust به‌تدریج جای خود را باز کرده است. پروژه‌هایی مانند Apache Arrow، Polars و DataFusion از Rust استفاده می‌کنند و OpenDAL نیز با بهره‌گیری از این زبان، توانسته است یک لایه دسترسی داده با کارایی بالا و قابل اعتماد ارائه دهد. Rust نه‌تنها به توسعه‌دهندگان امکان می‌دهد که ابزارهایی مقیاس‌پذیر و کارآمد بسازند، بلکه به دلیل جامعه رو به رشد و ابزارهای مدرن خود، به یکی از انتخاب‌های اصلی برای پروژه‌های متن‌باز تبدیل شده است. تا Rust که را خواهد و میلش به که باشد ...


🌟 نتیجه‌گیری:

کتابخانه OpenDAL با API یکپارچه و قابلیت‌های گسترده‌ای که ارائه می‌دهد، پیچیدگی‌های دسترسی به داده‌ها را کاهش می‌دهد و به مهندسان داده امکان می‌دهد با سرعت و کارایی بیشتری پروژه‌های خود را پیش ببرند. این ابزار، با پشتیبانی بنیاد آپاچی، آینده‌ای روشن در مهندسی داده دارد. 🌐🚀
👍5
در مورد پست بالا . نمونه کد پایتون موجود در عکس را حتما چک کنید که متوجه بشید این کتابخانه ارزشمند دقیقا چقدر می تونه ساده اما موثر باشه .
👍6