مهندسی داده
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
داستان یک مهاجرت: از الستیک سرچ به آپاچی دوریس و صرفه‌جویی ۸۰ درصدی در هزینه‌های عملیاتی🌟

در یکی از سرویس‌های 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
چرا Discord بخش‌هایی از زیرساخت خود را از Go به Rust منتقل کرده است؟🦀

در سال‌های اخیر، Rust به یکی از محبوب‌ترین زبان‌های برنامه‌نویسی در میان مهندسان ارشد نرم‌افزار و معماران سیستم تبدیل شده است. در حالی که Go به دلیل سادگی و سرعت توسعه همچنان طرفداران خود را دارد، Rust با ایمنی حافظه بی‌نظیر، عملکرد قابل پیش‌بینی و اکوسیستم پویا، به‌ویژه در سیستم‌های حساس و پرترافیک، به گزینه‌ای برتر تبدیل شده است. نمونه بارز این تغییر رویکرد، تصمیم دیسکورد برای بازنویسی سرویس کلیدی "Read States" از Go به Rust است که در مقاله‌ای توسط جسی هووارث در سال 2020 شرح داده شده است. در این پست، دلایل این مهاجرت، مزایای Rust و روند روبه‌رشد پذیرش آن در صنعت بررسی می‌شود.

لینک مقاله اصلی :
https://discord.com/blog/why-discord-is-switching-from-go-to-rust

چرا Rust؟ روند روبه‌رشد در میان مهندسان ارشد

Rust به دلیل ویژگی‌های منحصربه‌فردش به‌سرعت در حال جایگزینی Go در پروژه‌های پیچیده است. مهندسان ارشد به دلایل زیر به این زبان روی می‌آورند:

ایمنی حافظه و هم‌زمانی در زمان کامپایل: Rust با سیستم مالکیت (Ownership) و Borrow Checker، خطاهایی مانند استفاده پس از آزادسازی (Use-After-Free) یا شرایط رقابتی (Data Races) را در زمان کامپایل حذف می‌کند. این ویژگی برای پروژه‌های حساس مانند runtime امن IoT تیم Azure مایکروسافت حیاتی بود، جایی که وقفه‌های ناشی از GC یا باگ‌های هم‌زمانی قابل‌تحمل نبودند.
عملکرد پایدار و بدون افت: بدون نیاز به جمع‌آوری زباله (GC)، Rust باینری‌های Native تولید می‌کند که عملکردی قابل پیش‌بینی دارند. این ویژگی در سرویس‌های پرترافیک مانند Read States دیسکورد، تاخیرهای لحظه‌ای را حذف کرد.
نگه‌داری بلندمدت: ابزارهایی مانند Cargo، پیام‌های خطای دقیق و استانداردهای کدنویسی قوی، کدهای Rust را خوانا و پایدار نگه می‌دارند، که در پروژه‌های طولانی‌مدت ارزشمند است.
اکوسیستم پویا: crates.io با رشد بیش از 2.1 برابر در سال و بیش از 430 میلیون دانلود در یک روز در سال 2024، نشان‌دهنده بلوغ کتابخانه‌های Rust در حوزه‌هایی مانند WebAssembly، بلاک‌چین و سیستم‌های ابری است.
پذیرش گسترده در صنعت: پروژه‌هایی مانند Firecracker (آمازون)، Solana (بلاک‌چین) و سیستم‌های IoT مایکروسافت، Rust را به دلیل ایمنی و کنترل دقیق انتخاب کرده‌اند.

سرویس Read States دیسکورد: چالش‌های Go

سرویس Read States در دیسکورد وظیفه ردیابی وضعیت خوانده شدن پیام‌ها و کانال‌ها را بر عهده دارد. این سرویس در هر اتصال، ارسال یا خواندن پیام فعال می‌شود و باید تاخیری بسیار پایین داشته باشد تا تجربه کاربری روان بماند. نسخه Go این سرویس در اکثر مواقع سریع بود، اما هر چند دقیقه با تاخیرهای ناگهانی (Latency Spikes) مواجه می‌شد که به مدل حافظه و GC مربوط بود.

مشکلات Go:
ساختار داده و مقیاس: Read States شامل میلیاردها شیء است که برای هر کاربر و کانال یک نمونه دارند. این اشیاء در یک کش LRU با میلیون‌ها نمونه ذخیره می‌شوند و صدها هزار به‌روزرسانی در ثانیه دارند.
جمع‌آوری زباله: در Go، حافظه پس از اخراج از کش بلافاصله آزاد نمی‌شود. GC هر 2 دقیقه یک‌بار اجرا می‌شود و کل کش را اسکن می‌کند، که باعث تاخیرهای قابل‌توجه می‌شد.
تلاش‌های بهینه‌سازی: تنظیم درصد GC بی‌اثر بود، زیرا تخصیص حافظه به اندازه کافی سریع نبود. کاهش اندازه کش LRU تاخیرهای GC را کم کرد، اما به دلیل افزایش بارگذاری از پایگاه داده Cassandra، تاخیرهای 99th Percentile افزایش یافت.
با وجود بهینه‌سازی‌های متعدد، عملکرد Go همچنان ناکافی بود. دیسکورد که پیش‌تر از Rust در بخش‌هایی مانند کدگذاری ویدئو (Go Live) و NIF‌های Elixir استفاده کرده بود، تصمیم گرفت این سرویس را به Rust منتقل کند.

✴️ ورود Rust به صحنه

تیم Discord پیش‌تر در بخش‌هایی مثل رمزنگاری و پردازش ویدئو از Rust استفاده کرده بود، و تصمیم گرفت یک نسخه‌ی کامل از Read States را با Rust بازنویسی کند.

📊 نتایج شگفت‌انگیز بودند:

بدون GC → مدیریت حافظه در زمان کامپایل (مدل Ownership)

تأخیر یکنواخت‌تر → حذف spikes ناشی از GC

ایمنی حافظه در زمان کامپایل → بدون نیاز به چک‌های runtime

پشتیبانی قوی از async → با استفاده از tokio و async/await




📈 نتایج نهایی:

بهبود چشمگیر درصدهای ۹۹٪ و ۹۹.۹٪ در زمان پاسخ‌دهی

تاخیر: تاخیرهای دوره‌ای حذف شدند، میانگین زمان پاسخ به میکروثانیه و حداکثر زمان برای @mentions به میلی‌ثانیه رسید.

منابع: مصرف CPU و حافظه به‌طور چشمگیری کاهش یافت.

افزایش ظرفیت کش: برخلاف Go، افزایش ظرفیت کش LRU به 8 میلیون Read State عملکرد را بهبود داد، زیرا Rust نیازی به GC نداشت.


🧠 جمع‌بندی برای مهندسین نرم‌افزار/داده:
👍3
ادامه از پست قبل :

زبان Rust به‌دلایل زیر به انتخاب مهمی برای سیستم‌های mission-critical تبدیل شده است:

🔹 مدیریت حافظه بدون GC

🔹 پرفورمنس بالا و قابل پیش‌بینی

🔹 ایمنی حافظه و هم‌زمانی در زمان کامپایل

🔹 اکوسیستم async در حال رشد (tokio، actix و...)


🏢 شرکت‌هایی مثل AWS، Microsoft، Discord با مهاجرت به Rust، این مسیر را هم فنی و هم راهبردی می‌دانند.



💡 اما باید واقع‌بین بود:

⚠️ اکوسیستم Rust هنوز به بلوغ کامل نرسیده

⚠️ منحنی یادگیری بالا دارد

⚠️ توسعه آن نسبت به Go و Python سخت تر است.



اما در حوزه‌هایی مثل:

🚀 طراحی زیرساخت داده

🔁 پایپ‌لاین‌های پردازش مقیاس‌پذیر

💡 سامانه‌های real-time و سنگین


زبان Rust یک انتخاب اجتناب ناپذیر شده است.

در صنعت نیز، Rust در پروژه‌هایی مانند Firecracker، Solana و سیستم‌های IoT مایکروسافت به دلیل ایمنی و عملکرد بالا پذیرفته شده است. به گفته یکی از متخصصان:

«نبوغ Go در داشتن GC است. نبوغ Rust در این است که به آن نیازی ندارد.»

مهاجرت سرویس Read States از Go به Rust نمونه‌ای موفق از پذیرش فناوری‌های نوظهور برای حل مشکلات عملکرد است. Rust با حذف تاخیرهای GC، بهبود عملکرد و ارائه ایمنی حافظه، تجربه کاربری بهتری برای دیسکورد فراهم کرد. در دنیایی که امنیت، عملکرد و قابلیت اطمینان اهمیت روزافزونی دارند، Rust نه‌تنها یک انتخاب خاص، بلکه استانداردی جدید در معماری نرم‌افزار است. در دنیای مهندسی داده، که سرعت، پایداری و کنترل منابع اهمیت بالایی دارد، Rust می‌تواند مزایای چشم‌گیری ارائه دهد. این زبان در حال تبدیل شدن به یکی از اجزای کلیدی زیرساخت‌های داده‌ای نسل جدید است — نه فقط به‌عنوان زبان سیستم‌نویسی، بلکه به‌عنوان پلتفرمی برای ساخت سامانه‌های سریع، ایمن و مقیاس‌پذیر.
👍4
کتاب تجزیه و تحلیل داده پیشرفته با PySpark
آدرس خرید:
yun.ir/km851f
👍3
چرا مایکروسافت برای Clarity, دیتابیس تحلیلی کلیک‌هوس را برگزید؟

این پست ترجمه‌ای است از پست رسمی تیم ClickHouse درباره انتخاب این پایگاه داده قدرتمند توسط مایکروسافت.
پست اصلی :
https://www.linkedin.com/posts/clickhouseinc_when-microsoft-made-clarity-free-for-everyone-activity-7325580280390451200-fV_M

زمانی که مایکروسافت ابزار Clarity را به‌صورت رایگان برای عموم عرضه کرد، می‌دانست که باید این سرویس را به سرعت و در مقیاسی عظیم گسترش دهد — پردازش صدها تریلیون رویداد، صدها پتابایت داده، و میلیون‌ها پروژه در سطح جهانی.


برای چنین زیرساختی، انتخاب موتور تحلیلی بسیار مهم بود.
مایکروسافت پس از ارزیابی گزینه‌هایی مانند Elasticsearch و Apache Spark، در نهایت با تحقیقاتی گسترده و تست‌های متعدد، ClickHouse را برگزید.

چرا ClickHouse؟

در اکتبر ۲۰۲۰، Clarity با ClickHouse در قلب خود راه‌اندازی شد. این تصمیم حاصل هفته‌ها آزمایش، بررسی‌های عمیق، سنجش هزینه‌ها و عملکردها، و انتخابی مبتنی بر داده بود.

دلایل اصلی:

📥 عملکرد بارگذاری (Ingestion): موتور MergeTree در ClickHouse، نرخ ورودی بسیار بالایی را پشتیبانی می‌کند که کاملاً با نیاز بار عظیم Clarity هم‌خوانی دارد.
عملکرد کوئری: پرس‌وجو روی میلیاردها ردیف در کسری از ثانیه، با کارایی فوق‌العاده. این عملکرد سریع، نیاز به منابع پردازشی بیشتر را حذف و هزینه‌ها را کاهش می‌دهد.
💾 بهره‌وری در ذخیره‌سازی: ساختار ستونی و فشرده‌سازی پیشرفته، موجب صرفه‌جویی چشم‌گیر در فضای دیسک می‌شود. امکان تعریف دیسک‌های گرم و سرد نیز برای کاهش بیشتر هزینه‌ها فراهم است.
📈 مقیاس‌پذیری افقی: ClickHouse به‌صورت master-master توزیع شده و از replication پشتیبانی می‌کند. این یعنی مقیاس‌پذیری روان و آسان هنگام افزایش ترافیک.
🤝 جامعه‌ی متن‌باز و فعال: انتشار منظم نسخه‌ها، پاسخ‌گویی سریع در GitHub و تلگرام، و پشتیبانی قدرتمند. جالب‌تر اینکه تیم مایکروسافت نیز به پروژه کمک کرده و نام خود را در جدول system.contributors ثبت کرده‌اند!

و در نهایت، همان‌طور که در گزارش رسمی مایکروسافت آمده است:

> Compared to our POC system, ClickHouse outperformed Elastic Search and Spark in every aspect. Heat map generation became an instantaneous task to do, and it was even orders of magnitude cheaper to run. This is the reason why many products have migrated from Elastic Search to ClickHouse, experiencing significant enhancements in their services as a result.

آدرس مقاله اصلی مایکروسافت :
https://clarity-blogs-hbh0gkgebxgwfkgd.westus2-01.azurewebsites.net/why-microsoft-clarity-chose-clickhouse/

#ClickHouse #Microsoft #Clarity #داده_های_انبوه #تحلیل_داده #پایگاه_داده #BigData #DataEngineering #ElasticSearch #Spark #CloudArchitecture #OpenSource #مقیاس‌پذیری #StorageOptimization #DatabasePerformance #DistributedSystems
3🔥1
معرفی یک پروژه متن‌باز آموزشی : پایپ‌لاین بلادرنگ داده‌های رمزارز
پروژه‌ای ارزشمند و با اهداف آموزشی توسط آقای عارف فرزانه توسعه داده شده است؛ یک پایپ‌لاین داده‌ای مقیاس‌پذیر و بلادرنگ برای دریافت، پردازش و تحلیل قیمت رمزارزها در زمان واقعی.
این پروژه با هدف آموزش و توسعه ابزارهای تحلیل بلادرنگ طراحی شده و به‌صورت متن‌باز در اختیار علاقه‌مندان قرار گرفته است.

ویژگی‌های فنی پروژه:
استفاده از Quix Streams در پایتون برای پردازش جریان داده‌ها

بهره‌گیری از Redpanda (سازگار با Kafka) برای انتقال داده با کارایی بالا

استفاده از Docker جهت کانتینرسازی و اجرای ماژولار

محاسبه تحلیل‌های بلادرنگ مانند میانگین متحرک

دریافت زنده قیمت رمزارزها از API سرویس CoinLore

معماری مقاوم در برابر خطا با قابلیت بازیابی خودکار

طراحی ماژولار و آماده برای توسعه‌هایی نظیر هشدارهای معاملاتی و داشبوردهای بصری

دسترسی به مخزن پروژه:
github.com/ArefFarzaneh/crypto_data_pipeline
این پروژه می‌تواند مرجع مناسبی برای علاقه‌مندان به شروع پردازش داده‌های بلادرنگ، تحلیل بازار رمزارزها، و توسعه سیستم‌های معاملاتی باشد.
👍21
کلیک‌هوس عالیه... ولی همیشه بهترین انتخاب نیست!🌟

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

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

📈 در همین راستا، پروژه‌هایی مثل Apache Doris و StarRocks (که از Doris منشعب شده‌ است) در حال رشد و جلب توجه هستند. Doris به‌ویژه با اضافه‌کردن قابلیت‌هایی مثل Inverted Index برای جستجوی سریع‌تر در لاگ‌ها و پشتیبانی بومی از Joinهای چندجدولی، موفق شده نظر بسیاری از تیم‌ها را به خود جلب کند — حتی برخی از تیم‌هایی که قبلاً از Elasticsearch استفاده می‌کردند!



🛠 کلیک‌هوس ذاتاً برای پردازش‌های تک‌جدولی طراحی شده و برای پشتیبانی از کوئری‌های چندجدولی یا Joinهای پیچیده، معمولاً به راهکارهای جانبی مثل Data Virtualization نیاز دارد. این در حالی است که Doris چنین سناریوهایی را به‌صورت بومی و بهینه پشتیبانی می‌کند.

🎧 تجربه واقعی: مهاجرت Tencent Music Entertainment از ClickHouse به Apache Doris

شرکت Tencent Music Entertainment (TME) با بیش از ۸۰۰ میلیون کاربر فعال ماهانه، تصمیم گرفت معماری داده خود را بازطراحی کند. تیم مهندسی داده‌ی این شرکت با مشکلاتی مثل:

⚠️هزینه بالای ذخیره‌سازی در ClickHouse

⚠️عدم پشتیبانی از به‌روزرسانی جزئی (Partial Update)

⚠️پیچیدگی در اجرای کوئری‌های فدره بین ClickHouse و Elasticsearch

رو‌به‌رو بود.

🧭 نتیجه؟ مهاجرت به Doris

مزایای به‌دست‌آمده در این مهاجرت استراتژیک:

کاهش ۴۲٪ در هزینه ذخیره‌سازی

کاهش ۴۰٪ در هزینه توسعه

تعریف یک لایه معنایی (Semantic Layer) برای مدیریت یکپارچه KPIها و تگ‌ها

یکپارچگی‌ بیشتر با Kafka و Flink

کاهش تأخیر در دسترسی به داده‌ها

استفاده از Doris Light Schema Change برای تغییرات ساختاری سریع و کم‌هزینه



🔬 مقایسه عملکردی Doris و ClickHouse در تست‌های واقعی:

در یک تست میدانی منتشر شده در وبلاگ دوریس :

📌 در ۱۰ کوئری از ۱۶ کوئری، Doris تا ۳۰ برابر سریع‌تر از ClickHouse بود!

🔹 ۴ میلیارد ردیف (Join کامل و فیلترشده): Doris بین ۲ تا ۵ برابر سریع‌تر بود؛ ClickHouse با مشکلات حافظه مواجه شد.

🔹 ۲۵ میلیارد ردیف: Doris کوئری‌ها را در چند ثانیه اجرا کرد؛ ClickHouse چند دقیقه زمان برد یا حتی در جداول بزرگ (بالای ۵۰ میلیون ردیف) اجرا نشد.

🔹 ۹۶ میلیارد ردیف: Doris به‌راحتی همه کوئری‌ها را اجرا کرد؛ ClickHouse از عهده‌ی این حجم داده برنیامد.



🔍 آیا Doris سهم ClickHouse را خواهد گرفت؟

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

در مقابل، ClickHouse با وجود سرعت بالا، در سناریوهای واقعی با محدودیت‌هایی مثل ضعف در Joinهای پیچیده، ناتوانی در اجرای کوئری بین چند منبع داده مختلف بدون انتقال داده، و انعطاف‌پذیری پایین در تغییر ساختار جداول روبروست. اگر ClickHouse در این زمینه‌ها به‌روزرسانی نشود، ممکن است بخشی از جایگاه خود را در بازار سازمانی از دست بدهد.

منابع :
- https://www.pracdata.io/p/state-of-open-source-read-time-olap-2025
- https://doris.apache.org/blog/migrating-from-clickhouse-to-apache-doris-what-happened
- https://doris.apache.org/blog/Tencent-Data-Engineers-Why-We-Went-from-ClickHouse-to-Apache-Doris
👍6👎1
فرمت‌های ستونی نوین Lance: راه‌حلی برای دنیای متن‌باز هوش مصنوعی

در دنیای داده‌های بزرگ ، یکی از گرایش‌های پرطرفدار اخیر، ایجاد زیرساخت‌های ذخیره و پردازش داده به صورت متن‌باز و بدون وابستگی به دیتابیس‌های خاص است. این رویکرد با ذخیره داده‌ها در قالب فایل‌های خام مانند #Parquet و ساختاردهی به این فایل‌ها با استفاده از تکنولوژی‌هایی مثل #ApacheIceberg ، به سرعت در حال گسترش است. مفهوم #LakeHouse و پشتیبانی دیتابیس‌های تحلیلی از این ایده در محصولات تجاری 📊، نشان از پذیرش این روش دارد.

با این حال، باید توجه داشت که فرمت پارکت به طور ویژه برای دسترسی Full Scan طراحی شده است و از پیشرفت‌های اخیر دیسک‌های جدید به‌طور کامل بهره نمی‌برد. همچنین برای ورک‌لودهای هوش مصنوعی 🤖 که نیاز به دسترسی تصادفی دارند، این فرمت چندان بهینه نیست. بنابراین، اگر قصد گسترش این ایده در دنیای هوش مصنوعی را داریم، به نگاه و استانداردهای جدید نیازمندیم.

📄 در مقاله‌ای که اخیراً تیم LanceDB منتشر کرده، فرمت جدیدی به نام Lance معرفی شده که به‌طور خاص برای ورک‌لودهای هوش مصنوعی طراحی شده است. این فرمت در مقایسه با پارکت، عملکرد دسترسی تصادفی را تا ۶۰ برابر سریع‌تر 🚀 ارائه می‌دهد و به‌ویژه برای تحلیل‌های پیچیده و ذخیره‌سازی داده‌های بزرگ، انتخاب مناسبی به‌نظر می‌رسد. خلاصه مقاله را در ادامه با هم مرور می‌کنیم.
آدرس مقاله : https://arxiv.org/pdf/2504.15247 - آوریل ۲۰۲۵

قالب نوین Lance از LanceDb
فرمت Lance که توسط LanceDB معرفی شده، برای حل مشکلات فرمت‌های سنتی مانند Parquet طراحی شده است. ویژگی‌های برجسته این فرمت عبارتند از:

ساختار انکودینگ متفاوت: Lance با دو نوع انکودینگ، دسترسی تصادفی را سریع‌تر ⚡️ و اسکن کامل را بهینه‌تر 📊 می‌کند.
این انکودینگ‌ها شامل:
🛠 انکودینگ مبتنی بر عرض داده برای دسترسی تصادفی سریع‌تر 🔍
🛠 انکودینگ ساختاری برای داده‌های پیچیده مانند لیست‌ها و بردارها 📚
🛠 بهینه‌سازی برای NVMe: لنس از پهنای باند NVMe به‌طور بهینه استفاده می‌کند و عملکردی تا ۶۰ برابر بهتر از Parquet در دسترسی تصادفی دارد ⚡️.
تعادل بین دسترسی تصادفی و اسکن کامل: برخلاف Parquet که برای اسکن کامل بهینه شده، Lance تعادلی را برای دسترسی سریع به داده‌های خاص و همچنین اسکن کل ستون فراهم می‌کند .
پشتیبانی از ورک‌لودهای هوش مصنوعی: Lance به‌ویژه برای جستجوهای تمام‌متن 📑، جستجوهای برداری 📍 و آموزش مدل‌های یادگیری ماشین بهینه‌سازی شده است 🤖.

نتایج کلیدی:
عملکرد دسترسی تصادفی: تا ۶۰ برابر سریع‌تر از Parquet ⚡️.
مصرف RAM: به‌طور چشمگیری کاهش یافته که برای دیتاست‌های بزرگ 🏋️‍♂️ مهم است.
مقایسه با NVMe: عملکرد بهینه با استفاده از سخت‌افزار مدرن 💻.

جمع‌بندی:
فرمت Lance یک راه‌حل قدرتمند برای ورک‌لودهای مدرن در حوزه ایجاد ساختارهای ذخیره و بازیابی داده‌ها با فرمت باز و بدون وابستگی به ابزارها و دیتابیس‌ها، به‌ویژه در حوزه هوش مصنوعی است 🤖. با بهینه‌سازی برای دسترسی تصادفی و پشتیبانی از داده‌های پیچیده 🔗، Lance می‌تواند جایگزینی عالی برای Parquet در این حوزه باشد، به‌خصوص در کاربردهایی که سرعت و کارایی اهمیت دارند 🚀.
ایده این نوشتار از این پست لینکدین گرفته شده است : https://www.linkedin.com/posts/dipankar-mazumdar_lakehouse-dataengineering-softwareengineering-activity-7326626194622197761-hrHy/
👍3