مهندسی داده
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
معرفی رسمی ClickStack – استک Observability اپن‌سورس بر پایه ClickHouse

سال‌ها بود که با وجود قدرت بالای ClickHouse در ذخیره و کوئری‌گیری سریع داده‌ها، جای یک راه‌حل Observability واقعی در این اکوسیستم حس می‌شد.

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

اما حالا اوضاع فرق کرده.

با خرید HyperDX در ابتدای سال 2025، کلیک‌هوس قدم بزرگی در این حوزه برداشت و اخیرا از ClickStack رونمایی کرد:

یک استک کامل، اپن‌سورس و بسیار سریع برای Observability – ساخته‌شده بر قلب تپنده‌ی ClickHouse. ❤️‍🔥

آدرس : https://clickhouse.com/use-cases/observability

📦 مجموعه ابزار ClickStack چیست؟

🔹 یک پلتفرم سبک و قدرتمند برای مانیتورینگ و دیباگ

🔹 سازگار با OpenTelemetry

🔹 شامل رابط کاربری HyperDX، کلکتور سفارشی، و ClickHouse

🔹 آماده برای محیط‌های تولیدی، با نصب آسان و تجربه‌ای روان برای تیم‌ها


💡 چرا این اتفاق مهمه؟


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


ویژگی‌های جذاب ClickStack:
جستجوی بسیار سریع در لاگ‌ها و تریس‌ها

تجزیه‌وتحلیل داده‌های عظیم بدون نیاز به SQL

مشاهده زنده‌ی لاگ‌ها و بازپخش جلسات

پشتیبانی کامل از JSON و schemaهای پویا

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

طراحی‌شده برای کار با داده‌های با کاردینالیتی بالا

هشداردهی، تحلیل روند و شناسایی ناهنجاری


🧱 معماری ClickStack

🎯 ClickHouse: قلب پردازش تحلیلی

🎯 OpenTelemetry Collector: جمع‌آورنده‌ی داده‌ها با ساختار بهینه

🎯HyperDX UI: رابط کاربری مدرن برای مشاهده و کاوش داده‌ها

می‌تونید این اجزا رو مستقل یا به‌صورت یکپارچه استفاده کنید. نسخه مبتنی بر مرورگر HyperDX UI هم در دسترسه که می‌تونه به استقرارهای موجود کلیک‌هوس متصل بشه – بدون نیاز به زیرساخت اضافه.


📚 طراحی ClickStack بر اساس چند اصل ساده شکل گرفته:


📌نصب سریع و بدون پیچیدگی

📌پشتیبانی از SQL و Lucene-style search برای راحتی توسعه‌دهنده‌ها

📌دید کامل از سیستم از سشن کاربر تا کوئری دیتابیس

📌سازگاری کامل با اکوسیستم OpenTelemetry

📌و مهم‌تر از همه: اپن‌سورس، قابل‌توسعه و شفاف


🎯 برای همه‌ی تیم‌هایی که دنبال یک راه‌حل سریع، منعطف و قابل‌اتکا برای Observability هستند، حالا یک گزینه جامع و بسیار سریع و در عین حال سبک و مقیاس پذیر داریم.


اگر از ClickHouse استفاده می‌کنید، می‌توانید به راحتی به ClickStack مهاجرت کنید و یا حداقل آنرا امتحان کنید.

#ClickStack #ClickHouse #Observability #OpenTelemetry #DevOps #SRE #OpenSource #HyperDX #MonitoringTools #DataEngineering
👍4
پردازش ۱.۲ میلیون پیام در ثانیه با Kafka و Go — معماری سبک اما حرفه‌ای 🎯
وقتی نرخ ورود داده به میلیون‌ها پیام در ثانیه می‌رسد، عامل تعیین‌کننده در یک معماری بهینه و سریع و موثر، نه ارتقای پرهزینه‌ی سخت‌افزار است و نه تکیه بر زیرساخت‌های سنگین ابری، بلکه یک طراحی دقیق، ساده و هوشمندانه است که می‌تواند تفاوت واقعی را رقم بزند.
📖 اخیراً با مقاله‌ای مواجه شدم که دقیقاً همین رویکرد را نشان می‌داد: تیمی که با استفاده از مفاهیم سبک‌وزن مانند goroutine در Go و چند تصمیم مهندسی‌شده، توانسته بودند تنها با یک سخت‌افزار معمولی، بیش از ۱ میلیون پیام در ثانیه را به‌صورت پایدار پردازش کنند.
در این پست، به مرور نکات کلیدی این معماری ساده اما تأثیرگذار می‌پردازیم — روایتی کاربردی از دنیای مهندسی داده و سیستم‌های توزیع‌شده.
📄 مقاله اصلی:
Kafka at 1M Messages/Second with Go – Our Exact Pipeline Setup 👉 https://freedium.cfd/https://medium.com/@harishsingh8529/kafka-at-1m-messages-second-with-go-our-exact-pipeline-setup-aa2c5473b139

📦 چالش‌ها:
⚠️هجوم سنگین داده‌ها از دستگاه‌های IoT و کاربران
⚠️نیاز به پردازش بلادرنگ و ارسال همزمان به چند سرویس
⚠️تضمین پایداری، مانیتورینگ دقیق و ریکاوری خودکار در خطا

🛠 مکانیزم‌هایی که این معماری را ممکن کردند:
کامیت دستی offsetها:
تأیید دریافت فقط زمانی انجام می‌شود که پیام کاملاً و با موفقیت پردازش شده باشد — جلوگیری از گم‌شدن یا پردازش تکراری داده‌ها.
مکانیزم Worker Pool کنترل‌شده با goroutine:
به‌جای ایجاد goroutine برای هر پیام، یک استخر ثابت از goroutineها (به ازای هر پارتیشن کافکا) با طول کانال مشخص و محدود، تعریف شده است که پیام‌ها را موازی اما کنترل‌شده پردازش می‌کنند.
یک Worker Pool به ازای هر پارتیشن Kafka:
مثلاً با ۱۰ پارتیشن و ۵ goroutine برای هر پارتیشن، در مجموع ۵۰ goroutine داریم — بدون هم‌پوشانی، بدون رقابت اضافه.
الگوی Dispatcher برای جداسازی دریافت از پردازش:
- بخش اول: فقط دریافت پیام و ارسال به کانال داخلی (یک کانسیومر به ازای هر پارتیشن)
- بخش دوم: پردازش پیام از صف به کمک Worker Pool
دسته بندی پیام ها یا Batching در ارسال خروجی:
پیام‌های پردازش‌شده به‌صورت گروهی ارسال می‌شوند، مثلاً به دیتابیس یا تاپیک‌های دیگر Kafka. این کار فشار ارتباطی را کاهش داده و throughput را بالا برده است.
مکانیزم Backpressure هوشمند:
با محدود کردن ظرفیت صف‌ها، اگر سیستم تحت فشار شدید قرار گیرد، مصرف از Kafka موقتاً کند یا متوقف می‌شود تا منابع آزاد شوند. این مکانیزم، از overload جلوگیری کرده و سیستم را در حالت پایدار نگه می‌دارد.
مانیتورینگ دقیق با Prometheus و Grafana:
شاخص‌هایی مثل تأخیر پردازش، consumer lag و مصرف CPU به‌صورت لحظه‌ای مانیتور می‌شوند — برای تنظیم سریع و واکنش فوری.

📊 نتایج:
- نرخ پردازش: ۱.۲M msg/sec
- تأخیر کل مسیر: <۳ms
- مصرف CPU: ۹۰٪ (پایدار و قابل پیش‌بینی)

💡 نکات مهم برای مهندسان داده و سیستم‌های توزیع‌شده:
🔹طراحی درست مهم‌تر از افزایش منابع
🔹 طراحی commit دقیق، batching و backpressure = ستون‌های یک سیستم مقاوم
🔹تفکیک دریافت/پردازش + تقسیم کار بین پارتیشن‌ها = مقیاس‌پذیری مؤثر
🔹مانیتورینگ لحظه‌ای = پاسخ سریع به فشارها و خطاها

#Kafka #GoLang #DataEngineering #HighThroughput #Concurrency #RealTime #ScalableArchitecture #مهندسی_داده #سیستم_توزیع_یافته #معماری_مقیاس‌پذیر
کدام زبان: Rust یا Go؟ نگاهی دوباره از دل تجربه‌ی واقعی

چند وقت پیش مطلبی نوشتم با عنوان «آینده‌ی Rust در مهندسی داده» و یک مطلب دیگر در خصوص مهاجرت بخشی از کدهای #GO در دیسکورد به Rust. هنوز هم به آن حرف‌ها باور دارم:

بخش زیادی از ابزارهای آینده‌ی این حوزه یا با #Rust بازنویسی می‌شوند یا به شکل native با آن توسعه می‌یابند — دلیلش هم مشخص است: سرعت بالا، کنترل دقیق حافظه، و ویژگی‌هایی مثل «zero-cost abstractions»


اما بعد از چند ماه کار عملی با هر دو زبان، دیدگاهم واقع‌گرایانه‌تر شده است. Rust قدرت بالایی دارد، اما پیچیدگی توسعه و زمان بالای یادگیری، آن را برای همه‌ی پروژه‌ها مناسب نمی‌کند. Go در مقابل ساده، سریع، و برای توسعه‌ی روزمره بسیار کارآمد است.

🎯 یکی از تجربه‌های مهم برایم، پروژه‌ای بود که در آن یک تیم، یک سرویس واقعی را با سه زبان Rust، Go و Node.js پیاده‌سازی و در شرایط واقعی با ترافیک زنده تست کرد. تجربه‌ای که در زیر نتایج آنرا با هم مرور می‌کنیم. (لینک: https://freedium.cfd/https://medium.com/@kanishks772/we-didnt-benchmark-it-we-went-to-war-with-it-go-vs-rust-vs-node-at-1m-users-60565cd59b1f)

📌سرویسی که ساختند، شامل احراز هویت، پیام‌رسانی بلادرنگ، و آپلود فایل بود — چیزی شبیه به ستون فقرات یک اپلیکیشن پیام‌رسان. پیاده‌سازی اولیه با Node.js بود، اما دیگر جواب نمی‌داد: نشت حافظه، جهش‌های CPU، و زمان پاسخ‌هایی که باعث rage-quit کاربران می‌شد.

📚به‌جای فرضیه‌سازی، تیم دست‌به‌کار شد: همان سرویس را با Go و Rust هم نوشت و ترافیک را به‌طور مساوی بین هر سه تقسیم کرد. نتیجه چه شد؟

«Rust عملاً از نظر عملکرد، رقبا را پشت سر گذاشت.» اما آنچه این تیم یاد گرفت، چیزی بود که اغلب در بنچمارک‌ها دیده نمی‌شود:

عملکرد بالا، بدون بهره‌وری، کافی نیست.

⚠️توسعه با Rust 40٪ زمان بیشتری می‌برد. اشکال‌زدایی درگیر borrow checker می‌شد و اضافه‌کردن یک فیچر ساده، به جنگ با سیستم Typing منتهی می‌گردید.

در مقابل، Go سرعت توسعه‌ی بالایی داشت، کتابخانه استاندارد کافی و کاربردی، و راه‌اندازی ساده. هرچند کمی از Rust کندتر بود، اما برای تیم، توسعه با Go سه برابر سریع‌تر از Rust و دو برابر سریع‌تر از Node بود.


در نهایت، این تیم از هر سه زبان استفاده کرد:

🔹 Node.js برای ابزارهای مدیریتی و پروتوتایپ‌های سریع

🔹 #Go برای سرویس‌های اصلی و عمومی

🔹 #Rust برای بخش‌هایی که واقعاً performance-critical بودند


درس‌هایی از میدان نبرد

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

تجربه‌ی تیم از زبان مهم‌تر است. زبانی که تیم در آن مهارت دارد، اغلب از زبان بهتری که تیم با آن غریبه است، نتیجه‌ی بهتری می‌دهد.

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

چندزبانی بودن (polyglot) مزیت است، نه نقطه‌ضعف. گاهی بهترین راه این است که یک زبان را همه‌جا استفاده نکنیم. هر ابزار برای کاری ساخته شده.


💡 نتیجه‌گیری شخصی من


زبان Rust هنوز آینده‌ی ابزارهای مهندسی داده است — مخصوصاً در سطح زیرساخت. اما در بسیاری از پروژه‌های کاربردی، از سرویس‌های داخلی گرفته تا microserviceهای API، Go انتخابی‌ست منطقی‌تر و واقع‌گرایانه‌تر.

ما همه مثل Discord نیستیم. منابع، مقیاس و اولویت‌های تیم‌ها متفاوت‌اند.

اما مهم‌تر از انتخاب بین Rust یا Go، این است که انتخاب‌مان با چشمان باز باشد — از دل تجربه، نه فقط از روی بنچمارک‌ها یا توییت‌های ترند شده.
👍6
چرا بسیاری از تیم‌ها ORM را کنار می‌گذارند و سراغ SQL خام می‌روند؟

اخیرا در مدیوم با تعداد زیادی از مقاله‌ها مواجه می‌شوم که یک پیام مشترک دارند:

🔁 «ما #ORM را کنار گذاشتیم و به #SQL خام مهاجرت کردیم — و دیگر برنمی‌گردیم.»


نکته جالب اینجاست که این تصمیم‌ها معمولاً از سر عشق به SQL گرفته نشده‌اند، بلکه از دل دردسرهای #ORM زاده شده‌اند.

در چند مقاله‌ی اخیر که مطالعه کردم، تیم‌های مختلفی با تکنولوژی‌های مختلف (از #Java + #Postgres گرفته تا #Go + #SQLAlchemy) تجربه‌ی مهاجرت از ORM را به اشتراک گذاشته‌اند — نه فقط برای بهبود سرعت، بلکه برای بازگشت به شفافیت، کنترل و عقلانیت.


⚠️مشکل کجا بود؟ چرا ORM جوابگو نبود؟

اگرچه ORM در شروع پروژه‌ها خیلی مفید است (خصوصاً برای CRUDهای سریع و MVPها)، اما با رشد سیستم، مشکلاتی کم‌کم خود را نشان می‌دهند:

🧨معضل N+1 Query

کوئری‌هایی که ساده به نظر می‌رسند، در باطن ده‌ها یا صدها درخواست اضافه تولید می‌کنند.

🌀 کدهای پیچیده اما غیرشفاف

برای کوئری‌های پیچیده‌تر مثل Window Function، CTE یا Join چندجدولی، باید به انواع annotationها، chainهای مبهم، یا زبان‌های خاص ORM (مثل JPQL) متوسل شد — که در نهایت باز هم می‌رسیم به نوشتن SQL، فقط با دردسر بیشتر.

🔍 ضعف در دیباگ و پروفایلینگ

در ORM، به‌سختی می‌شود فهمید دقیقاً چه کوئری‌ای به دیتابیس رفته. این یعنی دیباگِ کندی‌ها تقریباً کورکورانه است.

💡 ناسازگاری با مدل واقعی داده‌ها

دیتابیس با row و index و join کار می‌کند؛ ORM با کلاس و رابطه شی‌گرایانه. این تطبیق، به‌ویژه در سیستم‌های پیچیده، منجر به کدهایی می‌شود که بیشتر شبیه «جنگیدن با ORM» هستند.


🎯چرا SQL خام یک تفاوت واقعی ایجاد کرد؟

بعد از مهاجرت، همه تیم‌ها روی این دستاوردها تأکید داشتند:

کنترل کامل

می‌دانیم چه کوئری نوشته‌ایم، چه زمانی اجرا می‌شود، و چگونه می‌توان آن را بهینه کرد.

شفافیت

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

هماهنگی بیشتر با منطق دامنه

به‌جای تعریف business logic در repository و annotation، همه‌چیز در لایه‌های مشخص خدماتی و use-case محور قرار می‌گیرد.

استفاده کامل از قدرت دیتابیس

ویژگی‌هایی مثل Window Function، CTE، JSONB و Partial Index که در ORM اغلب یا پشتیبانی نمی‌شوند یا با پیچیدگی زیاد ممکن‌اند، در SQL خام به‌راحتی قابل استفاده‌اند.

📌نگهداری و مقیاس‌پذیری چطور مدیریت شد؟

برای جلوگیری از بی‌نظمی، تیم‌ها:

- کوئری‌ها را در فایل‌های جدا و نسخه‌دار نگه داشتند

- از template و query loaderهای سبک استفاده کردند

- روی هر کوئری تست (یا حداقل EXPLAIN) نوشتند

- قواعد ساده ولی سخت‌گیرانه‌ای برای امنیت (مثل پارامترگذاری) اعمال کردند

در نتیجه، برخلاف تصور اولیه، نگهداشت SQL خام هم قابل مدیریت و حتی لذت‌بخش شد.

💡کی باید ORM را کنار گذاشت؟

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

برای پروژه‌های کوچک، MVPها یا پنل‌های ادمین، ORM عالی است.

اما در پروژه‌های داده‌محور، با ترافیک بالا، کوئری‌های پیچیده و نیاز به کنترل عملکرد، ORM به‌جای کمک، تبدیل به مانع می‌شود.


📚 جمع‌بندی

بسیاری از ما با ORMها بزرگ شده‌ایم اما آیا هنوز ORM بهترین ابزار ماست؟ یا فقط آسان‌ترین است؟

در دنیایی که عملکرد، شفافیت و کنترل ارزش بیشتری از سرعت اولیه دارند، شاید وقت آن است که دوباره به SQL خام یا ترکیب آن با ORm فکر کنیم — این بار با بلوغ بیشتر و ابزارهای بهتر.
👍51
تولد OpenSearch و قدرت بی‌مثال جامعه متن‌باز

در دنیای نرم‌افزارهای متن‌باز، گاهی تصمیمات تجاری یک شرکت می‌توانند موجی از تغییرات ساختاری در کل اکوسیستم ایجاد کنند. داستان #OpenSearch یکی از بارزترین نمونه‌های این تحولات است؛ نمونه‌ای که نشان می‌دهد چگونه جامعه، با تکیه بر اصول متن‌باز، مسیر خود را از دل یک بحران تعریف می‌کند.

تغییر لایسنس #Elasticsearch: نقطه‌ی آغاز بحران اعتماد

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

اما در ژانویه ۲۰۲۱، شرکت Elastic تصمیم گرفت مجوز پروژه را از Apache 2.0 به SSPL تغییر دهد، تصمیمی که عملاً آن را از دایره‌ی پروژه‌های کاملاً متن‌باز خارج کرد. این تغییر، نگرانی‌های جدی درباره آینده توسعه، وابستگی به فروشنده (vendor lock-in) و پایداری بلندمدت این ابزار ایجاد کرد.



⚙️ اپن‌سرچ: پاسخی جامعه‌محور به محدودیت

در واکنش، AWS نسخه ۷.۱۰ Elasticsearch را فورک کرد و پروژه متن‌باز OpenSearch را راه‌اندازی نمود. OpenSearch کاملاً آزاد است، با مجوز Apache 2.0 و سازگار با Elasticsearch 7.10. این پروژه شامل OpenSearch Dashboards به عنوان جایگزین Kibana نیز می‌شود.


امروزه، اپن‌سرچ با حمایت بنیاد لینوکس و مشارکت فعال شرکت‌هایی مانند SAP، Uber، Canonical و ByteDance، به یک پلتفرم متن‌باز واقعی و پایدار تبدیل شده است. این یک نمونه بارز از قدرت جامعه متن‌باز است که توانست پس از بحران، مسیر جدیدی را برای زیرساخت‌های جست‌وجو و تحلیل داده تعریف کند.

🧩 قابلیت‌های متن‌باز در دسترس همه

اپن‌سرچ بسیاری از امکاناتی را که قبلاً صرفاً در نسخه‌های پولی الستیک‌سرچ بود، به‌صورت رایگان و باز در اختیار کاربران قرار می‌دهد:

مدیریت چرخه عمر ایندکس‌ها (ISM)

قابلیت‌های یادگیری ماشین برای تشخیص ناهنجاری و پیش‌بینی

داشبوردهای قابل تنظیم و هشداردهی بدون قفل‌های افزونه‌ای

امنیت دقیق سطح ایندکس و کنترل دسترسی

پشتیبانی از جست‌وجوی برداری و تحلیل‌های معنایی (نسخه ۳.۰ در سال ۲۰۲۵)

📊 مهاجرت آسان و تاثیر مثبت

تجربه بسیاری از سازمان‌ها نشان می‌دهد مهاجرت از Elasticsearch 7.10 به OpenSearch بدون تغییر کد و با صرف کمترین زمان انجام می‌شود. این مهاجرت علاوه بر کاهش هزینه‌های زیرساختی تا حدود ۳۸٪، عملکرد بهتری مانند افزایش ۲۵٪ سرعت پردازش داده‌ها و کاهش مصرف حافظه را به همراه داشته است.

🚀 چشم‌انداز آینده: همگرایی جست‌وجو، هوش مصنوعی و جامعه

با نسخه ۳.۰ منتشر شده در ۲۰۲۵، OpenSearch علاوه بر امکانات سنتی، پشتیبانی قوی از جست‌وجوی برداری، ترکیب جست‌وجوی متنی و معنایی و یکپارچگی با مدل‌های زبان بزرگ (LLM) را ارائه می‌دهد. این تحولات نشان‌دهنده مسیر رو به رشد پروژه است که جامعه متن‌باز آن را هدایت می‌کند.


📌 جمع‌بندی: متن‌باز یعنی آزادی و پایداری

اپن‌سرچ فراتر از یک جایگزین فنی است؛ این پروژه تجسم قدرت جامعه متن‌باز است که با همکاری و شفافیت توانسته ابزارهایی را فراهم کند که نه تنها رایگان بلکه قابل توسعه و پایدارند.

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

نمایش تعداد بازدید یک ویدیو یا محصول در ظاهر کار ساده‌ای‌ست؛ کافی است یک فیلد view_count در دیتابیس داشته باشیم و با هر بازدید، آن را افزایش دهیم. اما هنگامی که:

📌میلیون‌ها کاربر هم‌زمان بازدید ارسال می‌کنند

📌ویدیویی مانند «Baby Shark» با 16 میلیارد بازدید دارید

📌و نیاز دارید آمار را زیر 200ms نمایش دهید

چالش‌های اساسی زیر پیش می‌آید:
⚠️مقیاس‌پذیری (Scalability): ثبت میلیون‌ها رویداد در ثانیه بدون نقطه‌ی گلوگاه

⚠️عملکرد (Latency): پاسخ به کاربر در کمتر از ۲۰۰ میلی‌ثانیه

⚠️تکرارناپذیری (Idempotency): جلوگیری از شمارش یک بازدید بیش از یک‌بار

⚠️ماندگاری داده (Durability): حفظ رویدادها حتی در صورت خرابی سرویس

⚠️دقت نهایی (Accuracy): تضمین دقت آمار با حداکثر تأخیر ۱۰ دقیقه


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

1️⃣ مدل ساده با یک دیتابیس و فیلد view_count
در ساده‌ترین حالت، یک جدول دیتابیس رابطه‌ای (مثلاً MySQL یا پستگرس) داریم که برای هر آیتم (مثلاً ویدیو) یک ردیف با فیلدی به نام view_count در آن ذخیره شده. با هر بازدید، این فیلد را با یک UPDATE افزایش می‌دهیم.
چرا مناسب است؟
- پیاده‌سازی بسیار ساده
- برای MVP یا پروژه‌های آزمایشی سریع‌ترین راه
محدودیت‌ها
- نقطه‌ی شکست واحد: اگر دیتابیس از کار بیفتد همه‌چیز متوقف می‌شود
- ظرفیت پایین: عدم توان پاسخ‌گویی به صدها هزار درخواست در ثانیه
- بدون کنترل تکراری: هر رفرش صفحه دوباره‌کاری می‌کند

2️⃣ شاردینگ (Sharding) دیتابیس
در این روش، داده‌ها را بین چند دیتابیس (شارد) تقسیم می‌کنیم.
- با کلید video_id % N، هر ویدیو به یکی از N شاردها می‌رسد
- هر آپدیت یا خواندن، تنها به شارد مربوطه هدایت می‌شود

مزایا
- توزیع بار روی چند سرور
- مقیاس‌پذیری خطی با افزایش شاردها

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

3️⃣ تجمیع در حافظه با Cache
رویدادهای بازدید ابتدا به کش (مثلاً Redis) می‌روند:
- روی هر بازدید، یک کلید یکتا (user_id:video_id) با TTL کوتاه تنظیم می‌کنیم تا تکراری نشمارد
- در حافظه، بازدیدها را جمع می‌کنیم
- هر ۱۰ دقیقه یک بار، مجموع را در دیتابیس اصلی آپدیت می‌کنیم

مزایا
- سرعت بالا: خواندن/نوشتن در حافظه زیر ۱ میلی‌ثانیه
- کاهش بار دیتابیس به دلیل آپدیت گروهی
کنترل تکراری: با TTL در Redis

معایب
- ریسک از دست رفتن داده در صورت کرش سرویس کش
- مدیریت TTL و همگام‌سازی کش با دیتابیس پیچیده

4️⃣ معماری رویدادمحور با Kafka + Flink + Redis
در این معماری، هر بازدید یک رویداد است:
-کافکا: دریافت رویداد و نگهداری آن با پارتیشن‌بندی روی video_id
- فلینک: پردازش جریانی، تجمیع هر ۱۰ دقیقه و ارسال خروجی
- ردیس: نگهداری کلیدهای یکتا برای حذف رویدادهای تکراری
- دیتابیس/Cache: ذخیره‌شماری نهایی برای پاسخ لحظه‌ای

مزایا
- مقیاس‌پذیری افقی بی‌نهایت با Kafka/Flink
- امکان بازیابی کامل رویدادها (Durability)
- کنترل تکراری با Redis
- نمایش زیر ۲۰۰ms با Cache

چالش‌ها
- پیچیدگی عملیاتی: مدیریت خوشه‌های Kafka و Flink
- تأخیر جزئی در لحظه‌های انفجاری (Viral Burst)

🎯 این معماری فقط برای شمارش بازدید ویدیو نیست!
برای لایک، کلیک تبلیغ، بازدید صفحه و حتی شمارنده تعاملات در اپلیکیشن‌های اجتماعی یا فروشگاه‌ها هم کاربرد دارد.
👍42
شمارش بازدیدها و اکشن‌های کاربر با فناوری‌های مدرن داده

در پست قبلی درباره روش‌های کلاسیک شمارش بازدید محصولات یا تماشای ویدئو صحبت کردم.

https://t.iss.one/bigdata_ir/445

به‌طور خلاصه گفتیم که در بار ترافیکی بالا، بهتر است بازدیدها را در حافظه نگهداری و جمع‌بندی کرده، سپس در بازه‌های زمانی مشخص وارد دیتابیس کنیم. همچنین به رویکرد پیشرفته‌تری با Kafka + Flink برای ایجاد بافر و بروزرسانی دوره‌ای دیتابیس اشاره شد.


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

🎯 هدف ما فقط شمارش نیست!

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

چرا؟

برای شخصی‌سازی تجربه کاربری بر اساس رفتار هر فرد

برای تحلیل عمیق روی محصولات یا ویدئوها و بهبود تجربه کاربران

پس راهکار ایده‌آل باید هم شمارش و هم ذخیره‌سازی کامل داده‌ها را پوشش دهد.


🛠 سه راهکار مدرن برای شمارش و ذخیره اکشن‌ها

1️⃣ استفاده از Cassandra / ScyllaDB و قابلیت Distributed Counter

🎯برای هر کاربر و هر محصول، یک جدول بازدید ایجاد می‌کنیم

🎯هر اکشن را در هر دو جدول ذخیره می‌کنیم (مدل داده این دیتابیس‌ها بر اساس Query طراحی می‌شود)

🎯شمارش اکشن‌ها با Distributed Counter انجام می‌شود

🎯امکان تعریف شمارنده برای بازه‌های زمانی مختلف (ساعتی، روزانه و...) وجود دارد

مزیت اصلی: مقیاس‌پذیری بالا و سرعت فوق‌العاده


2️⃣ ذخیره خام داده‌ها در قالب Apache Iceberg با AutoMQ

🎯جایگزین Kafka سنتی با AutoMQ

🎯 پیام رسان AutoMQ که دقیقا منطبق بر استاندارد کافکا است، پیام‌ها را مستقیماً در Iceberg ذخیره می‌کند

🎯شمارش با Flink + Redis انجام می‌شود

🎯امکان تحلیل بعدی رفتار کاربران با ابزارهایی مثل ClickHouse یا Spark

مزیت اصلی: فشار کمتر روی دیتابیس اصلی و نگهداری داده‌های خام برای تحلیل‌های آینده

3️⃣ استفاده از دیتابیس جریانی RisingWave – سریع، مدرن و چندکاره 🚀

دیتابیس RisingWave یک دیتابیس جریانی (Streaming Database) است که با استاندارد PostgreSQL توسعه یافته و از SQL به‌عنوان زبان اصلی پردازش داده‌های جریانی استفاده می‌کند.

📌 ویژگی‌ها و مزایا:

🎯شمارش و پردازش جریانی با SQL ساده → ایجاد Materialized Viewها برای شمارش بازدیدها و اکشن‌ها در لحظه

🎯ذخیره اکشن‌ها در S3 و Iceberg → امکان نگهداری داده‌های خام برای تحلیل‌های آینده

🎯سرعت بالا به لطف Rust → هسته سیستم با زبان Rust نوشته شده و از مزایای کارایی و مصرف کم منابع بهره می‌برد

🎯پشتیبانی از Sinkهای متنوع → خروجی مستقیم به دیتابیس‌ها، سیستم‌های پیام‌رسان، S3، Kafka و...

🎯پردازش رویدادهای پیچیده → اجرای Queryهای تحلیلی پیشرفته بر روی جریان داده بدون نیاز به ابزار جداگانه

نتیجه؟

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

📌 جمع‌بندی

این سه راهکار نسبت به روش‌های سنتی و حتی رویکرد Kafka + Flink، مدرن‌تر هستند و از فناوری‌های جدید حوزه داده بهره می‌برند.

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

#DataEngineering #StreamingData #RealTimeAnalytics #Kafka #Flink #Iceberg #ClickHouse #RisingWave #ScyllaDB #BigData #UserAnalytics #TechInnovation #RustLang #SQL
👍5
وقتی همه صندلی‌های جلوی استیج را می‌خواهند!

فرض کنید بلیت‌های یک خواننده محبوب داخلی — راس ساعت ۱۰ صبح باز می‌شوند.

در کمتر از ۱ ثانیه اول،ده‌ها هزار کاربر همزمان روی «رزرو» کلیک می‌کنند.

چالش این نیست که فقط ترافیک بالاست، بلکه:

باید از فروش همزمان و دو بار یک صندلی جلوگیری کرد (Oversell Prevention)

سیستم باید زیر ۲۰۰ میلی‌ثانیه به درخواست‌ها پاسخ دهد

تجربه کاربری بدون تأخیر و خطا باقی بماند حتی در اوج فشار


🛠 طراحی معماری فنی یک سیستم رزرو مقاوم و سریع

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

1️⃣ مدل State Machine برای هر صندلی

چرخه وضعیت هر صندلی به شکل زیر است:

AVAILABLE → RESERVED → BOOKED

📌انتخاب صندلی: وضعیت صندلی به RESERVED تغییر می‌کند و یک تایمر کوتاه (۱۰–۱۵ دقیقه) شروع می‌شود.

📌پرداخت موفق: صندلی به وضعیت BOOKED می‌رود.

📌پرداخت ناموفق یا انقضای تایمر: صندلی دوباره به AVAILABLE بازمی‌گردد.

این مدل به جلوگیری از مشکلات همزمانی (race condition) کمک می‌کند و تضمین می‌کند هر صندلی به صورت منسجم مدیریت شود.

2️⃣ قفل توزیع‌شده با Redis

وقتی کاربر صندلی را انتخاب می‌کند، سیستم با استفاده از قفل موقت Redis روی آن صندلی قفل می‌کند (TTL مشخص).

TTL قفل به صورت خودکار صندلی را در صورت بی‌فعالیتی کاربر آزاد می‌کند.

سرعت میلی‌ثانیه‌ای Redis امکان هماهنگی لحظه‌ای بین چند سرور را فراهم می‌کند، حتی در برابر میلیون‌ها درخواست همزمان.

⚠️ تنظیم TTL باید دقیق باشد تا هم از آزاد شدن زودهنگام جلوگیری شود و هم از قفل شدن بی‌دلیل.

3️⃣ کش چندلایه و همگام‌سازی با دیتابیس اصلی

ردیس به عنوان کش سریع و منبع وضعیت لحظه‌ای صندلی‌ها عمل می‌کند. وضعیت لحظه‌ای صندلی‌ها در Redis ذخیره می‌شود تا کاربران بتوانند به‌صورت بلادرنگ ببینند چه صندلی‌هایی آزادند.

اما داده‌ها باید در نهایت در دیتابیس اصلی (مثلاً PostgreSQL) به صورت پایدار ذخیره شوند.

نوشتن مستقیم همه تراکنش‌ها روی دیتابیس اصلی در لحظه ممکن است باعث کندی سیستم شود، به‌خصوص در پیک ترافیک.

برای همین:

📌رزروها ابتدا در Redis ثبت و تایید می‌شوند.

📌به صورت دسته‌ای و زمان‌بندی شده (مثلاً هر ۱ دقیقه) یا از طریق صف‌های پیام‌رسان، داده‌ها به دیتابیس اصلی منتقل و ذخیره می‌شوند.


این مدل دو مرحله‌ای، ترکیبی از Write-Through Cache و Batch Persist است که تعادل بین سرعت و پایداری را برقرار می‌کند.

🎯مزایا

سرعت واکنش بسیار بالا (زیر ۲۰۰ میلی‌ثانیه حتی در اوج ترافیک)

جلوگیری موثر از رزرو همزمان یک صندلی (Oversell)

معماری مقاوم، ماژولار و مقیاس‌پذیر

تجربه کاربری روان و قابل اطمینان

⚠️ چالش‌ها

- نیاز به تنظیم دقیق TTL قفل‌های Redis

- مدیریت همگام‌سازی داده‌ها

- هزینه راه‌اندازی کلاستر ردیس و کافکا (درصورت نیاز)


🎯 جمع‌بندی

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

باید معماری توزیع‌شده و دقیقی داشته باشیم که شامل:

مدل دقیق State Machine برای مدیریت وضعیت صندلی

قفل توزیع‌شده با Redis برای هماهنگی آنی

کش چندلایه با Write-Through و Batch Persist


💡 نکته مهم برای مهندسین داده

ترکیب هوشمندانه دیتابیس‌ها و ابزارهای مختلف می‌تواند چالش‌های روزانه زیرساخت داده را حل کند، اما باید مراقب نقاط مرزی بود؛ مثلاً هنگام آزاد شدن قفل Redis و همزمانی درخواست‌ها که نیاز به Load Testing را ضروری می‌کند.

راه حل حرفه ای تر
برای بار پردازشی بالا و هماهنگی پیچیده، Actor Model گزینه‌ای مقیاس‌پذیر و قابل‌اعتماد است. در این مدل هر Actor یک واحد مستقل با State و Mailbox خودش است و به‌جای قفل‌ها از پیام‌رسانی استفاده می‌شود، بنابراین مشکلاتی مثل Deadlock و Race Condition عملاً حذف می‌شوند. البته پیاده‌سازی آن کمی پیچیده‌تر است و تیم باید با این الگو آشنا باشد.
👍2
معرفی Kedro 1.0 — فریمورکی حرفه‌ای برای ساخت پروژه‌های داده‌ای و هوش مصنوعی 🚀

در دنیای پیچیده داده و یادگیری ماشین، مدیریت پروژه‌های داده‌ای با کدهای پراکنده و مراحل متعدد چالش بزرگی است. Kedro با ارائه ساختاری منظم، به شما کمک می‌کند تا پروژه‌های خود را قابل توسعه، قابل تکرار و قابل اعتماد بسازید.


🔍 چالش اصلی:


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

Kedro این مشکلات را اینطور حل می‌کند:

📂 تقسیم پروژه به بخش‌های مستقل و قابل مدیریت

🔄 تعریف دقیق و قابل تکرار جریان‌های کاری (Pipeline)

📚 مدیریت داده‌ها در یک سیستم منسجم به نام DataCatalog

🤝 استانداردسازی برای همکاری آسان‌تر تیمی

📊 ابزارهای بصری برای مشاهده و مدیریت اجرای پروژه

⚙️ امکان توسعه و سازگاری با ابزارهای مختلف

💡 ویژگی‌های کلیدی Kedro 1.0:

نسخه ۱.۰ با بهبودهای فراوانی به شما قدرت می‌دهد تا پروژه‌های پیچیده را با اعتماد اجرا کنید و سریع‌تر توسعه دهید:

🔄 DataCatalog بازطراحی شده: مدیریت داده‌ها به شکلی ساده‌تر و قوی‌تر

🧩 بهبود فضای نام (Namespace): گروه‌بندی و استفاده انعطاف‌پذیرتر داده‌ها

🚀 بهبود رانرها: اجرای بهتر و پایدارتر جریان‌های کاری

📚 مستندات نوین: راهنمایی آسان و به‌روز برای شروع سریع

👁‍🗨 نمایش وضعیت خط لوله در Kedro Viz: نظارت بصری بر اجرای پروژه

🤖 آماده برای هوش مصنوعی نسل جدید: پشتیبانی از جریان‌های کاری پیشرفته و AI مولد

👥 چه کسانی باید از Kedro استفاده کنند؟

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

- مهندسان داده که خطوط لوله داده‌ای پیچیده می‌سازند و مدیریت می‌کنند

- تیم‌ها و سازمان‌هایی که می‌خواهند همکاری و هماهنگی پروژه‌های داده‌ای‌شان را بهبود دهند

- کسانی که وارد حوزه هوش مصنوعی مولد و پروژه‌های نوین داده‌ای می‌شوند


🌟 چرا Kedro 1.0 را انتخاب کنیم؟

با Kedro، پروژه‌های داده‌ای خود را به سطحی کاملاً حرفه‌ای می‌برید:

کدی منظم، قابل تست و مقیاس‌پذیر دارید که به رشد و تغییر پروژه کمک می‌کند و کار تیمی را ساده‌تر می‌کند.

📥 همین امروز شروع کنید!

Kedro ساده نصب می‌شود و جامعه بزرگی پشت آن است.

برای اطلاعات بیشتر و دریافت مستندات به kedro.org مراجعه کنید.

خلاصه در یک نگاه:


📂 ساختاردهی ماژولار پروژه‌ها

🔄 تعریف و مدیریت جریان‌های کاری

📚 DataCatalog پیشرفته

🤝 تسهیل همکاری تیمی

📊 ابزارهای نظارتی و بصری

⚙️ توسعه‌پذیری و سازگاری با ابزارهای نوین

🤖 آماده برای چالش‌های آینده AI

#Kedro #DataScience #MachineLearning #DataEngineering #AI #OpenSource #Python #DataPipeline #MLOps #GenerativeAI

چهارسال پیش هم این پروژه را در سایت مهندسی داده معرفی کردیم :‌

https://lnkd.in/dbn5pBFH
2
عامل‌های هوشمند در مهندسی داده؛ مسیر نوین اتوماسیون و بهینه‌سازی زیرساخت‌ها 🤖

به دنبال راهکاری برای بررسی خودکار متریک‌های Prometheus و ارزیابی دقیق آن‌ها به کمک عامل‌های هوشمند بودم که به سایت

https://mseep.ai

برخوردم — ( تصویر پست از نتیجه یک جستجو در این سایت برداشته شده است).

با کمال تعجب دیدم که تعداد قابل توجهی MCP Server برای ابزارهای مختلف حوزه مهندسی داده در دسترس است و چه پتانسیل بزرگی در این حوزه نهفته است.


🤖 سوال: MCP Server چیست و چرا مهم است؟

سرورهای #MCP امکان اتصال عامل‌های هوشمند به ابزارهای مختلف را فراهم می‌کنند تا بتوان داده‌های لحظه‌ای را در اختیار عامل‌های هوشمند قرار داد و امکان اجرای دستورات مختلف را روی این ابزارها به این عامل هوشمند داد. حالا ما می‌توانیم با این سرورهای واسط، کارهای تکراری و زمان‌بر در حوزه زیرساخت و مهندسی داده را به صورت خودکار و هوشمند انجام دهیم. این فناوری در مهندسی داده می تواند تغییرات بنیادین ایجاد کند.


نسخه آموزشی سریع این فناوری را از این آدرس دانلود کنید :

https://t.iss.one/bigdata_ir/424


🔍 قابلیت‌های کاربردی عامل‌های هوشمند

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

پایش و تحلیل مداوم متریک‌های #Prometheus

بررسی و تفسیر خودکار لاگ‌ها و خطاها

تحلیل کوئری‌های کند در #PostgreSQL و بهینه‌سازی ایندکس‌ها

نظارت بر داشبوردهای Grafana و واکنش سریع به شرایط بحرانی

....


⚙️ چطور شروع کنیم؟

📌نصب MCP Server مناسب از منابعی مانند mseep.ai

📌نوشتن پرامپت‌های کاربردی مثل:

🎯«هر یک ساعت کوئری‌های کند را بررسی کن»

🎯«در صورت بروز خطا پیامک یا اطلاع در تلگرام بفرست»

🎯«خودکار عملیات ری‌ایندکس را انجام بده»

📌تعریف زمان‌بندی اجرای اتوماتیک


🚀شروع ساده‌تر با ابزارهای کم‌کد مانند #N8N

ابزارهای کم‌کد و بدون کد مانند #N8N این فرایند را به شدت آسان می‌کنند و امکان استفاده از نودهای هوش مصنوعی را فراهم می‌آورند تا بدون نیاز به برنامه‌نویسی سنگین، اتوماسیون پیشرفته بسازید.


🌟 نگاهی به آینده مهندسی داده

هوش مصنوعی نه تنها در اتوماسیون روتین بلکه در حوزه‌های گسترده‌تری مانند طراحی مدل‌های داده، مستندسازی، رفع خطا و حتی طراحی و اجرای پایپ‌لاین‌های داده نقش مهمی ایفا خواهد کرد. ابزارهایی مثل #Kestra و Bento نمونه‌های موفقی هستند که با توصیف‌های متنی (#YAML) امکان ساخت و اجرای ورک‌فلوهای داده‌ای را به سادگی فراهم می‌کنند.
👍2
مهندسی داده
An illustrated guide to AI Agents.pdf
کتابی فوق‌العاده و پرمحتوا درباره ایجنت‌های هوش مصنوعی، مملو از مثال‌ها و پروژه‌های کاربردی!

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

پروژه‌ها:
1. آشنایی با Agentic RAG
2. ایجنت صوتی RAG
3. جستجوگر پرواز چندایجنتی
4. تحلیلگر مالی
5. سیستم نظارت بر برند
6. جستجوگر هتل چندایجنتی
7. پژوهشگر عمیق چندایجنتی
8. حافظه شبه‌انسانی برای ایجنت‌ها
9. نویسنده کتاب چندایجنتی
10. سیستم تولید محتوا چندایجنتی
11. جریان نویسندگی اسناد
12. تولیدکننده اخبار
👍82
آیا ردیس همچنان پادشاه حافظه‌هاست ؟ 👑

در دنیای فناوری، حتی محبوب‌ترین ابزارها هم برای ادامه مسیر به رقیب نیاز دارند. همان‌طور که در حوزه پردازش جریان، ظهور #Redpanda و #AutoMQ باعث شد سطح انتظارات از شرکت Confluent و حتی بنیاد آپاچی برای گسترش امکانات #Kafka بالا برود، حالا نوبت #Redis است که با چالش‌های تازه روبه‌رو شود.

ردیس سال‌هاست به‌عنوان یک پایگاه داده درون‌حافظه‌ای (In-Memory) سریع ⚡️، ساده و بی‌دردسر شناخته می‌شود. بسیاری از ما اولین تجربه کار با Cache، Session Storage یا حتی Pub/Sub را با همین ابزار داشته‌ایم. اما همین موفقیت و سادگی باعث شد که کمتر به سراغ گزینه‌های دیگر برویم… تا وقتی که یک مشکل واقعی سر راه‌مان سبز شود.

مشکل اول: استفاده ناکامل از CPU 🖥

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

اینجاست که #KeyDB وارد میدان شد 💪. این ابزار در واقع نسخه‌ای از Redis است که یاد گرفته از چند هسته CPU هم‌زمان استفاده کند. بدون تغییر در کد یا کتابخانه‌ها، می‌توانید با #KeyDB سرعتی چند برابر تجربه کنید.

مشکل دوم: هزینه بالای RAM 💸

هر کس #Redis را در مقیاس بزرگ استفاده کرده باشد، با مشکل مصرف زیاد حافظه آشناست. بخش زیادی از این مصرف به خاطر تکه‌تکه شدن و هدر رفتن فضای RAM است.

دیتابیس #Dragonfly دقیقاً برای حل همین مشکل ساخته شده 🐉. با معماری متفاوت و بسته‌بندی بهینه داده‌ها، می‌تواند تا یک‌سوم مصرف حافظه را کاهش دهد و همچنان سرعت بالایی ارائه کند. برای پروژه‌هایی با داده‌های کوچک اما بسیار زیاد – مثل ذخیره‌سازی میلیون‌ها سشن کاربر – #Dragonfly یک صرفه‌جویی واقعی در هزینه‌هاست.

مشکل سوم: تغییر لایسنس Redis 📜

تغییر لایسنس #Redis باعث شد بخشی از جامعه متن‌باز احساس کند آینده این پروژه دیگر کاملاً شفاف نیست. نتیجه این نگرانی، تولد #Valkey بود؛ یک فورک متن‌باز که با همان API و پروتکل Redis کار می‌کند اما بدون محدودیت‌های جدید لایسنس.

#Valkey از نظر فنی تفاوت بزرگی با Redis ندارد، اما برای کسانی که به دلایل حقوقی یا سیاست‌های سازمانی نمی‌توانند Redis را استفاده کنند، یک انتخاب امن و بی‌دردسر است.

مشکل چهارم: نیاز به توزیع‌شدگی واقعی 🌍

اگرچه Redis Cluster امکان مقیاس‌پذیری افقی را فراهم می‌کند، اما راه‌اندازی و نگهداری آن همیشه ساده نیست. #Hazelcast از روز اول برای توزیع‌شدگی طراحی شده و مدیریت داده بین چندین نود را به‌صورت خودکار انجام می‌دهد. این ویژگی آن را برای سیستم‌های بزرگ با نیاز واقعی به Cache توزیع‌شده جذاب می‌کند.(البته با پرداخت هزینه)


کدام را انتخاب کنیم؟ 🎯

اگر مشکل کارایی ندارید → #Redis بهترین انتخاب است.

📌اگر گلوگاه CPU دارید و می‌خواهید با کمترین تغییر سرعت بگیرید → #KeyDB را انتخاب کنید.

📌اگر هزینه RAM سنگین شده → #Dragonfly می‌تواند نجات‌بخش باشد.

📌اگر لایسنس برایتان مسئله است → #Valkey جایگزین امنی است.

📌اگر از ابتدا به یک Cache توزیع‌شده و سازمانی نیاز دارید → #Hazelcast را در نظر بگیرید.


در کنار همه این گزینه‌ها، #Kvrocks هم حرف‌های زیادی برای گفتن دارد. این دیتابیس که با #C++ و #Go ساخته شده، از RocksDB به‌عنوان موتور ذخیره‌سازی استفاده می‌کند؛ یعنی به جای اینکه همه چیز را فقط در حافظه RAM نگه دارد مثل #Redis، می‌تواند داده‌های بزرگ را روی دیسک ذخیره و مدیریت کند 📀. این کار باعث می‌شود ظرفیت خیلی بیشتری با هزینه کمتر داشته باشید، بدون اینکه از مزیت سرعت زیاد و سازگاری کامل با پروتکل Redis دست بکشید. 🚀
رقابت تازه شروع شده است 🚀. #Redis هنوز پادشاه دنیای پایگاه داده‌های درون‌حافظه‌ای است، اما حالا باید برای حفظ جایگاهش بیشتر تلاش کند. برای ما مهندسان نرم‌افزار، این یعنی گزینه‌های بیشتر، آزادی انتخاب بالاتر و آینده‌ای پر از نوآوری.
👍6
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
چرا هر مهندس داده‌ای باید Bloom Filter را بشناسد؟

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



⚠️مشکل چیست؟ تصور کنید در یک سیستم ثبت‌نام کاربران، هر بار که کاربری ایمیل جدیدی وارد می‌کند، باید بررسی کنید که آیا این ایمیل قبلاً ثبت شده یا نه. اگر میلیون‌ها رکورد ایمیل داشته باشید، نگهداری همهٔ آن‌ها در حافظه یا جستجوی مداوم در پایگاه داده بسیار پرهزینه و کند است. یا در پایگاه‌های داده توزیع‌شده و سیستم‌های استریمینگ، قبل از #join کردن داده‌ها یا پردازش رکوردها، باید بررسی شود که رکورد مربوطه واقعاً وجود دارد یا خیر — عملیات مستقیم روی تمام داده‌ها بسیار زمان‌بر و منابع‌بر است.

اینجاست که بلوم فیلتر وارد می‌شود: یک میانبر هوشمند و کم‌هزینه که می‌تواند سریع بگوید «این عنصر قطعاً وجود ندارد» یا «احتمالاً وجود دارد». این پاسخ‌ها کافی است تا بسیاری از عملیات پردازشی بهینه شوند.

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



🔹 ایدهٔ ساده : نقشه بیتی و هش‌ها 🧭

📌یک آرایهٔ بیتی ایجاد می‌کنیم، با مقدار اولیه صفر برای همه عناصر

📌هر عنصر (مثلاً یک ایمیل) با k تابع هش مشخص به k موقعیت در آرایه نگاشت می‌شود و آن بیت‌ها یک می‌شوند.

📌بررسی وجود یک عنصر:

- اگر حتی یکی از بیت‌ها صفر باشد → قطعاً موجود نیست

- اگر همه بیت‌ها یک باشند → احتمالاً موجوداست (ممکن است مثبت کاذب باشد)

💡 این معاملهٔ ساده بین حافظه و دقت، کل قدرت بلوم فیلتر است.



🔹 یک مثال ساده 🍎🍌

- آرایه ۸ بیتی: [0,0,0,0,0,0,0,0] را به عنوان آرایه اصلی و مرجع بلوم فیلتر انتخاب میکنیم.

- افزودن "apple"← بیت‌های 1,3,5 توسط سه تابع هش تولید می‌شوند بنابراین این خانه ها را برابر یک می گذاریم ← [0,1,0,1,0,1,0,0]

- افزودن "banana"←بیت‌های 2,3,6 ← [0,1,1,1,0,1,1,0]

- بررسی "cherry" ← تابع هش سه عدد 1،3،7 تولید می‌کند. بیت شماره 7 برابر 0 است ← پس "cherry" قطعاً وجود ندارد.

- بررسی "apple"← تمام بیت‌های تولید شده برابر ۱ هستند ← "apple" احتمالاً وجود دارد.


🔹 نکات فنی کلیدی ⚙️

هیچ منفی کاذبی وجود ندارد (اگر فیلتر درست نگهداری شود و هش‌ها ثابت باشند).

ممکن است مثبت کاذب داشته باشیم، نرخ آن با اندازه آرایه و تعداد توابع هش قابل کنترل است.

برای پشتیبانی از حذف عناصر و شمارش هر عضو، باید از Counting #Bloom Filter یا Cuckoo Filter استفاده کنیم.

فقط برای Membership Test کاربرد دارد، بازیابی داده یا شمارش تکرار را انجام نمی‌دهد.

انتخاب مناسب آرایه و تعداد توابع هش کلیدی است تا حافظه و دقت بهینه شود.

🧠 کاربردهای عملی در مهندسی داده

🎯پایگاه‌های داده توزیع‌شده: در سیستم‌هایی مانند Cassandra برای کاهش تعداد خواندن‌های غیرضروری دیسک و ترافیک شبکه استفاده می‌شود.

🎯پردازش فایل‌های پارکت: بلوم فیلترها به کاهش زمان کوئری‌ها کمک می‌کنند. در Apache #Parquet، می‌توانند زمان کوئری‌ها را به طور چشمگیری کاهش دهند.

🎯سیستم‌های کش: در Redis و سیستم‌های مشابه برای بررسی سریع وجود یا عدم وجود داده‌ها استفاده می‌شوند.

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


🔹 جمع‌بندی 📚


بلوم فیلتر با طراحی ساده اما هوشمندانه، ابزاری قدرتمند برای مدیریت داده‌های بزرگ است. فهم ایدهٔ پشت بلوم فیلتر به ما کمک می‌کند تصمیمات هوشمندانه‌تری بگیریم و بدانیم در کجاها می‌توانیم از این ابزار ساده اما کاربردی استفاده کنیم.
👍3
آغاز به کار رسمی مدرسه مهندسی داده سپهرام

با افتخار اعلام می‌کنم که وب‌سایت https://sepahram.ir به عنوان اولین مدرسه کاربردی مهندسی داده در ایران راه‌اندازی شد. هدف ما ارائه آموزش‌های عملی و پروژه‌محور در حوزه #مهندسی_داده برای جامعه فارسی‌زبان است.

🔰 شروع فعالیت مدرسه با برگزاری دوره نوین:
مبانی مهندسی داده


در این دوره، مفاهیم پایه و ابزارهای اصلی مهندسی داده به شکلی کاملاً عملی آموزش داده می‌شود، شامل:

🗄 پایگاه داده‌ها و طراحی اولیه با #PostgreSQL

🛠 آشنایی با
#Airflow برای مدیریت و زمان‌بندی جریان‌های داده

⚡️ پردازش داده‌های عظیم با
#ApacheSpark

🔄 پردازش جریان‌های داده در
#Kafka

📊 آشنایی عملیاتی با
#ClickHouse برای تحلیل سریع و بلادرنگ داده‌ها

🧊 کار با
#ApacheIceberg به عنوان نسل جدید فرمت‌های جدولی و مدیریت داده در مقیاس بزرگ


🎯 برای تضمین یادگیری گام‌به‌گام و مؤثر:

- هر درس شامل چند آزمون کوتاه و مفهومی است.

- برای دریافت گواهینامه پایان دوره، انجام و تحویل یک پروژه عملی و کاربردی الزامی است. جزئیات این پروژه در صفحه دوره ذکر شده است.


💬 در صورت بروز مشکل در مسیر آموزشی یا هنگام انجام آزمون‌ها، می‌توانید از طریق پیام‌رسان‌های تلگرام، واتساپ یا بله با حساب پشتیبانی مدرسه مهندسی داده سپهرام در ارتباط باشید:

📌 شناسه پشتیبانی: @sepahram_ir

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

🔗 جزئیات بیشتر و ثبت‌نام:

https://sepahram.ir/courses/intro-to-data-engineering

کانال رسمی سپهرام :

https://t.iss.one/sepahram_school
👍8
شروع ثبت‌نام دوره تخصصی Apache Airflow

مدرسه مهندسی داده سپهرام با هدف توانمندسازی متخصصان داده و ایجاد زیرساخت‌های حرفه‌ای برای مدیریت جریان‌های کاری (Workflow Management)، دوره‌ای جامع و عملی از Apache Airflow برگزار می‌کند.

این دوره شما را از کارهای تکراری و دستی نجات می‌دهد و وارد دنیای حرفه‌ای اتوماسیون پایپ‌لاین‌های داده می‌کند. از طراحی DAGهای ساده تا ساخت جریان‌های پیچیده با Dynamic Tasks، Event-Based Scheduling، اتصال به سرویس‌های ابری، پایگاه داده‌ها و ابزارهایی مثل Kafka و MinIO را در این دوره به‌صورت پروژه‌محور تجربه خواهید کرد.



🎯 معرفی دوره

در عصر داده‌محور امروز، کافی نیست فقط داده داشته باشید؛ بلکه باید آن را در زمان درست، پاک، ساخت‌یافته و آماده استفاده در اختیار سیستم‌های تحلیلی و مدل‌های یادگیری ماشین قرار دهید. Apache Airflow به‌عنوان یکی از محبوب‌ترین ابزارهای متن‌باز در شرکت‌های بزرگ دنیا، استانداردی برای خودکارسازی و زمان‌بندی جریان‌های کاری داده محسوب می‌شود.

این دوره در مدت ۴ هفته (۱۰ جلسه – ۲۰ ساعت) برگزار می‌شود و شما را از مفاهیم پایه تا طراحی و پیاده‌سازی پایپ‌لاین‌های داده پیشرفته همراهی می‌کند.


📌 جزئیات دوره


👤 سطح: متوسط تا پیشرفته

⏱️ مدت: ۲۰ ساعت (۴ هفته – ۱۰ جلسه)

📌 پیش‌نیاز: آشنایی مقدماتی با Python و Docker

🗓 شروع: پنج‌شنبه ۶ شهریور ۱۴۰۴

👥 ظرفیت: ۳۰ نفر

🆔 کد دوره: ۲۰۱

🕒 زمان برگزاری:

یک‌شنبه‌ها: ۲۰ تا ۲۲

پنج‌شنبه‌ها: ۹ تا ۱۳

🎓 گواهینامه معتبر (با انجام پروژه عملی و پرداخت جداگانه)



🧩 سرفصل‌ها (پروژه‌محور و عملی):

- مقدمه، معماری Airflow و اجرای یک پروژه مقدماتی با N8N

- نصب و راه‌اندازی Airflow (لوکال و Docker)، ساخت اولین DAG عملیاتی

- کار با Variables، XCom، Sensors، Connections

- مدیریت اجرای DAGها: Retry، Backfill، Pools، تخصیص منابع

- طراحی DAGهای پویا: Dynamic Tasks، TaskFlow API، Scheduling پیشرفته

- اجرای تسک‌ها با DockerOperator، KubernetesPodOperator، Ray Executor

- توسعه ماژولار: Custom Operator، Plugins، Logging، RBAC، Metrics، Prometheus/Grafana

- کارگاه عملی: یکپارچه‌سازی با Kafka، OpenAI، Postgres، MinIO

- آشنایی عملی با جایگزین‌های Airflow: Prefect، Kestra، Flyte، Dagster،
Mage.ai



💡 اگر می‌خواهید ETLها و پایپ‌لاین‌های داده شما همیشه سر وقت، بدون خطا و با مانیتورینگ کامل اجرا شوند، این دوره بهترین نقطه شروع است.

📩 همین امروز ثبت‌نام کنید : دوره ایرفلو
کانال تلگرام مدرسه مهندسی داده سپهرام : @sepahram_school
شروع ثبت‌نام دوره تخصصی ClickHouse

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

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


⚡️ چرا ClickHouse؟

در دنیای امروز که تحلیل داده در مقیاس بالا و نزدیک به زمان واقعی (Near Real-Time) مزیت رقابتی مهمی محسوب می‌شود، پایگاه‌های داده سنتی دیگر پاسخگو نیستند. ClickHouse به‌عنوان موتور تحلیلی فوق‌سریع (OLAP) می‌تواند کوئری‌های پیچیده را روی میلیاردها رکورد در کسری از ثانیه اجرا کند و در معماری‌های مدرن داده نقشی بی‌بدیل داشته باشد. هر چند روال کار دیتابیس‌های تحلیلی با دیتابیس‌های رابطه ای کمی متفاوت است و در این دوره سعی شده است زیر و بم این دیتابیس محبوب به صورت عملی و کاربردی، بررسی شود.


📚 مشخصات دوره جامع ClickHouse (کد: ۳۰۱)


👤 سطح: مقدماتی و متوسط

⏱️ مدت: ۱۸ ساعت

📌 پیش‌نیاز: آشنایی با SQL و Docker

🗓 شروع: پنج‌شنبه ۶ شهریور ۱۴۰۴

👥 ظرفیت: ۳۰ نفر

🕒 زمان برگزاری:

سه‌شنبه‌ها: ۲۰ تا ۲۲

پنج‌شنبه‌ها: ۱۴ تا ۱۸

🎓 امکان دریافت گواهینامه معتبر (با انجام پروژه عملی و پرداخت جداگانه)

🔍 سرفصل‌ها (کاملاً کاربردی):

- نصب و راه‌اندازی + معماری کلیک‌هوس

- طراحی بهینه جداول، ایندکس‌ها و Bloom Filter

- کوئری‌های پیشرفته SQL و clickhouse-local

- بهینه‌سازی پرس‌وجوها با Projection و MergeTree

- کار با داده‌های JSON، Map و Materialized View

- پردازش جریانی با Kafka Engine و glassflow

- مدیریت امنیت، RBAC، مانیتورینگ با Grafana

- پیاده‌سازی کلاسترهای توزیع‌شده (Sharding, Replication)

- مهاجرت داده و تیونینگ عملی با ابزارهای ETL


💡 اگر به‌دنبال ساخت موتورهای تحلیلی سریع و مقیاس‌پذیر برای پروژه‌های واقعی هستید، این دوره برای شماست.


📩 همین حالا برای ثبت‌نام اقدام کنید :

https://sepahram.ir/courses/clickhouse-201/
کانال تلگرام مدرسه مهندسی داده سپهرام : @sepahram_school
👍3
آشنایی با Temporal.io

امروز در لینکدین پستی منتشر شد درباره‌ی مزایای Temporal.io و نقاط قوت آن در مقایسه با Apache Airflow.

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

بیایید ابتدا مشکلاتی که برای کاربر در استفاده از Airflow پیش آمده بود را مرور کنیم :


🔹 چالش‌های Airflow در عمل

هرچند Airflow یک ابزار شناخته‌شده و استاندارد برای مدیریت ETL و پردازش دسته‌ای است، اما در سناریوهای پیچیده‌تر محدودیت‌هایی ایجاد می‌کند:

⚠️ماهیت Syncronous بودن بسیاری از Operatorها: اجرای Async در Airflow نیازمند طراحی جداگانه یا اپراتورهای سفارشی است و برای کار با APIهای Async ساده نیست.

⚠️مقیاس‌پذیری و مدیریت منابع: کلاسترکردن Executorها و مدیریت منابع در Airflow به‌ویژه در مقیاس بزرگ، پیچیدگی و سربار بالایی ایجاد می‌کند.

⚠️زمان‌بندی و Triggerها: هرچند می‌توان از طریق API یا Sensorها جریان‌ها را کنترل کرد، اما پیاده‌سازی شرط‌های پویا و وابستگی به رویدادها (Event-driven) نسبتاً دشوار است.

⚠️مدیریت خطا و Retry: Airflow قابلیت Retry دارد اما نسبتاً ساده است. استراتژی‌های پیچیده‌تر مانند backoff نمایی، timeout چندلایه یا مدیریت خطا در سطح گام‌های طولانی‌مدت نیاز به کدنویسی و کنترل دستی دارد.

⚠️تعامل انسانی (Human-in-the-Loop): Airflow به‌طور بومی امکان دخالت کاربر انسانی در میانه‌ی یک DAG را ندارد و چنین قابلیتی باید با توسعه‌ی خارجی یا ترکیب ابزارهای دیگر پیاده شود.


💡 مزایای Temporal در این زمینه

تمپورال رویکرد متفاوتی دارد: به جای تعریف DAG در پایتون، گردش‌های کاری را به شکل کد در زبان‌های مختلف پیاده‌سازی می‌کنید و هسته‌ی آن به‌صورت durable execution تضمین می‌کند که هیچ فعالیتی در اثر خطا یا قطعی از بین نرود. برخی نقاط قوت آن:

پشتیبانی چندزبانه (Polyglot SDKs): تیم‌ها می‌توانند در زبان‌های مختلف (Go, Python, TypeScript, Java و ...) Workflow و Activity بنویسند و در یک سیستم یکپارچه اجرا کنند.

Async-first: معماری Temporal از پایه برای پردازش Async طراحی شده و برخلاف Airflow، نیاز به اپراتورهای خاص یا راه‌حل‌های سفارشی ندارد.

مقیاس‌پذیری بالا: توانایی اجرای میلیون‌ها Workflow در ثانیه، با معماری مقاوم و پشتیبانی از دیتابیس‌های مختلف (Postgres, MySQL, Cassandra و ElasticSearch).

امکان Retry و Error Handling پیشرفته: مدیریت خطا، Retry خودکار با استراتژی‌های متنوع، timeoutهای چندلایه و تضمین اجرای دقیق (exactly-once execution) از ویژگی‌های بومی Temporal است.

قابلیت متمایز و مهم Human-in-the-Loop: از طریق Signalها و Queryها می‌توان تعامل انسانی را به‌راحتی درون Workflow قرار داد (برای مثال تأیید یا رد یک مرحله).

رویکرد Event-driven بودن واقعی: Workflowها می‌توانند توسط سیگنال‌ها یا رویدادهای بیرونی شروع و کنترل شوند؛ چیزی که در Airflow محدودتر و پیچیده‌تر است.

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


🔹 کجا Airflow و کجا Temporal؟

🎯اگر پروژه‌ی شما بیشتر شامل ETL دسته‌ای و پردازش‌های دوره‌ای است، Airflow همچنان یک ابزار استاندارد و مناسب است.

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

کانال مدرسه مهندسی داده سپهرام : @sepahram_school
👍5