نقشه راه مهندسی داده؛ چهار گام برای تبدیل شدن به یک مهندس داده حرفهای
امروز را وقت گذاشتم تا بر اساس تجربهی بیش از ده سال فعالیت عملی و همچنین نیازمندیهای بازار ایران و بر اساس ابزارهای متنباز، یک نقشه راه جامع برای مهندسی داده آماده کنم.
این مسیر بهویژه برای علاقهمندانی طراحی شده است که ممکن است از رشتههایی غیر از مهندسی نرمافزار یا علوم کامپیوتر وارد شوند. به همین دلیل، بخش ابتدایی آن شامل پیشنیازها و مهارتهای پایه است تا بدانید قبل از شروع چه باید یاد بگیرید یا بهتر است داشته باشید.
🔹 گام اول: اصول اولیه - Foundations
این گام مربوط به پیشنیاز ورود به مهندسی داده است.
📌 پایتون عمیق: یادگیری پایتون فراتر از سطح مقدماتی؛ از برنامهنویسی شیگرا و ماژولار تا مباحث پیشرفته مثل async/await، decorators و context managers.
📌 اصول توسعه سرویسها: آشنایی با REST و gRPC، سریالیزیشن (JSON/Protobuf/Avro)، امنیت و ساخت سرویسهای پایدار.
📌 مبانی پردازش داده: کار با Pandas/Numpy/Polars، آشنایی با ابزارهای پردازش توزیعشده (مثل Celery/Daft) و حتی وبکراولینگ برای جمعآوری داده.
برای مشاهده جزییات این گام به این لینک مراجعه کنید
🔹 گام دوم: مبانی مهندسی داده
در این مرحله با کلیت ابزارها و معماریهای اصلی آشنا میشویم و یک دید عملیاتی پیدا میکنیم.
📌 محیط توسعه و ابزارهای پایه: کار با لینوکس، خط فرمان و Docker.
📌 دیتابیسها: یادگیری PostgreSQL و SQL در کنار آشنایی با انواع دیتابیسهای NoSQL، ستونی، سریزمانی و برداری.
📌 مدیریت جریان داده: طراحی و اجرای pipelineها با ابزارهایی مثل Airflow، Prefect، Kafka و Spark.
🔹 گام سوم: عمیق شدن در مهندسی داده
اینجا وارد بخش جدیتر و تخصصیتر میشویم.
📌 دیتابیسهای غیررابطهای: کار عملی با MongoDB، Redis، Cassandra و Elasticsearch و Qdrant برای ذخیرهسازی و بازیابی دادههای متنوع.
📌 دیتابیسهای تحلیلی و Lakehouse: تسلط بر ClickHouse، StarRocks، Doris و همچنین طراحی Lakehouse با MinIO و Open Table Formats مثل Apache Iceberg.
📌 پردازش جریان و ETL حرفهای: تسلط عملی بر Kafka و اکوسیستم آن، ابزارهای ETL/ELT (مثل dbt، Airbyte، Arroyo) و کار با دیتابیسهای جریانی و پردازش توزیعشده.
🔹 گام چهارم: به سوی باشگاه حرفهایها
در این مرحله شما به سطحی میرسید که میتوانید خود را یک مهندس داده حرفهای بدانید.
📌 استقرار مدرن سرویسها: تسلط بر Kubernetes
📌 زیرساخت بهعنوان کد (IaC): کار با Terraform، Ansible یا Pulumi.
📌 ابر داخلی و خارجی: آشنایی با AWS، Azure، Databricks، ستون و آروان برای طراحی زیرساختهای داده.
📌 عاملهای هوشمند و MLOps : پیوند دادن داده با یادگیری ماشین (MLFlow) و استفاده از AI Agents برای پایش و اتوماسیون پایپلاینها.
📌 حاکمیت و کیفیت داده: آشنایی با اصول Data Governance و ابزارهایی مثل Great Expectations برای اطمینان از صحت و اعتمادپذیری داده.
✍️ در نهایت این مسیر چهارگانه به شما نشان میدهد از کجا شروع کنید، چگونه پیش بروید و در چه نقطهای به مرحلهی حرفهای برسید.
🔗 نقشه راه : https://sepahram.ir/data-engineering-roadmap
امروز را وقت گذاشتم تا بر اساس تجربهی بیش از ده سال فعالیت عملی و همچنین نیازمندیهای بازار ایران و بر اساس ابزارهای متنباز، یک نقشه راه جامع برای مهندسی داده آماده کنم.
این مسیر بهویژه برای علاقهمندانی طراحی شده است که ممکن است از رشتههایی غیر از مهندسی نرمافزار یا علوم کامپیوتر وارد شوند. به همین دلیل، بخش ابتدایی آن شامل پیشنیازها و مهارتهای پایه است تا بدانید قبل از شروع چه باید یاد بگیرید یا بهتر است داشته باشید.
🔹 گام اول: اصول اولیه - Foundations
این گام مربوط به پیشنیاز ورود به مهندسی داده است.
📌 پایتون عمیق: یادگیری پایتون فراتر از سطح مقدماتی؛ از برنامهنویسی شیگرا و ماژولار تا مباحث پیشرفته مثل async/await، decorators و context managers.
📌 اصول توسعه سرویسها: آشنایی با REST و gRPC، سریالیزیشن (JSON/Protobuf/Avro)، امنیت و ساخت سرویسهای پایدار.
📌 مبانی پردازش داده: کار با Pandas/Numpy/Polars، آشنایی با ابزارهای پردازش توزیعشده (مثل Celery/Daft) و حتی وبکراولینگ برای جمعآوری داده.
برای مشاهده جزییات این گام به این لینک مراجعه کنید
🔹 گام دوم: مبانی مهندسی داده
در این مرحله با کلیت ابزارها و معماریهای اصلی آشنا میشویم و یک دید عملیاتی پیدا میکنیم.
📌 محیط توسعه و ابزارهای پایه: کار با لینوکس، خط فرمان و Docker.
📌 دیتابیسها: یادگیری PostgreSQL و SQL در کنار آشنایی با انواع دیتابیسهای NoSQL، ستونی، سریزمانی و برداری.
📌 مدیریت جریان داده: طراحی و اجرای pipelineها با ابزارهایی مثل Airflow، Prefect، Kafka و Spark.
🔹 گام سوم: عمیق شدن در مهندسی داده
اینجا وارد بخش جدیتر و تخصصیتر میشویم.
📌 دیتابیسهای غیررابطهای: کار عملی با MongoDB، Redis، Cassandra و Elasticsearch و Qdrant برای ذخیرهسازی و بازیابی دادههای متنوع.
📌 دیتابیسهای تحلیلی و Lakehouse: تسلط بر ClickHouse، StarRocks، Doris و همچنین طراحی Lakehouse با MinIO و Open Table Formats مثل Apache Iceberg.
📌 پردازش جریان و ETL حرفهای: تسلط عملی بر Kafka و اکوسیستم آن، ابزارهای ETL/ELT (مثل dbt، Airbyte، Arroyo) و کار با دیتابیسهای جریانی و پردازش توزیعشده.
🔹 گام چهارم: به سوی باشگاه حرفهایها
در این مرحله شما به سطحی میرسید که میتوانید خود را یک مهندس داده حرفهای بدانید.
📌 استقرار مدرن سرویسها: تسلط بر Kubernetes
📌 زیرساخت بهعنوان کد (IaC): کار با Terraform، Ansible یا Pulumi.
📌 ابر داخلی و خارجی: آشنایی با AWS، Azure، Databricks، ستون و آروان برای طراحی زیرساختهای داده.
📌 عاملهای هوشمند و MLOps : پیوند دادن داده با یادگیری ماشین (MLFlow) و استفاده از AI Agents برای پایش و اتوماسیون پایپلاینها.
📌 حاکمیت و کیفیت داده: آشنایی با اصول Data Governance و ابزارهایی مثل Great Expectations برای اطمینان از صحت و اعتمادپذیری داده.
✍️ در نهایت این مسیر چهارگانه به شما نشان میدهد از کجا شروع کنید، چگونه پیش بروید و در چه نقطهای به مرحلهی حرفهای برسید.
🔗 نقشه راه : https://sepahram.ir/data-engineering-roadmap
🔥3👍2❤1
فیلم آموزش عملی Kafka در یوتیوب – از نصب تا اجرای اولین Producer و Consumer
در جلسه چهارم 🕑، ما با مفاهیم اصلی #Kafka آشنا شدیم و یاد گرفتیم چگونه آن را به صورت لوکال و بدون Docker نصب و راهاندازی کنیم 🖥.
این جلسه ترکیبی از تئوری و تمرین عملی بود و شامل موارد زیر شد:
✨ مفاهیم اصلی Kafka
⚡️بروکرها، تاپیکها و پارتیشنها
⚡️پرودیوسرها و کانسیومرها
⚡️عملکرد #Kafka در پیامرسانی با توان بالا و توزیعشده
💻 تمرینهای عملی با خط فرمان
⚡️راهاندازی بروکر Kafka به صورت محلی
⚡️ایجاد تاپیکها، ارسال پیام با پرودیوسر و دریافت آن با کانسیومر
⚡️مشاهده مسیر پیامها و رفتار توزیع آنها در پارتیشنها
🐍 تمرینهای عملی با پایتون
⚡️نوشتن اسکریپتهای ساده پرودیوسر و کانسیومر
⚡️درک توزیع پیامها و گروههای کانسیومر
⚡️مشاهده حفظ ترتیب پیامها در هر پارتیشن
✅ دستاوردهای کلیدی
🔰توانایی راهاندازی Kafka به صورت لوکال
🔰تجربه عملی در ارسال و دریافت پیامها
🔰درک پارتیشنها و گروههای کانسیومر
🔰پایهای محکم برای ساخت pipelineهای داده real-time و مقیاسپذیر
در جلسه دوم 🕑، نصب و راهاندازی Kafka با Docker و کار با انواع UI موجود در بازار آموزش داده شد. همچنین Redpanda به عنوان یک جایگزین Kafka معرفی شد. تمرینهای عملی شامل:
🔰خواندن خودکار فایلها و ارسال آنها به Kafka با Redpanda Connect
🔰راهاندازی یک پایپلاین CDC ساده برای انتقال دادههای درج شده و آپدیت شده در Postgres به Kafka
🎥 لینک آموزش در یوتیوب – کانال مدرسه مهندسی داده سپهرام:
https://www.youtube.com/watch?v=hLT0xOEmNQ8
📚 لیست سایر دورههای مدرسه مهندسی داده سپهرام:
https://sepahram.ir/courses/
💡 اگر قصد یادگیری مهندسی داده را دارید:
- هم اکنون میتوانید سرفصلهای دوره را مرور کنید
- برای دریافت کد تخفیف ثبت نام، به آیدی @sepahram_ir در تلگرام پیام بدهید
دوستانی که تاکنون با کافکا کار نکردهاند و میخواهند به صورت سریع و کاربردی با آن آشنا شوند، این دوره و به ویژه جلسات چهارم و پنجم برای شماست!
در جلسه چهارم 🕑، ما با مفاهیم اصلی #Kafka آشنا شدیم و یاد گرفتیم چگونه آن را به صورت لوکال و بدون Docker نصب و راهاندازی کنیم 🖥.
این جلسه ترکیبی از تئوری و تمرین عملی بود و شامل موارد زیر شد:
✨ مفاهیم اصلی Kafka
⚡️بروکرها، تاپیکها و پارتیشنها
⚡️پرودیوسرها و کانسیومرها
⚡️عملکرد #Kafka در پیامرسانی با توان بالا و توزیعشده
💻 تمرینهای عملی با خط فرمان
⚡️راهاندازی بروکر Kafka به صورت محلی
⚡️ایجاد تاپیکها، ارسال پیام با پرودیوسر و دریافت آن با کانسیومر
⚡️مشاهده مسیر پیامها و رفتار توزیع آنها در پارتیشنها
🐍 تمرینهای عملی با پایتون
⚡️نوشتن اسکریپتهای ساده پرودیوسر و کانسیومر
⚡️درک توزیع پیامها و گروههای کانسیومر
⚡️مشاهده حفظ ترتیب پیامها در هر پارتیشن
✅ دستاوردهای کلیدی
🔰توانایی راهاندازی Kafka به صورت لوکال
🔰تجربه عملی در ارسال و دریافت پیامها
🔰درک پارتیشنها و گروههای کانسیومر
🔰پایهای محکم برای ساخت pipelineهای داده real-time و مقیاسپذیر
در جلسه دوم 🕑، نصب و راهاندازی Kafka با Docker و کار با انواع UI موجود در بازار آموزش داده شد. همچنین Redpanda به عنوان یک جایگزین Kafka معرفی شد. تمرینهای عملی شامل:
🔰خواندن خودکار فایلها و ارسال آنها به Kafka با Redpanda Connect
🔰راهاندازی یک پایپلاین CDC ساده برای انتقال دادههای درج شده و آپدیت شده در Postgres به Kafka
🎥 لینک آموزش در یوتیوب – کانال مدرسه مهندسی داده سپهرام:
https://www.youtube.com/watch?v=hLT0xOEmNQ8
📚 لیست سایر دورههای مدرسه مهندسی داده سپهرام:
https://sepahram.ir/courses/
💡 اگر قصد یادگیری مهندسی داده را دارید:
- هم اکنون میتوانید سرفصلهای دوره را مرور کنید
- برای دریافت کد تخفیف ثبت نام، به آیدی @sepahram_ir در تلگرام پیام بدهید
❤6🙏1
شروع ثبتنام دوره عملی PostgreSQL
در این دوره عملی، شما:
🔰 از نصب و راهاندازی تا طراحی دیتابیس با ERD و ایجاد جداول را یاد میگیرید.
🔰 نوشتن کوئریهای پیچیده تحلیلی با JOIN، CTE و Window Function را تمرین میکنید.
🔰 با بهینهسازی کوئریها، ایندکسها، View و Materialized View آشنا میشوید.
🔰 قابلیتهای پیشرفتهای مثل افزونهها، MVCC، WAL، بکاپ و بازیابی، Replication و امنیت سطح ردیف را یاد میگیرید.
جزئیات تکمیلی دوره:
✅ دوره به صورت آنلاین برگزار میشود، اما هر جلسه بعد از ضبط و تدوین روی سایت قرار میگیرد و به صورت آفلاین نیز قابل مشاهده است (در داخل خود سپهرام).
✅در این دوره با نسخه ۱۸ PostgreSQL کار خواهیم کرد و همزمان از امکانات جدید این نسخه حرفهای که در مهرماه 1404 منتشر شده است بهره میبریم.
✅ شرکتکنندگان علاوه بر گروه اختصاصی و امکان مشاهده دائمی فیلمهای جدید دوره که به تدریج و با نسخههای جدید پستگرس، به روز خواهد شد، به گیت اختصاصی دوره دسترسی خواهند داشت.
با گذراندن این دوره، مهارت عملی طراحی، توسعه و نگهداری یک دیتابیس PostgreSQL حرفهای را به دست خواهید آورد و میتوانید از آن در پروژههای واقعی و ابزارهای تحلیلی حرفهای مانند Superset، Airflow و Metabase استفاده کنید.
ثبتنام کنید و قدم به دنیای حرفهای مدیریت دادههای رابطهای با دیتابیس محبوب پستگرس بگذارید!
https://sepahram.ir/courses/postgresql/
حتی با گسترش انواع دیتابیسهای NoSQL و سیستمهای تحلیلی، قلب اکثر سیستمهای اطلاعاتی هنوز بر پایگاههای داده رابطهای استوار است. PostgreSQL بهعنوان یک دیتابیس متنباز و حرفهای، ترکیبی از قدرت سنتی دیتابیسهای رابطهای و امکانات مدرن مانند JSONB، Array و افزونههای متنوع را ارائه میدهد.
در این دوره عملی، شما:
🔰 از نصب و راهاندازی تا طراحی دیتابیس با ERD و ایجاد جداول را یاد میگیرید.
🔰 نوشتن کوئریهای پیچیده تحلیلی با JOIN، CTE و Window Function را تمرین میکنید.
🔰 با بهینهسازی کوئریها، ایندکسها، View و Materialized View آشنا میشوید.
🔰 قابلیتهای پیشرفتهای مثل افزونهها، MVCC، WAL، بکاپ و بازیابی، Replication و امنیت سطح ردیف را یاد میگیرید.
جزئیات تکمیلی دوره:
✅ دوره به صورت آنلاین برگزار میشود، اما هر جلسه بعد از ضبط و تدوین روی سایت قرار میگیرد و به صورت آفلاین نیز قابل مشاهده است (در داخل خود سپهرام).
✅در این دوره با نسخه ۱۸ PostgreSQL کار خواهیم کرد و همزمان از امکانات جدید این نسخه حرفهای که در مهرماه 1404 منتشر شده است بهره میبریم.
✅ شرکتکنندگان علاوه بر گروه اختصاصی و امکان مشاهده دائمی فیلمهای جدید دوره که به تدریج و با نسخههای جدید پستگرس، به روز خواهد شد، به گیت اختصاصی دوره دسترسی خواهند داشت.
با گذراندن این دوره، مهارت عملی طراحی، توسعه و نگهداری یک دیتابیس PostgreSQL حرفهای را به دست خواهید آورد و میتوانید از آن در پروژههای واقعی و ابزارهای تحلیلی حرفهای مانند Superset، Airflow و Metabase استفاده کنید.
ثبتنام کنید و قدم به دنیای حرفهای مدیریت دادههای رابطهای با دیتابیس محبوب پستگرس بگذارید!
https://sepahram.ir/courses/postgresql/
👍4
همروندی و مدیریت تراکنشها در Airflow: تجربه عملی از Postgres تا MinIO
در این ویدئو یک دگ (DAG) کاربردی را در ایرفلو نسخه 3.1 بررسی میکنیم که وظیفهاش انتقال تراکنشها از پستگرس (Postgres) به MinIO است.
این دگ شامل چند مرحله است:
🔰سنسور برای انتظار تراکنشهای جدید.
🔰تسک پردازش (Transform) برای استخراج تراکنشهای خام از پایگاه داده.
🔰ذخیرهسازی در MinIO به صورت JSON برای استفاده در مراحل بعدی (مثل ذخیره در Lakehouse).
🔰بهروزرسانی وضعیت تراکنشها در پستگرس بهعنوان "پردازششده".
❓ اما چالش کجا پیش میآید؟
وقتی چند بار این دگ را همزمان اجرا کنیم، هر بار ممکن است مجموعهی مشابهی از تراکنشها انتخاب شود و چندین بار پردازش شود. این همان مشکل اجرای ناخواستهی موازی (Duplicate Processing) است.
برای حل این مسئله، در ویدئو چند راهحل بررسی شده است:
🟠 راهحلهای محدود کردن همروندی
✨ گزینه depends_on_past: ایرفلو دگ یا تسک بعدی را تنها در صورتی اجرا میکند که اجرای قبلی همان تسک از دگهای قبلی تکمیل شده باشد.
✨ گزینه max_active_runs: میتوانیم تعیین کنیم که حداکثر چند اجرای همزمان از یک دگ فعال باشد (مثلاً فقط یک اجرای فعال در لحظه).
✨ گزینه pool (در این دگ خاص بررسی نشد): ابزاری برای محدود کردن تعداد اجرای همزمان یک تسک مشخص.
🟢 راهحلهای واقعی برای موازیسازی
اگر بخواهیم اجرای موازی واقعی برای سناریوی فوق (ترکیب ایرفلو و یک دیتابیس رابطهای)، داشته باشیم، باید به سراغ تکنیکهای سطح دیتابیس برویم. یکی از مهمترین آنها:
- قفلگذاری موقت هنگام انتخاب سطرها با دستور FOR UPDATE SKIP LOCKED: با این تکنیک میتوانیم در لحظهی انتخاب رکوردها (SELECT) ردیفهای انتخابشده را قفل کنیم تا پردازشهای دیگر نتوانند آنها را همزمان بردارند. این کار نیاز دارد که انتخاب (SELECT) و بهروزرسانی (UPDATE) در همان تراکنش انجام شود تا رفتار اتمیک تضمین گردد.
💡 نکتهی اصلی این کارگاه این بود که:
طراحی پایپلاینهای داده با ایرفلو تنها به نوشتن چند تسک و اتصال آنها به هم خلاصه نمیشود. بلکه باید همهی شرایط مرزی، اجرای همزمان دگها، قفلهای دیتابیس و حتی طراحی ذخیرهسازی (مثل MinIO یا Lakehouse) را با دقت بررسی کنیم.
📌 کدهای کامل این دگ در گیتهاب موجود است:
👉 https://github.com/sepahram-school/workshops/tree/main/2-Airflow-Concurrency-Control-SQL
🎥 امیدوارم این ویدئو برای تمام کسانی که در پروژههای واقعی با ایرفلو کار میکنند و دغدغهی پایداری و دقت پایپلاینهای داده دارند، مفید و الهامبخش باشد.
کانال تلگرام BigData.IR - وبسایت مهندسی داده : https://news.1rj.ru/str/bigdata_ir
دورههای تخصصی سپهرام : https://sepahram.ir/courses
آدرس ویدئو در یوتیوب :
https://www.youtube.com/watch?v=sS6Ma40sngU
🔹 در ادامهی کارگاههای عملی مدرسه مهندسی داده سپهرام Sepahram Data Eng. School، یک ویدئو آموزشی یکساعته آماده کردم که به یکی از مسائل بسیار مهم در طراحی پایپلاینهای داده با ایرفلو (Apache Airflow) میپردازد: موضوع همروندی (Concurrency).
در این ویدئو یک دگ (DAG) کاربردی را در ایرفلو نسخه 3.1 بررسی میکنیم که وظیفهاش انتقال تراکنشها از پستگرس (Postgres) به MinIO است.
این دگ شامل چند مرحله است:
🔰سنسور برای انتظار تراکنشهای جدید.
🔰تسک پردازش (Transform) برای استخراج تراکنشهای خام از پایگاه داده.
🔰ذخیرهسازی در MinIO به صورت JSON برای استفاده در مراحل بعدی (مثل ذخیره در Lakehouse).
🔰بهروزرسانی وضعیت تراکنشها در پستگرس بهعنوان "پردازششده".
❓ اما چالش کجا پیش میآید؟
وقتی چند بار این دگ را همزمان اجرا کنیم، هر بار ممکن است مجموعهی مشابهی از تراکنشها انتخاب شود و چندین بار پردازش شود. این همان مشکل اجرای ناخواستهی موازی (Duplicate Processing) است.
برای حل این مسئله، در ویدئو چند راهحل بررسی شده است:
🟠 راهحلهای محدود کردن همروندی
✨ گزینه depends_on_past: ایرفلو دگ یا تسک بعدی را تنها در صورتی اجرا میکند که اجرای قبلی همان تسک از دگهای قبلی تکمیل شده باشد.
✨ گزینه max_active_runs: میتوانیم تعیین کنیم که حداکثر چند اجرای همزمان از یک دگ فعال باشد (مثلاً فقط یک اجرای فعال در لحظه).
✨ گزینه pool (در این دگ خاص بررسی نشد): ابزاری برای محدود کردن تعداد اجرای همزمان یک تسک مشخص.
🟢 راهحلهای واقعی برای موازیسازی
اگر بخواهیم اجرای موازی واقعی برای سناریوی فوق (ترکیب ایرفلو و یک دیتابیس رابطهای)، داشته باشیم، باید به سراغ تکنیکهای سطح دیتابیس برویم. یکی از مهمترین آنها:
- قفلگذاری موقت هنگام انتخاب سطرها با دستور FOR UPDATE SKIP LOCKED: با این تکنیک میتوانیم در لحظهی انتخاب رکوردها (SELECT) ردیفهای انتخابشده را قفل کنیم تا پردازشهای دیگر نتوانند آنها را همزمان بردارند. این کار نیاز دارد که انتخاب (SELECT) و بهروزرسانی (UPDATE) در همان تراکنش انجام شود تا رفتار اتمیک تضمین گردد.
💡 نکتهی اصلی این کارگاه این بود که:
طراحی پایپلاینهای داده با ایرفلو تنها به نوشتن چند تسک و اتصال آنها به هم خلاصه نمیشود. بلکه باید همهی شرایط مرزی، اجرای همزمان دگها، قفلهای دیتابیس و حتی طراحی ذخیرهسازی (مثل MinIO یا Lakehouse) را با دقت بررسی کنیم.
📌 کدهای کامل این دگ در گیتهاب موجود است:
👉 https://github.com/sepahram-school/workshops/tree/main/2-Airflow-Concurrency-Control-SQL
🎥 امیدوارم این ویدئو برای تمام کسانی که در پروژههای واقعی با ایرفلو کار میکنند و دغدغهی پایداری و دقت پایپلاینهای داده دارند، مفید و الهامبخش باشد.
کانال تلگرام BigData.IR - وبسایت مهندسی داده : https://news.1rj.ru/str/bigdata_ir
دورههای تخصصی سپهرام : https://sepahram.ir/courses
آدرس ویدئو در یوتیوب :
https://www.youtube.com/watch?v=sS6Ma40sngU
GitHub
workshops/2-Airflow-Concurrency-Control-SQL at main · sepahram-school/workshops
Hands-on short workshops for data engineers! Explore popular tools and projects like DBT, Great Expectations, DuckDB, Kafka, Spark, and more, with ready-to-use materials for practice - sepahram-sch...
❤3🙏1
ورکشاپ جدید مدرسه مهندسی داده سپهرام - آشنایی با ساختار فیزیکی پستگرس منتشر شد!
در ادامهی کارگاههای عملی مدرسه مهندسی داده سپهرام، اینبار به سراغ سازوکار ذخیرهسازی فیزیکی دادهها در #PostgreSQL رفتیم.
در این جلسه با اجرای #PostgreSQL نسخه ۱۸ در محیط Docker، ساختار درونی ذخیره دادهها را از نزدیک بررسی کردیم.
خلاصه اینکه : ✨فایلهای داده در پستگرس از واحدهایی به نام Page (یا Block) تشکیل میشوند؛ هر Page معمولاً ۸ کیلوبایت حجم دارد و کوچکترین بخش قابل خواندن یا نوشتن در دیسک است.
✨ هر Page شامل اطلاعات مدیریتی، اشارهگرهای رکوردها، فضای خالی، و خود دادههاست. هنگام درج یا بهروزرسانی رکورد، #PostgreSQL بر اساس فضای خالی موجود تصمیم میگیرد که داده را در همان Page یا Page جدید ذخیره کند. این رفتار در عمل، پایهی مفهومی به نام Heap است - یعنی ذخیرهسازی بدون ترتیب خاص.
✨در کارگاه دیدیم که با بهروزرسانی رکوردها، نسخههای جدید در انتهای Page ها درج میشوند و نسخههای قبلی تا اجرای فرآیند VACUUM در فایل باقی میمانند. همچنین با تعیین fillfactor=70 برای جدول users2، مشاهده کردیم که چگونه فضای آزاد در Page باعث درج نسخههای جدید در همان Page میشود.
📘 آنچه در این کارگاه انجام دادیم:
🔰راهاندازی PostgreSQL 18 با Docker
🔰بررسی ساختار پوشههای base و global و مفهوم OID
🔰درج و بهروزرسانی دادهها و تحلیل رفتار Pageها
🔰بررسی عملی Heap و نقش پارامتر fillfactor
📺 فیلم کامل ورکشاپ در یوتیوب مدرسه:
🔗 https://youtu.be/H3ET3i7XsXw
💾 فایلها و اسکریپتها در گیتهاب سپهرام:
👉 https://github.com/sepahram-school/workshops
دوره در حال برگزاری پستگرس : https://sepahram.ir/courses/postgresql
در ادامهی کارگاههای عملی مدرسه مهندسی داده سپهرام، اینبار به سراغ سازوکار ذخیرهسازی فیزیکی دادهها در #PostgreSQL رفتیم.
در این جلسه با اجرای #PostgreSQL نسخه ۱۸ در محیط Docker، ساختار درونی ذخیره دادهها را از نزدیک بررسی کردیم.
خلاصه اینکه : ✨فایلهای داده در پستگرس از واحدهایی به نام Page (یا Block) تشکیل میشوند؛ هر Page معمولاً ۸ کیلوبایت حجم دارد و کوچکترین بخش قابل خواندن یا نوشتن در دیسک است.
✨ هر Page شامل اطلاعات مدیریتی، اشارهگرهای رکوردها، فضای خالی، و خود دادههاست. هنگام درج یا بهروزرسانی رکورد، #PostgreSQL بر اساس فضای خالی موجود تصمیم میگیرد که داده را در همان Page یا Page جدید ذخیره کند. این رفتار در عمل، پایهی مفهومی به نام Heap است - یعنی ذخیرهسازی بدون ترتیب خاص.
✨در کارگاه دیدیم که با بهروزرسانی رکوردها، نسخههای جدید در انتهای Page ها درج میشوند و نسخههای قبلی تا اجرای فرآیند VACUUM در فایل باقی میمانند. همچنین با تعیین fillfactor=70 برای جدول users2، مشاهده کردیم که چگونه فضای آزاد در Page باعث درج نسخههای جدید در همان Page میشود.
📘 آنچه در این کارگاه انجام دادیم:
🔰راهاندازی PostgreSQL 18 با Docker
🔰بررسی ساختار پوشههای base و global و مفهوم OID
🔰درج و بهروزرسانی دادهها و تحلیل رفتار Pageها
🔰بررسی عملی Heap و نقش پارامتر fillfactor
📺 فیلم کامل ورکشاپ در یوتیوب مدرسه:
🔗 https://youtu.be/H3ET3i7XsXw
💾 فایلها و اسکریپتها در گیتهاب سپهرام:
👉 https://github.com/sepahram-school/workshops
دوره در حال برگزاری پستگرس : https://sepahram.ir/courses/postgresql
❤3🙏1
این جلسه به صورت عمومی منتشر شده است و اگر به نحوه کارکرد کافکا در بخش ذخیره پیامها علاقه مند هستید آنرا از دست ندهید. 👇👇👇👇
❤1
Forwarded from Sepahram Data Eng. School
🎬 جلسه چهارم دوره تخصصی آموزش Kafka منتشر شد!
در این جلسه به بررسی عمیق نحوه ذخیرهسازی دادهها در Kafka پرداختیم و مفاهیم کلیدی زیر را پوشش دادیم:
🔰ساختار فیزیکی ذخیرهسازی: فایلهای لاگ، سگمنتها و ایندکسها
🔰ذخیرهسازی در حالتهای مختلف: عادی، Idempotency و تراکنشها
🔰تنظیمات کلیدی تاپیکها و سیاستهای نگهداری دادهها
🔰مکانیزم پاکسازی و Tombstones
🔰تاپیک __consumer_offsets و مدیریت آفستهای مصرفکنندگان
📹 ویدئوی این جلسه در این لینک قابل مشاهده است.
برای مشاهده تمام موضوعات و مطالب این جلسه، روی لینک جلسه ۴ کلیک کنید.
در این جلسه به بررسی عمیق نحوه ذخیرهسازی دادهها در Kafka پرداختیم و مفاهیم کلیدی زیر را پوشش دادیم:
🔰ساختار فیزیکی ذخیرهسازی: فایلهای لاگ، سگمنتها و ایندکسها
🔰ذخیرهسازی در حالتهای مختلف: عادی، Idempotency و تراکنشها
🔰تنظیمات کلیدی تاپیکها و سیاستهای نگهداری دادهها
🔰مکانیزم پاکسازی و Tombstones
🔰تاپیک __consumer_offsets و مدیریت آفستهای مصرفکنندگان
📹 ویدئوی این جلسه در این لینک قابل مشاهده است.
برای مشاهده تمام موضوعات و مطالب این جلسه، روی لینک جلسه ۴ کلیک کنید.
❤2👏2🔥1🙏1
🎥 ویدئوی جدید منتشر شد: رپلیکیشن در کافکا — درک عمیق از مکانیزم تکثیر دادهها
در این جلسه از دوره تخصصی آموزش کافکا، به یکی از بنیادیترین و در عین حال کمتر درکشدهترین بخشهای کافکا یعنی رپلیکیشن (Replication) پرداختهایم.
📦 جایی که دادههای هر پارتیشن در چندین بروکر تکرار میشوند تا سیستم در برابر خطا، قطعی و از دست رفتن داده مقاوم بماند.
در این ویدئو موارد زیر بررسی میشوند:
🔹 رپلیکیشن در سطح پارتیشن چگونه عمل میکند؟
🔹 تفاوت نقش رهبر (Leader) و پیرو (Follower) چیست؟
🔹 مفهوم ISR (In-Sync Replicas) دقیقاً چه نقشی در پایداری داده دارد؟
🔹شاخص High Watermark چگونه تعیین میشود و چرا در مصرف داده حیاتی است؟
🔹 ارتباط بین تنظیمات replication.factor، min.insync.replicas و acks چیست و چطور باید مقدار مناسب را انتخاب کنیم؟
🔹 در صورت خرابی بروکر یا تأخیر در همگامسازی، چه اتفاقی میافتد و چطور میتوان از unclean leader election جلوگیری کرد؟
🎯 اگر میخواهید بدانید کافکا در پشتصحنه چگونه با چند بروکر دادهها را همگام نگه میدارد و چه مکانیزمهایی باعث حفظ پایداری سیستم میشود، این ویدئو را از دست ندهید.
📺 تماشای کامل ویدئو در یوتیوب:
👉 https://youtu.be/l30jp3iXooE
🔗 سایر دورهها و آموزشهای مدرسه مهندسی داده سپهرام:
https://sepahram.ir/courses
در این جلسه از دوره تخصصی آموزش کافکا، به یکی از بنیادیترین و در عین حال کمتر درکشدهترین بخشهای کافکا یعنی رپلیکیشن (Replication) پرداختهایم.
📦 جایی که دادههای هر پارتیشن در چندین بروکر تکرار میشوند تا سیستم در برابر خطا، قطعی و از دست رفتن داده مقاوم بماند.
در این ویدئو موارد زیر بررسی میشوند:
🔹 رپلیکیشن در سطح پارتیشن چگونه عمل میکند؟
🔹 تفاوت نقش رهبر (Leader) و پیرو (Follower) چیست؟
🔹 مفهوم ISR (In-Sync Replicas) دقیقاً چه نقشی در پایداری داده دارد؟
🔹شاخص High Watermark چگونه تعیین میشود و چرا در مصرف داده حیاتی است؟
🔹 ارتباط بین تنظیمات replication.factor، min.insync.replicas و acks چیست و چطور باید مقدار مناسب را انتخاب کنیم؟
🔹 در صورت خرابی بروکر یا تأخیر در همگامسازی، چه اتفاقی میافتد و چطور میتوان از unclean leader election جلوگیری کرد؟
🎯 اگر میخواهید بدانید کافکا در پشتصحنه چگونه با چند بروکر دادهها را همگام نگه میدارد و چه مکانیزمهایی باعث حفظ پایداری سیستم میشود، این ویدئو را از دست ندهید.
📺 تماشای کامل ویدئو در یوتیوب:
👉 https://youtu.be/l30jp3iXooE
🔗 سایر دورهها و آموزشهای مدرسه مهندسی داده سپهرام:
https://sepahram.ir/courses
YouTube
Deep Dive into Kafka Replication & ISR
📝 Denoscription:
In this video, we take a deep and practical look at how replication works in Apache Kafka, one of the most critical mechanisms that guarantees fault tolerance, durability, and data consistency across your Kafka cluster.
This session is presented…
In this video, we take a deep and practical look at how replication works in Apache Kafka, one of the most critical mechanisms that guarantees fault tolerance, durability, and data consistency across your Kafka cluster.
This session is presented…
❤4👍2🙏1
وقتی Kafka سادهتر، سریعتر و سبکتر میشود: آشنایی با Redpanda در دوره تخصصی کافکا 🎥
در بخش تازهای از دوره آموزش تخصصی کافکا در مدرسه مهندسی داده سپهرام، با یکی از جایگزینهای قدرتمند و مدرن Kafka یعنی Redpanda آشنا میشویم.
در این ویدیو که بهصورت کارگاهی و کاملاً عملی برگزار شده است، مراحل زیر را گامبهگام انجام میدهیم 👇
🔹 راهاندازی یک کلاستر تکنودی از Redpanda به همراه Redpanda Console
🔹 اجرای دو رابط کاربری معروف دنیای Kafka یعنی AKHQ و Kafka-UI (Kafbat) و بررسی سازگاری کامل آنها با Redpanda
🔹 کار با ابزار خط فرمان rpk برای مدیریت کلاستر و پیکربندیها
🔹 ساخت یک پایپلاین واقعی با Redpanda Connect و زبان Bloblang برای پردازش فایلهای CSV
🔹 و در نهایت، اجرای PostgreSQL CDC با استفاده از Kafka Connect + Debezium برای همگامسازی بلادرنگ دادهها
این بخش از دوره، دیدی جامع از تواناییهای Redpanda در دنیای استریم دیتا و جایگاه آن در اکوسیستم Kafka ارائه میدهد.
📺 ویدیو کامل این کارگاه را میتوانید از طریق لینک زیر در یوتیوب مشاهده کنید:
👉 🔗 https://youtu.be/nu_L4OSRUZc
🎓 این ویدیو بخشی از دوره آموزش تخصصی Kafka از مدرسه مهندسی داده سپهرام (Sepahram) است.
برای مشاهده دورهها به آدرس زیر مراجعه کنید:
🌐 https://sepahram.ir/courses/
📢 کانال رسمی سپهرام در تلگرام:
📬 https://news.1rj.ru/str/sepahram_school
🔖 #Kafka #Redpanda #StreamingData #DataEngineering #Debezium #PostgreSQL #KafkaConnect #RealTimeData #Sepahram #مدرسه_مهندسی_داده #کافکا #داده_جاری #مهندسی_داده
در بخش تازهای از دوره آموزش تخصصی کافکا در مدرسه مهندسی داده سپهرام، با یکی از جایگزینهای قدرتمند و مدرن Kafka یعنی Redpanda آشنا میشویم.
در این ویدیو که بهصورت کارگاهی و کاملاً عملی برگزار شده است، مراحل زیر را گامبهگام انجام میدهیم 👇
🔹 راهاندازی یک کلاستر تکنودی از Redpanda به همراه Redpanda Console
🔹 اجرای دو رابط کاربری معروف دنیای Kafka یعنی AKHQ و Kafka-UI (Kafbat) و بررسی سازگاری کامل آنها با Redpanda
🔹 کار با ابزار خط فرمان rpk برای مدیریت کلاستر و پیکربندیها
🔹 ساخت یک پایپلاین واقعی با Redpanda Connect و زبان Bloblang برای پردازش فایلهای CSV
🔹 و در نهایت، اجرای PostgreSQL CDC با استفاده از Kafka Connect + Debezium برای همگامسازی بلادرنگ دادهها
این بخش از دوره، دیدی جامع از تواناییهای Redpanda در دنیای استریم دیتا و جایگاه آن در اکوسیستم Kafka ارائه میدهد.
📺 ویدیو کامل این کارگاه را میتوانید از طریق لینک زیر در یوتیوب مشاهده کنید:
👉 🔗 https://youtu.be/nu_L4OSRUZc
🎓 این ویدیو بخشی از دوره آموزش تخصصی Kafka از مدرسه مهندسی داده سپهرام (Sepahram) است.
برای مشاهده دورهها به آدرس زیر مراجعه کنید:
🌐 https://sepahram.ir/courses/
📢 کانال رسمی سپهرام در تلگرام:
📬 https://news.1rj.ru/str/sepahram_school
🔖 #Kafka #Redpanda #StreamingData #DataEngineering #Debezium #PostgreSQL #KafkaConnect #RealTimeData #Sepahram #مدرسه_مهندسی_داده #کافکا #داده_جاری #مهندسی_داده
❤6👍1
وقتی SQL هم حلقه For دارد! نگاهی به Lateral Join در PostgreSQL
اگر در حوزه نرمافزار، تحلیل داده یا دیتابیس کار میکنید، احتمالاً با انواع JOINهای معمول در SQL مثل INNER JOIN و LEFT JOIN آشنا هستید.
اما یکی از جوینهایی که کمتر دربارهاش صحبت میشود و در عین حال بسیار مفید و کاربردی محسوب میشود، LATERAL JOIN است.
بیایید با یک مثال شروع کنیم 👇
فرض کنید یک جدول از محصولات دارید و میخواهید برای هر محصول، آمارهایی مثل:
🔰 مجموع کل فروش،
🔰حجم فروش،
🔰تعداد مشتریان منحصربهفرد،
🔰و میانگین فروش
در سه ماه گذشته را بهدست آورید (به تفکیک ماه).
اگر بخواهید این کار را با زبانهایی مثل Python یا JavaScript انجام دهید، معمولاً یک حلقه (for) روی تمام محصولات اجرا میکنید و درون آن، برای هر محصول، محاسبات آماری مربوط به فروش را انجام میدهید.
در واقع، یک حلقه بیرونی برای محصولات و یک حلقه داخلی برای فروشهای هر محصول دارید. در SQL هم میتوان دقیقاً همین رفتار را شبیهسازی کرد: با استفاده از LATERAL JOIN.
اینجاست که Lateral مثل یک پل ارتباطی عمل میکند:
به همین دلیل معمولاً از CROSS JOIN LATERAL استفاده میکنیم، چون شرط اتصال درون زیرکوئری و با WHERE تعریف میشود و در اینجا Inner Join معنا نخواهد داشت.
💫 نتیجه این رهیافت
میتوانید بهسادگی کوئریهایی بنویسید که مثلاً:
🌟 «ده محصول پرفروش هر کتگوری» را پیدا کند،
🌟یا برای هر مشتری، آخرین تراکنش ثبتشدهاش را نمایش دهد،
🌟یا حتی تحلیلهای زمانی و Top-N را مستقیماً داخل SQL انجام دهد: بدون نیاز به کدهای پیچیده و توابع پنجرهای
🎥 برای آشنایی دقیقتر با این مفهوم، یک ویدئوی آموزشی حدود ۴۰ دقیقهای آماده کردهام که در آن، با مثالهای واقعی و کاربردی نحوهی استفاده از LATERAL JOIN را گامبهگام توضیح دادهام.
🔗 لینک مشاهده ویدئو در یوتیوب:
👉 https://youtu.be/vVc2EewTSQU
💡 در این ویدئو یاد موارد زیر را به صورت عملی مرور میکنیم:
✅ایدهی اصلی و کاربرد LATERAL JOIN
✅تفاوت آن با جوینهای معمول
✅نوشتن کوئریهای Top-N per Group
✅تحلیل دادههای واقعی (مشتریان، فروش، زمان)
✅و نکات مهم برای بهینهسازی عملکرد کوئری
📚 این ویدئو بخشی از دورهی PostgreSQL Practical Course در مدرسه مهندسی داده سپهرام است.
👉 https://sepahram.ir/courses
#PostgreSQL #SQL #DataEngineering #Database #LateralJoin #Sepahram #BigData #PostgresTutorial #Analytics
اگر در حوزه نرمافزار، تحلیل داده یا دیتابیس کار میکنید، احتمالاً با انواع JOINهای معمول در SQL مثل INNER JOIN و LEFT JOIN آشنا هستید.
اما یکی از جوینهایی که کمتر دربارهاش صحبت میشود و در عین حال بسیار مفید و کاربردی محسوب میشود، LATERAL JOIN است.
بیایید با یک مثال شروع کنیم 👇
فرض کنید یک جدول از محصولات دارید و میخواهید برای هر محصول، آمارهایی مثل:
🔰 مجموع کل فروش،
🔰حجم فروش،
🔰تعداد مشتریان منحصربهفرد،
🔰و میانگین فروش
در سه ماه گذشته را بهدست آورید (به تفکیک ماه).
اگر بخواهید این کار را با زبانهایی مثل Python یا JavaScript انجام دهید، معمولاً یک حلقه (for) روی تمام محصولات اجرا میکنید و درون آن، برای هر محصول، محاسبات آماری مربوط به فروش را انجام میدهید.
در واقع، یک حلقه بیرونی برای محصولات و یک حلقه داخلی برای فروشهای هر محصول دارید. در SQL هم میتوان دقیقاً همین رفتار را شبیهسازی کرد: با استفاده از LATERAL JOIN.
اینجاست که Lateral مثل یک پل ارتباطی عمل میکند:
⚡️ به زیرکوئری اجازه میدهد به دادههای هر ردیف از جدول اصلی دسترسی داشته باشد. یعنی در زیرکوئری، رکوردها ابتدا بر اساس رابطه آنها با جدول اصلی فیلتر میشوند و سپس محاسبات آماری روی آنها انجام میشود و نهایتا هم در کنار رکوردهای جدول اصلی قرار میگیرند.
به همین دلیل معمولاً از CROSS JOIN LATERAL استفاده میکنیم، چون شرط اتصال درون زیرکوئری و با WHERE تعریف میشود و در اینجا Inner Join معنا نخواهد داشت.
💫 نتیجه این رهیافت
میتوانید بهسادگی کوئریهایی بنویسید که مثلاً:
🌟 «ده محصول پرفروش هر کتگوری» را پیدا کند،
🌟یا برای هر مشتری، آخرین تراکنش ثبتشدهاش را نمایش دهد،
🌟یا حتی تحلیلهای زمانی و Top-N را مستقیماً داخل SQL انجام دهد: بدون نیاز به کدهای پیچیده و توابع پنجرهای
🎥 برای آشنایی دقیقتر با این مفهوم، یک ویدئوی آموزشی حدود ۴۰ دقیقهای آماده کردهام که در آن، با مثالهای واقعی و کاربردی نحوهی استفاده از LATERAL JOIN را گامبهگام توضیح دادهام.
🔗 لینک مشاهده ویدئو در یوتیوب:
👉 https://youtu.be/vVc2EewTSQU
💡 در این ویدئو یاد موارد زیر را به صورت عملی مرور میکنیم:
✅ایدهی اصلی و کاربرد LATERAL JOIN
✅تفاوت آن با جوینهای معمول
✅نوشتن کوئریهای Top-N per Group
✅تحلیل دادههای واقعی (مشتریان، فروش، زمان)
✅و نکات مهم برای بهینهسازی عملکرد کوئری
📚 این ویدئو بخشی از دورهی PostgreSQL Practical Course در مدرسه مهندسی داده سپهرام است.
👉 https://sepahram.ir/courses
#PostgreSQL #SQL #DataEngineering #Database #LateralJoin #Sepahram #BigData #PostgresTutorial #Analytics
❤5👍2
کار با جداول بزرگ در PostgreSQL: همه چیز درباره پارتیشنینگ و کاربردهایش
در ادامه دوره #Postgres in Action و بخش کار با دیتابیسهای بزرگ، به یکی از مهمترین مباحث PostgreSQL یعنی پارتیشنینگ جداول (Table Partitioning) پرداختیم.
🌟 اما اصلاً پارتیشنینگ چیست و چرا باید از آن استفاده کنیم؟
مزایای اصلی آن شامل:
🚀 افزایش سرعت کوئریها: کوئریها فقط روی پارتیشنهای مرتبط اجرا میشوند و زمان پاسخ کاهش مییابد.
🛠 سهولت نگهداری: دادههای قدیمی یا آرشیو را راحتتر مدیریت و حذف میکنیم.
📊 بهینهسازی ایندکسها و منابع: حجم هر پارتیشن کمتر است و ایندکسها کارایی بهتری دارند.
در این ویدئوی نیمساعته، که بخش مفاهیم پایه پارتیشنینگ را پوشش میدهد، مطالب زیر مرور شد:
📌 مباحث مطرحشده:
✅مفهوم پارتیشنینگ و نقش آن در مدیریت دادههای بزرگ
✅انواع پارتیشنینگ در پستگرس: List، Range و Hash
✅پارتیشنبندی ترکیبی (Composite Partitioning) برای سناریوهای پیچیده
✅جدول اصلی به عنوان روتر/پروکسی و نحوه تعامل آن با پارتیشنها
✅فرآیند Partition Pruning برای بهینهسازی کوئریها
✅استفاده از Partition By Expression برای کنترل کامل روی پارتیشنبندی
✅دستورات Attach و Detach و مدیریت پارتیشنها
اگر با دیتابیسهای بزرگ کار میکنید و میخواهید عملکرد کوئریها و مدیریت دادهها را بهبود ببخشید، این ویدئو برای شما فوقالعاده کاربردی است.
📺 مشاهده ویدئو: https://youtu.be/gs2Rnp2kAOg
📚 برای مشاهده سایر ویدئوهای مدرسه مهندسی داده سپهرام:
🌐 https://sepahram.ir/courses/
کانال مهندسی داده: https://news.1rj.ru/str/bigdata_ir
در ادامه دوره #Postgres in Action و بخش کار با دیتابیسهای بزرگ، به یکی از مهمترین مباحث PostgreSQL یعنی پارتیشنینگ جداول (Table Partitioning) پرداختیم.
🌟 اما اصلاً پارتیشنینگ چیست و چرا باید از آن استفاده کنیم؟
پارتیشنینگ یعنی تقسیم یک جدول بزرگ به چند زیرجدول کوچکتر و قابل مدیریت بر اساس یک قاعده مشخص (مثل تاریخ، کشور یا شناسه).
مزایای اصلی آن شامل:
🚀 افزایش سرعت کوئریها: کوئریها فقط روی پارتیشنهای مرتبط اجرا میشوند و زمان پاسخ کاهش مییابد.
🛠 سهولت نگهداری: دادههای قدیمی یا آرشیو را راحتتر مدیریت و حذف میکنیم.
📊 بهینهسازی ایندکسها و منابع: حجم هر پارتیشن کمتر است و ایندکسها کارایی بهتری دارند.
در این ویدئوی نیمساعته، که بخش مفاهیم پایه پارتیشنینگ را پوشش میدهد، مطالب زیر مرور شد:
📌 مباحث مطرحشده:
✅مفهوم پارتیشنینگ و نقش آن در مدیریت دادههای بزرگ
✅انواع پارتیشنینگ در پستگرس: List، Range و Hash
✅پارتیشنبندی ترکیبی (Composite Partitioning) برای سناریوهای پیچیده
✅جدول اصلی به عنوان روتر/پروکسی و نحوه تعامل آن با پارتیشنها
✅فرآیند Partition Pruning برای بهینهسازی کوئریها
✅استفاده از Partition By Expression برای کنترل کامل روی پارتیشنبندی
✅دستورات Attach و Detach و مدیریت پارتیشنها
اگر با دیتابیسهای بزرگ کار میکنید و میخواهید عملکرد کوئریها و مدیریت دادهها را بهبود ببخشید، این ویدئو برای شما فوقالعاده کاربردی است.
📺 مشاهده ویدئو: https://youtu.be/gs2Rnp2kAOg
📚 برای مشاهده سایر ویدئوهای مدرسه مهندسی داده سپهرام:
🌐 https://sepahram.ir/courses/
کانال مهندسی داده: https://news.1rj.ru/str/bigdata_ir
👍4❤1
از Kafka تا Iceberg در کمتر از یک دقیقه؛ تجربه عملی AutoMQ
در مدرسه مهندسی داده سپهرام، همیشه تلاش کردهایم جدیدترین فناوریهای حوزه داده را بهصورت کاربردی و قابل استفاده در پروژههای واقعی ارائه کنیم. در ویدئویی که اخیراً در کانال یوتیوب مدرسه منتشر شده است، بهصورت کاملاً عملی کار با AutoMQ، جایگزین نوآورانه و cloud-first برای #Kafka و همچنین ذخیرهسازی مستقیم دادههای Kafka در Apache Iceberg و کوئریگیری آن با #DuckDB را بررسی کردهایم.
این جلسه بخشی از رویکرد ما برای آموزش معماریهای مدرن داده مانند Lakehouse، Zero-ETL و استریمپردازی ابری است.
در این ویدئو، مباحث زیر بهصورت مرحلهبهمرحله و عملی ارائه شده است:
✔️آشنایی با معماری AutoMQ و تفاوت آن با Kafka سنتی
✔️راهاندازی کامل AutoMQ، MinIO، Iceberg، Schema Registry و DuckDB با Docker Compose
✔️معرفی و تشریح قابلیت AutoMQ Table Topic
✔️ارسال داده Avro از طریق یک Producer پایتونی
✔️ذخیرهسازی خودکار دادهها از Kafka در جداول Iceberg بدون Kafka Connect و بدون Flink/Spark
✔️بررسی قابلیت Zero-ETL در سناریوی واقعی
✔️یکپارچگی Schema Registry و انتقال خودکار اسکیمـا به Iceberg
✔️مشاهده دادههای ذخیرهشده در Iceberg و اجرای کوئریهای تحلیلی با DuckDB
✔️بررسی قابلیت Time Travel، تکامل اسکیمـا (Schema Evolution) و Partitioning
✔️نکات مهم برای استقرار AutoMQ در محیط Production و تنظیمات پیشنهادی
برای مشاهده این آموزش کاربردی میتوانید ویدئو را در کانال یوتیوب مدرسه مشاهده کنید:
🎥 پیوند ویدئو:
https://lnkd.in/d4ZHK4n8
#Kafka #ApacheIceberg #AutoMQ #DataEngineering #DataPipeline #ZeroETL #DuckDB #Lakehouse
در مدرسه مهندسی داده سپهرام، همیشه تلاش کردهایم جدیدترین فناوریهای حوزه داده را بهصورت کاربردی و قابل استفاده در پروژههای واقعی ارائه کنیم. در ویدئویی که اخیراً در کانال یوتیوب مدرسه منتشر شده است، بهصورت کاملاً عملی کار با AutoMQ، جایگزین نوآورانه و cloud-first برای #Kafka و همچنین ذخیرهسازی مستقیم دادههای Kafka در Apache Iceberg و کوئریگیری آن با #DuckDB را بررسی کردهایم.
این جلسه بخشی از رویکرد ما برای آموزش معماریهای مدرن داده مانند Lakehouse، Zero-ETL و استریمپردازی ابری است.
🔰 اما AutoMQ دقیقا چیست ؟
کتابخانه AutoMQ یک کافکای بازنویسی شده است که مستقیماً بر پایه کدهای Kafka توسعه یافته و تنها لایه ذخیرهسازی آن بازطراحی شده است. در این معماری، پیامها به جای ذخیره روی دیسک هر بروکر، در یک فضای ذخیرهسازی خارجی مانند S3 یا MinIO قرار میگیرند. این تغییر مهم باعث میشود بتوان بروکرهای بدون دیسک داشت، مقیاسپذیری را بسیار سادهتر کرد و عملیات نگهداری را کاهش داد. علاوه بر این، AutoMQ در مدیریت خودکار مقیاسپذیری هنگام افزایش حجم داده، عملکردی بهمراتب بهتر از Kafka سنتی ارائه میدهد و همین موضوع آن را به یک گزینه مناسب برای تیمهای دواپس و محیطهای با بار سنگین داده تبدیل کرده است
در این ویدئو، مباحث زیر بهصورت مرحلهبهمرحله و عملی ارائه شده است:
✔️آشنایی با معماری AutoMQ و تفاوت آن با Kafka سنتی
✔️راهاندازی کامل AutoMQ، MinIO، Iceberg، Schema Registry و DuckDB با Docker Compose
✔️معرفی و تشریح قابلیت AutoMQ Table Topic
✔️ارسال داده Avro از طریق یک Producer پایتونی
✔️ذخیرهسازی خودکار دادهها از Kafka در جداول Iceberg بدون Kafka Connect و بدون Flink/Spark
✔️بررسی قابلیت Zero-ETL در سناریوی واقعی
✔️یکپارچگی Schema Registry و انتقال خودکار اسکیمـا به Iceberg
✔️مشاهده دادههای ذخیرهشده در Iceberg و اجرای کوئریهای تحلیلی با DuckDB
✔️بررسی قابلیت Time Travel، تکامل اسکیمـا (Schema Evolution) و Partitioning
✔️نکات مهم برای استقرار AutoMQ در محیط Production و تنظیمات پیشنهادی
برای مشاهده این آموزش کاربردی میتوانید ویدئو را در کانال یوتیوب مدرسه مشاهده کنید:
🎥 پیوند ویدئو:
https://lnkd.in/d4ZHK4n8
#Kafka #ApacheIceberg #AutoMQ #DataEngineering #DataPipeline #ZeroETL #DuckDB #Lakehouse
👍6❤3
معرفی یکی از پروژههای عملی دوره مهندسی داده سپهرام
در مدرسه مهندسی داده سپهرام همیشه تلاشمان این بوده که یادگیری فقط محدود به مفاهیم تئوری نباشد؛ بلکه هر آنچه آموزش داده میشود، در قالب پروژههای واقعی و قابلاجرا به مهارت عملی تبدیل شود.
امروز خوشحالیم یکی از پروژههای ارزشمند خروجی دوره مبانی مهندسی داده را معرفی کنیم؛ پروژهای که توسط محمد ابراهیمی عزیز توسعه داده شده و در ریپوی زیر قابل مشاهده است:
🔗 https://github.com/MohamadDesign/basic_dataengineer
🔍 این پروژه چیست و چه کاری انجام میدهد؟
این ریپو یک نمونهی کاملاً عملی از ساخت یک پایپلاین داده کامل از مبدا دادهها تا بصریسازی و گزارشات (End-to-End Data Pipeline) است که مخاطب دوره را با مفاهیم بنیادین مهندسی داده بهصورت کاربردی آشنا میکند. هنرجو در این پروژه تجربه میکند که داده چگونه تولید، منتقل، پردازش و در نهایت تحلیل میشود؛ فرآیندی که در مهندسی داده واقعی هر روز اتفاق میافتد.
🏗 معماری پروژه و جریان داده
معماری این پروژه به شکلی ساده اما کاملاً کاربردی طراحی شده است و با استفاده از Docker Compose اجرا میشود تا علاقهمندان بتوانند با کمترین پیچیدگی، یک معماری واقعی مهندسی داده را بالا بیاورند.
جریان داده در این پروژه به شکل زیر است:
1) تولید داده کاربران
- دادههای تصادفی شامل نام، کشور و زمان ثبتنام تولید میشوند.
- این دادهها ابتدا در PostgreSQL ذخیره میشوند.
- این مرحله معمولاً از طریق یک DAG در Apache Airflow یا یک اسکریپت پایتون مدیریت میشود.
2) انتقال داده به Kafka
- یک DAG دیگر در Airflow دادهها را از Postgres خوانده و به یک Topic در Apache Kafka ارسال میکند.
- کافکا در این معماری نقش Message Broker را ایفا میکند و امکان انتقال صفی و استریمی دادهها را فراهم میسازد.
3) پردازش و ذخیرهسازی نهایی
- دادهها از Kafka توسط یک ابزار پردازشی مثل Logstash خوانده میشوند.
- پس از اعمال پردازشهای لازم (فیلتر، پاکسازی، تبدیل ساختار)، دادهها به Elasticsearch ارسال میشوند.
4) بصریسازی و تحلیل
- دادههای ذخیرهشده در Elasticsearch در Kibana ویژوالایز میشوند.
- داشبوردهایی مانند توزیع کاربران، روند ثبتنام، و تحلیلهای زمانی در این بخش قابل ساخت هستند.
در یک نگاه کلی، هنرجو با چرخه واقعی یک Data Pipeline شامل Extract → Transform → Load → Analyze آشنا میشود؛ چرخهای که هستهی اصلی مهندسی داده در صنعت است.
✨ سخن پایانی
دیدن چنین پروژههایی از سمت هنرجویان، برای ما در سپهرام بسیار ارزشمند است؛ چون نشان میدهد مسیر آموزش دقیقاً با نیازهای روز صنعت مهندسی داده همسو شده و خروجیها به مهارت واقعی منجر شدهاند.
برای محمد ابراهیمی عزیز آرزوی موفقیت داریم و امیدواریم این پروژهها الهامبخش قدمهای بعدی علاقهمندان به دنیای داده باشد. 🚀
در مدرسه مهندسی داده سپهرام همیشه تلاشمان این بوده که یادگیری فقط محدود به مفاهیم تئوری نباشد؛ بلکه هر آنچه آموزش داده میشود، در قالب پروژههای واقعی و قابلاجرا به مهارت عملی تبدیل شود.
امروز خوشحالیم یکی از پروژههای ارزشمند خروجی دوره مبانی مهندسی داده را معرفی کنیم؛ پروژهای که توسط محمد ابراهیمی عزیز توسعه داده شده و در ریپوی زیر قابل مشاهده است:
🔗 https://github.com/MohamadDesign/basic_dataengineer
🔍 این پروژه چیست و چه کاری انجام میدهد؟
این ریپو یک نمونهی کاملاً عملی از ساخت یک پایپلاین داده کامل از مبدا دادهها تا بصریسازی و گزارشات (End-to-End Data Pipeline) است که مخاطب دوره را با مفاهیم بنیادین مهندسی داده بهصورت کاربردی آشنا میکند. هنرجو در این پروژه تجربه میکند که داده چگونه تولید، منتقل، پردازش و در نهایت تحلیل میشود؛ فرآیندی که در مهندسی داده واقعی هر روز اتفاق میافتد.
🏗 معماری پروژه و جریان داده
معماری این پروژه به شکلی ساده اما کاملاً کاربردی طراحی شده است و با استفاده از Docker Compose اجرا میشود تا علاقهمندان بتوانند با کمترین پیچیدگی، یک معماری واقعی مهندسی داده را بالا بیاورند.
جریان داده در این پروژه به شکل زیر است:
1) تولید داده کاربران
- دادههای تصادفی شامل نام، کشور و زمان ثبتنام تولید میشوند.
- این دادهها ابتدا در PostgreSQL ذخیره میشوند.
- این مرحله معمولاً از طریق یک DAG در Apache Airflow یا یک اسکریپت پایتون مدیریت میشود.
2) انتقال داده به Kafka
- یک DAG دیگر در Airflow دادهها را از Postgres خوانده و به یک Topic در Apache Kafka ارسال میکند.
- کافکا در این معماری نقش Message Broker را ایفا میکند و امکان انتقال صفی و استریمی دادهها را فراهم میسازد.
3) پردازش و ذخیرهسازی نهایی
- دادهها از Kafka توسط یک ابزار پردازشی مثل Logstash خوانده میشوند.
- پس از اعمال پردازشهای لازم (فیلتر، پاکسازی، تبدیل ساختار)، دادهها به Elasticsearch ارسال میشوند.
4) بصریسازی و تحلیل
- دادههای ذخیرهشده در Elasticsearch در Kibana ویژوالایز میشوند.
- داشبوردهایی مانند توزیع کاربران، روند ثبتنام، و تحلیلهای زمانی در این بخش قابل ساخت هستند.
در یک نگاه کلی، هنرجو با چرخه واقعی یک Data Pipeline شامل Extract → Transform → Load → Analyze آشنا میشود؛ چرخهای که هستهی اصلی مهندسی داده در صنعت است.
✨ سخن پایانی
دیدن چنین پروژههایی از سمت هنرجویان، برای ما در سپهرام بسیار ارزشمند است؛ چون نشان میدهد مسیر آموزش دقیقاً با نیازهای روز صنعت مهندسی داده همسو شده و خروجیها به مهارت واقعی منجر شدهاند.
برای محمد ابراهیمی عزیز آرزوی موفقیت داریم و امیدواریم این پروژهها الهامبخش قدمهای بعدی علاقهمندان به دنیای داده باشد. 🚀
GitHub
GitHub - MohamadDesign/basic_dataengineer: this project coded for sepahram data engineer school
this project coded for sepahram data engineer school - MohamadDesign/basic_dataengineer
👍5❤3
Forwarded from مهندسی داده
پیشنهاد ویژه Black Friday – مدرسه مهندسی داده سپهرام
به مناسبت Black Friday، امکان استفاده از ۴۰٪ تخفیف برای تمامی دورههای مدرسه مهندسی داده سپهرام فراهم شده است.
تنها کافی است هنگام خرید دوره، کد BLK1404 را وارد کنید.
در این کمپین، تمام دورهها شامل این تخفیف میشوند:
🔰مبانی مهندسی داده
🔰 آپاچی کافکا
🔰آپاچی اسپارک ( از این هفته شروع میشود)
🔰 آپاچی ایرفلو
🔰 پستگرس
🔰 کلیکهوس
فهرست تمامی دورهها:
https://sepahram.ir/courses/
اگر قصد ارتقای مهارتهای فنی، ورود به دنیای مهندسی داده یا رشد شغلی دارید، این فرصت را از دست ندهید.
⏳ اعتبار: محدود و ویژه Black Friday (تا دهم آذرماه)
🎟 کد تخفیف: BLK1404
برای اطلاعات بیشتر و ثبتنام: https://news.1rj.ru/str/sepahram_ir
به مناسبت Black Friday، امکان استفاده از ۴۰٪ تخفیف برای تمامی دورههای مدرسه مهندسی داده سپهرام فراهم شده است.
تنها کافی است هنگام خرید دوره، کد BLK1404 را وارد کنید.
در این کمپین، تمام دورهها شامل این تخفیف میشوند:
🔰مبانی مهندسی داده
🔰 آپاچی کافکا
🔰آپاچی اسپارک ( از این هفته شروع میشود)
🔰 آپاچی ایرفلو
🔰 پستگرس
🔰 کلیکهوس
فهرست تمامی دورهها:
https://sepahram.ir/courses/
اگر قصد ارتقای مهارتهای فنی، ورود به دنیای مهندسی داده یا رشد شغلی دارید، این فرصت را از دست ندهید.
⏳ اعتبار: محدود و ویژه Black Friday (تا دهم آذرماه)
🎟 کد تخفیف: BLK1404
برای اطلاعات بیشتر و ثبتنام: https://news.1rj.ru/str/sepahram_ir
❤4👍3
آغاز رسمی دوره جامع آموزش Apache Spark – مدرسه مهندسی داده سپهرام
با افتخار اعلام میکنیم که دوره تخصصی Spark Deep Dive رسماً آغاز شد!
این دوره برای مهندسان داده، تحلیلگران، علاقهمندان دنیای پردازش توزیعشده و تمام کسانی طراحی شده که میخواهند در مسیر حرفهای کار با دادههای حجیم، یک گام بزرگ به جلو بردارند.
برای اینکه با حال و هوای دوره آشنا شوید، جلسه اول دوره به صورت کامل و رایگان در اختیار همه علاقهمندان قرار گرفته است.
کافی است روی لینک زیر کلیک کنید و محتوای جلسه را مشاهده کنید:
👉 جلسه اول دوره آموزشی اسپارک
📌 محتوای جلسه اول – «آشنایی با مفاهیم پایه و شروع عملی با اسپارک»
در این جلسه مقدماتی، مفاهیم کلیدی زیر را بهصورت ساده، دقیق و کاربردی مرور میکنیم:
🔰 مروری بر Apache Spark و جایگاه آن در معماریهای نوین داده
🔰 آشنایی با معماری و مفاهیم پایه اسپارک (به همراه ویدئوی آموزشی)
🔰 معرفی موتورهای بهینهسازی Catalyst و Tungsten
🔰 مروری بر امکانات کلیدی در Spark 3 و Spark 4
🔰 معرفی RDDها، ترنسفورمیشنها و اکشنهای رایج (به همراه ویدئو)
🔰 نصب و راهاندازی Spark 4 به کمک Jupyter Notebook و PySpark
🎓 این جلسه، نقطه شروع مسیر شما برای ورود به دنیای پردازش توزیعشده است.
در ادامه دوره، گامبهگام وارد مباحث عملی، معماری عمیق، پردازشهای پیچیده، بهینهسازی و انجام پروژههای واقعی خواهیم شد.
اگر در مسیر نصب، راهاندازی یا اجرای مثالها نیاز به هرگونه کمک داشتید، تیم ما در کنار شماست.
با آرزوی یک سفر هیجانانگیز در مسیر یادگیری Apache Spark!
✨ مدرسه مهندسی داده سپهرام
با افتخار اعلام میکنیم که دوره تخصصی Spark Deep Dive رسماً آغاز شد!
این دوره برای مهندسان داده، تحلیلگران، علاقهمندان دنیای پردازش توزیعشده و تمام کسانی طراحی شده که میخواهند در مسیر حرفهای کار با دادههای حجیم، یک گام بزرگ به جلو بردارند.
برای اینکه با حال و هوای دوره آشنا شوید، جلسه اول دوره به صورت کامل و رایگان در اختیار همه علاقهمندان قرار گرفته است.
کافی است روی لینک زیر کلیک کنید و محتوای جلسه را مشاهده کنید:
👉 جلسه اول دوره آموزشی اسپارک
📌 محتوای جلسه اول – «آشنایی با مفاهیم پایه و شروع عملی با اسپارک»
در این جلسه مقدماتی، مفاهیم کلیدی زیر را بهصورت ساده، دقیق و کاربردی مرور میکنیم:
🔰 مروری بر Apache Spark و جایگاه آن در معماریهای نوین داده
🔰 آشنایی با معماری و مفاهیم پایه اسپارک (به همراه ویدئوی آموزشی)
🔰 معرفی موتورهای بهینهسازی Catalyst و Tungsten
🔰 مروری بر امکانات کلیدی در Spark 3 و Spark 4
🔰 معرفی RDDها، ترنسفورمیشنها و اکشنهای رایج (به همراه ویدئو)
🔰 نصب و راهاندازی Spark 4 به کمک Jupyter Notebook و PySpark
🎓 این جلسه، نقطه شروع مسیر شما برای ورود به دنیای پردازش توزیعشده است.
در ادامه دوره، گامبهگام وارد مباحث عملی، معماری عمیق، پردازشهای پیچیده، بهینهسازی و انجام پروژههای واقعی خواهیم شد.
اگر در مسیر نصب، راهاندازی یا اجرای مثالها نیاز به هرگونه کمک داشتید، تیم ما در کنار شماست.
با آرزوی یک سفر هیجانانگیز در مسیر یادگیری Apache Spark!
✨ مدرسه مهندسی داده سپهرام
👍8
چگونه دادههای تاریخی را در PostgreSQL آرشیو کنیم؟ و همچنان به تمام دادهها دسترسی داشته باشیم
دادهها هر روز بزرگتر و پیچیدهتر میشوند و مدیریت آنها بدون افت عملکرد، یکی از چالشهای بزرگ مهندسان داده است. در این ویدئو و کارگاه عملی، ما به شما نشان میدهیم چگونه با Foreign Data Wrapper (#FDW) و جداول پارتیشنبندی شده #PostgreSQL دادههای قدیمی و تاریخی را آرشیو کنید، بدون اینکه عملکرد دیتابیس اصلی کاهش یابد و همزمان کاربر بتواند روی تمام دادهها، کوئری اجرا کند.
⚡️نگاهی به قابلیت FDW در پستگرس
در این آموزش ابتدا مفهوم #FDW را بررسی میکنیم؛ یک مکانیزم قدرتمند اتصال به سایر دیتابیسها در پستگرس. Foreign Data Wrapper مثل یک مترجم میانسیستمی عمل میکند؛ ابزاری که به #PostgreSQL یاد میدهد با دیتابیسهای دیگر حرف بزند، آنها را بفهمد و حتی با آنها کار کند، درست مثل اینکه جزیی از خودِ سیستم باشند.
قابلیت FDW جوهرهٔ یک ایدهی ساده اما قدرتمند است: داده میتواند هرجایی باشد، اما تجربهٔ کار با آن باید یکپارچه باقی بماند.
💡 آنچه در این کارگاه یکساعته میبینید
در این کارگاه، یک راهکار عملی برای آرشیو دادهها با استفاده از پارتیشنبندی PostgreSQL و Postgres_FDW بررسی میشود تا بتوانید دادههای تاریخی را شفاف، مقیاسپذیر و قابلمدیریت نگه دارید.
ایده بسیار ساده اما قدرتمند است:
ابتدا دادهها را در یک جدول پارتیشنبندیشده (مثلاً سالانه یا ماهانه) نگه میداریم. سپس یک دیتابیس جداگانه برای آرشیو میسازیم و پارتیشنهای قدیمی را به آن منتقل میکنیم. پس از حذف پارتیشن محلی، همان پارتیشن را بهصورت یک foreign table و همچنان بهعنوان پارتیشنی از جدول اصلی تعریف میکنیم.
نتیجه:
✨ دادههای جدید روی سرور اصلی و با سرعت بالا بازیابی میشوند ⚡️
✨دادههای قدیمی بیصدا از سرور آرشیو خوانده میشوند 🔗
✨سرور اصلی سبک و سریع باقی میماند، درحالیکه دسترسی به کل تاریخچه حفظ میشود 📉✨
ترکیب پارتیشنبندی و FDW یک معماری تمیز و قدرتمند برای آرشیو داده در PostgreSQL ایجاد میکند.
این آموزش شامل موارد زیر است:
🔰 ساخت جداول پارتیشنبندی شده برای مدیریت دادهها بر اساس تاریخ
🔰 ایجاد اتصال با FDW به یک دیتابیس آرشیو جداگانه
🔰 تبدیل جدول محلی به پارتیشن خارجی و مدیریت دادهها بین سرور اصلی و آرشیو
🔰 اجرای کوئریها روی دادههای توزیعشده بدون نیاز به تغییر در اپلیکیشن
🔰 مهاجرت و نگهداری دادههای تاریخی به شکلی شفاف و قابل کنترل
با مشاهده این کارگاه، شما قادر خواهید بود دادههای آرشیوی را به صورت امن، مقیاسپذیر و یکپارچه مدیریت کنید و تجربهای عملی از استفادهی FDW در سناریوهای واقعی آرشیو دادهها به دست آورید.
🎥 تماشای ویدئو:
YouTube - https://youtu.be/RdGUIbNzNH4
💻 کدهای ورکشاپ:
Workshop Codes - https://github.com/sepahram-school/workshops/tree/main/3-Postgres-Data-Archiving-With-FDW
دادهها هر روز بزرگتر و پیچیدهتر میشوند و مدیریت آنها بدون افت عملکرد، یکی از چالشهای بزرگ مهندسان داده است. در این ویدئو و کارگاه عملی، ما به شما نشان میدهیم چگونه با Foreign Data Wrapper (#FDW) و جداول پارتیشنبندی شده #PostgreSQL دادههای قدیمی و تاریخی را آرشیو کنید، بدون اینکه عملکرد دیتابیس اصلی کاهش یابد و همزمان کاربر بتواند روی تمام دادهها، کوئری اجرا کند.
⚡️نگاهی به قابلیت FDW در پستگرس
در این آموزش ابتدا مفهوم #FDW را بررسی میکنیم؛ یک مکانیزم قدرتمند اتصال به سایر دیتابیسها در پستگرس. Foreign Data Wrapper مثل یک مترجم میانسیستمی عمل میکند؛ ابزاری که به #PostgreSQL یاد میدهد با دیتابیسهای دیگر حرف بزند، آنها را بفهمد و حتی با آنها کار کند، درست مثل اینکه جزیی از خودِ سیستم باشند.
با FDW، مفهوم «دادهٔ خارجی» عملاً از بین میرود. کوئریای که روی یک جدول محلی اجرا میکنید، میتواند بیصدا و هوشمندانه به سراغ یک جدول دوردست در سروری دیگر برود، نتایج را برگرداند و همهچیز را طوری نمایش دهد که انگار محلی بوده است. این یعنی یکپارچگی در دسترسی، بدون تغییر کدهای برنامه، بدون اتصالهای اضافی و بدون مدیریت پیچیدگیهای پشتصحنه.
قابلیت FDW جوهرهٔ یک ایدهی ساده اما قدرتمند است: داده میتواند هرجایی باشد، اما تجربهٔ کار با آن باید یکپارچه باقی بماند.
💡 آنچه در این کارگاه یکساعته میبینید
در این کارگاه، یک راهکار عملی برای آرشیو دادهها با استفاده از پارتیشنبندی PostgreSQL و Postgres_FDW بررسی میشود تا بتوانید دادههای تاریخی را شفاف، مقیاسپذیر و قابلمدیریت نگه دارید.
ایده بسیار ساده اما قدرتمند است:
ابتدا دادهها را در یک جدول پارتیشنبندیشده (مثلاً سالانه یا ماهانه) نگه میداریم. سپس یک دیتابیس جداگانه برای آرشیو میسازیم و پارتیشنهای قدیمی را به آن منتقل میکنیم. پس از حذف پارتیشن محلی، همان پارتیشن را بهصورت یک foreign table و همچنان بهعنوان پارتیشنی از جدول اصلی تعریف میکنیم.
نتیجه:
✨ دادههای جدید روی سرور اصلی و با سرعت بالا بازیابی میشوند ⚡️
✨دادههای قدیمی بیصدا از سرور آرشیو خوانده میشوند 🔗
✨سرور اصلی سبک و سریع باقی میماند، درحالیکه دسترسی به کل تاریخچه حفظ میشود 📉✨
ترکیب پارتیشنبندی و FDW یک معماری تمیز و قدرتمند برای آرشیو داده در PostgreSQL ایجاد میکند.
این آموزش شامل موارد زیر است:
🔰 ساخت جداول پارتیشنبندی شده برای مدیریت دادهها بر اساس تاریخ
🔰 ایجاد اتصال با FDW به یک دیتابیس آرشیو جداگانه
🔰 تبدیل جدول محلی به پارتیشن خارجی و مدیریت دادهها بین سرور اصلی و آرشیو
🔰 اجرای کوئریها روی دادههای توزیعشده بدون نیاز به تغییر در اپلیکیشن
🔰 مهاجرت و نگهداری دادههای تاریخی به شکلی شفاف و قابل کنترل
با مشاهده این کارگاه، شما قادر خواهید بود دادههای آرشیوی را به صورت امن، مقیاسپذیر و یکپارچه مدیریت کنید و تجربهای عملی از استفادهی FDW در سناریوهای واقعی آرشیو دادهها به دست آورید.
🎥 تماشای ویدئو:
YouTube - https://youtu.be/RdGUIbNzNH4
💻 کدهای ورکشاپ:
Workshop Codes - https://github.com/sepahram-school/workshops/tree/main/3-Postgres-Data-Archiving-With-FDW
❤3👍3🔥1
کافکا کانکت؛ ستون اتصال کافکا به دنیای واقعی
در معماریهای داده مدرن، تنها داشتن یک پلتفرم قدرتمند برای پردازش و انتقال پیامها کافی نیست، ما باید بتوانیم بهسادگی و بدون نوشتن کد اضافی، داده را از سیستمهای مختلف به کافکا وارد کنیم یا از کافکا به مقصدهای متنوع منتقل کنیم. Kafka Connect یک فریمورک استاندارد، مقیاسپذیر و قابلاعتماد برای اتصال Kafka به دنیای بیرون است.
از Datagen برای تولید دادههای نمونه، تا #Debezium برای CDC روی دیتابیسها و تا #Redis Sink برای انتقال داده به سیستمهای کش، Kafka Connect پایه اصلی ساخت Data Pipelineهای استاندارد، قابل اطمینان و Production-Grade است.
در ویدئوی جدید کانال یوتیوب مدرسه مهندسی داده سپهرام، یک کارگاه عملی کامل آماده کردهایم که در آن:
⚙️ یک کلاستر Kafka Connect با Docker Compose راهاندازی میکنیم
📥کانکتور Datagen را اجرا میکنیم
🔄 کانکتور Debezium را روی PostgreSQL راه میاندازیم و تغییرات جدولها را به کافکا استریم میکنیم
📤 دادهها را با Redis Sink Connector به Redis منتقل میکنیم
اگر میخواهید Kafka Connect را در عمل ببینید، این ویدئو مخصوص شماست
▶️ مشاهده در یوتیوب: https://youtu.be/Uxn5pJRhmjM
این بخش بخشی از دوره آموزشی کافکا در مدرسه مهندسی داده سپهرام است.
در معماریهای داده مدرن، تنها داشتن یک پلتفرم قدرتمند برای پردازش و انتقال پیامها کافی نیست، ما باید بتوانیم بهسادگی و بدون نوشتن کد اضافی، داده را از سیستمهای مختلف به کافکا وارد کنیم یا از کافکا به مقصدهای متنوع منتقل کنیم. Kafka Connect یک فریمورک استاندارد، مقیاسپذیر و قابلاعتماد برای اتصال Kafka به دنیای بیرون است.
کافکا کانکت سرویس جانبی و رایج کافکاست که وظیفه آن مدیریت و اجرای پایدار کانکتورها است؛ اجزایی پیکربندیمحور که مشخص میکنند داده چگونه باید از یک سیستم خارجی وارد کافکا شود (Source) یا از کافکا به جایی دیگر برود (Sink). هر Connector تنها یک تعریف پیکربندیشده است که روی یک Plugin (مجموعهای از کلاسهای جاوا که باید نصب شود) سوار میشود و مشخص میکند داده چگونه باید از سیستمهای خارجی وارد Kafka شود یا از Kafka به مقصد دیگری منتقل گردد. منطق تعامل، درون Plugin است، اما Kafka Connect مسئول اجرای مداوم، نظارت، مدیریت خطا، مقیاسپذیری و هماهنگی Taskها که در قالب کانکتورها تعریف میشوند را برعهده دارد.
از Datagen برای تولید دادههای نمونه، تا #Debezium برای CDC روی دیتابیسها و تا #Redis Sink برای انتقال داده به سیستمهای کش، Kafka Connect پایه اصلی ساخت Data Pipelineهای استاندارد، قابل اطمینان و Production-Grade است.
در ویدئوی جدید کانال یوتیوب مدرسه مهندسی داده سپهرام، یک کارگاه عملی کامل آماده کردهایم که در آن:
⚙️ یک کلاستر Kafka Connect با Docker Compose راهاندازی میکنیم
📥کانکتور Datagen را اجرا میکنیم
🔄 کانکتور Debezium را روی PostgreSQL راه میاندازیم و تغییرات جدولها را به کافکا استریم میکنیم
📤 دادهها را با Redis Sink Connector به Redis منتقل میکنیم
اگر میخواهید Kafka Connect را در عمل ببینید، این ویدئو مخصوص شماست
▶️ مشاهده در یوتیوب: https://youtu.be/Uxn5pJRhmjM
این بخش بخشی از دوره آموزشی کافکا در مدرسه مهندسی داده سپهرام است.
❤3💩1
نگاهی به امکانات جدید Airflow 3 و دنیای Data Assets - آغاز عصر Data-Driven Workflows در ایرفلو
✨ در نسخه جدید Airflow 3 یک تحول اساسی رخ داده است:
این یعنی:
✔️ دیگر لازم نیست یک DAG را هر شب رأس یک ساعت مشخص اجرا کنیم؛
✔️ بلکه میتوانیم آن را براساس آماده شدن یک داده، یک خروجی، یا یک رخداد (Asset Event) اجرا کنیم.
✔️این تغییر، نقطهی اتصال دنیای Orchestration کلاسیک با Data Engineering مدرن است.
🔹و اما Data Assets در Airflow یعنی چه؟
از نسخه ۲ مفهومی به نام Asset اضافه شد، اما در Airflow 3 این قابلیت کاملاً بالغ شد و حتی یک بخش اختصاصی در UI برای مشاهده و مدیریت آن وجود دارد.
با Data Assets میتوانیم:
🔰مشخص کنیم یک DAG چه دادهای تولید میکند (Outlets)
🔰تعیین کنیم DAGها چه دادهای مصرف میکنند (Inlets)
🔰اجرای DAGها را وابسته به آماده شدن دادهها کنیم
🔰گردشکارها را بهجای schedule time-based، کاملاً event-based طراحی کنیم
🔰برای Assetها Metadata و Events تولید کنیم و رفتارهای پیشرفته بسازیم
به زبان ساده:
ایرفلو نسخه ۳ جریانهای کاری را "Data-Aware" و حتی "Data-Driven" میکند.
🎯 جلسه پنجم دوره آموزشی ایرفلو - از پارامترها تا Data-Driven Workflows
در جلسه پنجم دوره آموزش Airflow در «مدرسه مهندسی داده سپهرام»، دقیقاً روی همین موضوعات تمرکز کردهایم:
✴️ بخش اول: Parameterized Workflows
⚡️تعریف پارامتر برای DAGها
⚡️اجرای DAG از طریق API رسمی Airflow
⚡️ارسال پارامتر با curl و پایتون
⚡️استفاده از Auth و تولید token
✴️ بخش دوم: Data-Driven Workflows و داراییها
⚡️آشنایی با Assetها و معماری جدید Airflow 3
⚡️ساخت یک پایپلاین مبتنی بر Asset
⚡️استفاده از outlets و inlets در Taskها
⚡️مشاهده و مدیریت Assetها در UI
⚡️رویدادها (Asset Events)، Metadata، وابستگیهای ترکیبی و Aliases
این جلسه عملاً پلی است میان قابلیتهای قدیمی ایرفلو و معماریهای جدید Data-Driven Pipelines.
🎥 مشاهده رایگان جلسه
فیلمها و محتوای کامل جلسه پنجم برای عموم آزاد است و از این لینک میتوانید آنها را مشاهده کنید: کلیک کنید.
اگر با Airflow کار میکنید، این جلسه میتواند نگاه شما را نسبت به طراحی پایپلاینها کاملاً تغییر دهد.
پ.ن : هر چند سامانههای مدیریت جریان داده مثل Dagster در این زمینه بسیار جلوتر از ایرفلو هستند اما اگر در کنار کارهای روزانه زمانبندی شده، نیاز به دگهای داده محور هم دارید، ایرفلو امروزه این امکان را به راحتی در اختیار شما قرار میدهد.
✨ در نسخه جدید Airflow 3 یک تحول اساسی رخ داده است:
ایرفلو از یک ابزار زمانمحور برای اجرای جریانکارها، به یک سیستم دادهمحور (Data-Driven) ارتقا پیدا کرده است.
این یعنی:
✔️ دیگر لازم نیست یک DAG را هر شب رأس یک ساعت مشخص اجرا کنیم؛
✔️ بلکه میتوانیم آن را براساس آماده شدن یک داده، یک خروجی، یا یک رخداد (Asset Event) اجرا کنیم.
✔️این تغییر، نقطهی اتصال دنیای Orchestration کلاسیک با Data Engineering مدرن است.
🔹و اما Data Assets در Airflow یعنی چه؟
از نسخه ۲ مفهومی به نام Asset اضافه شد، اما در Airflow 3 این قابلیت کاملاً بالغ شد و حتی یک بخش اختصاصی در UI برای مشاهده و مدیریت آن وجود دارد.
با Data Assets میتوانیم:
🔰مشخص کنیم یک DAG چه دادهای تولید میکند (Outlets)
🔰تعیین کنیم DAGها چه دادهای مصرف میکنند (Inlets)
🔰اجرای DAGها را وابسته به آماده شدن دادهها کنیم
🔰گردشکارها را بهجای schedule time-based، کاملاً event-based طراحی کنیم
🔰برای Assetها Metadata و Events تولید کنیم و رفتارهای پیشرفته بسازیم
به زبان ساده:
ایرفلو نسخه ۳ جریانهای کاری را "Data-Aware" و حتی "Data-Driven" میکند.
🎯 جلسه پنجم دوره آموزشی ایرفلو - از پارامترها تا Data-Driven Workflows
در جلسه پنجم دوره آموزش Airflow در «مدرسه مهندسی داده سپهرام»، دقیقاً روی همین موضوعات تمرکز کردهایم:
✴️ بخش اول: Parameterized Workflows
⚡️تعریف پارامتر برای DAGها
⚡️اجرای DAG از طریق API رسمی Airflow
⚡️ارسال پارامتر با curl و پایتون
⚡️استفاده از Auth و تولید token
✴️ بخش دوم: Data-Driven Workflows و داراییها
⚡️آشنایی با Assetها و معماری جدید Airflow 3
⚡️ساخت یک پایپلاین مبتنی بر Asset
⚡️استفاده از outlets و inlets در Taskها
⚡️مشاهده و مدیریت Assetها در UI
⚡️رویدادها (Asset Events)، Metadata، وابستگیهای ترکیبی و Aliases
این جلسه عملاً پلی است میان قابلیتهای قدیمی ایرفلو و معماریهای جدید Data-Driven Pipelines.
🎥 مشاهده رایگان جلسه
فیلمها و محتوای کامل جلسه پنجم برای عموم آزاد است و از این لینک میتوانید آنها را مشاهده کنید: کلیک کنید.
اگر با Airflow کار میکنید، این جلسه میتواند نگاه شما را نسبت به طراحی پایپلاینها کاملاً تغییر دهد.
پ.ن : هر چند سامانههای مدیریت جریان داده مثل Dagster در این زمینه بسیار جلوتر از ایرفلو هستند اما اگر در کنار کارهای روزانه زمانبندی شده، نیاز به دگهای داده محور هم دارید، ایرفلو امروزه این امکان را به راحتی در اختیار شما قرار میدهد.
❤2💩1
مروری بر مبحث ایندکسینگ در PostgreSQL
گاهی وقتها هنگام کار با #PostgreSQL با کوئریهایی مواجه میشویم که بیدلیل کند به نظر میرسند. اولین حدس معمولاً «نبود ایندکس» است؛ اما واقعیت پیچیدهتر از این است. گاهی مشکل از جای دیگری میآید و مثلا باید پارتیشنبندی کنیم یا کوئری های خود را بازنویسی کنیم، اما گاهی هم ایندکس داریم، اما پستگرس تصمیم میگیرد از آن استفاده نکند.
✴️ و درست همینجاست که اهمیت شناخت عمیق ایندکسها و رفتار Query Planner مشخص میشود.
در جدیدترین ویدئوی منتشرشده در کانال یوتیوب مدرسه مهندسی داده سپهرام، تلاش کردهایم این مفاهیم را نه فقط معرفی، بلکه روایت کنیم - از اینکه پستگرس چگونه بدون ایندکس عمل میکند، تا اینکه چطور انتخاب نوع درست ایندکس میتواند تفاوتی معنیدار در عملکرد ایجاد کند.
این بخش، مقدمهای است بر یکی از مهمترین اصول Performance Tuning در #PostgreSQL؛ جایی که انتخاب بین B-Tree، GIN، GiST یا حتی یک Partial/Expression Index میتواند به معنای چند میلیثانیه یا چند ثانیه تفاوت باشد.
🎬 ویدئوی فارسی را از اینجا ببینید:
https://youtu.be/IQThCcn7yRo
🔍 در این ویدئو درباره این موارد صحبت میکنیم:
🔰 آشنایی با Access Methodها و رفتار پستگرس در حالت بدون ایندکس
🔰 ساختار صفحه، Tuple و نقش TID در دسترسی مستقیم
🔰 انواع ایندکسها و کاربرد دقیق هرکدام: B-Tree، Hash، GIN، GiST، BRIN و…
🔰 ایندکسهای پیشرفته: Partial، Expression، Multicolumn، Covered
🔰 نگهداری ایندکسها: REINDEX، CLUSTER، مدیریت bloat
🔰 تحلیل آماری: تشخیص ایندکس بلااستفاده و خطاهای طراحی
این ویدئو بخشی از دوره «Postgres in Action» است.
فهرست کامل دورهها : https://sepahram.ir/cources
گاهی وقتها هنگام کار با #PostgreSQL با کوئریهایی مواجه میشویم که بیدلیل کند به نظر میرسند. اولین حدس معمولاً «نبود ایندکس» است؛ اما واقعیت پیچیدهتر از این است. گاهی مشکل از جای دیگری میآید و مثلا باید پارتیشنبندی کنیم یا کوئری های خود را بازنویسی کنیم، اما گاهی هم ایندکس داریم، اما پستگرس تصمیم میگیرد از آن استفاده نکند.
✴️ و درست همینجاست که اهمیت شناخت عمیق ایندکسها و رفتار Query Planner مشخص میشود.
در جدیدترین ویدئوی منتشرشده در کانال یوتیوب مدرسه مهندسی داده سپهرام، تلاش کردهایم این مفاهیم را نه فقط معرفی، بلکه روایت کنیم - از اینکه پستگرس چگونه بدون ایندکس عمل میکند، تا اینکه چطور انتخاب نوع درست ایندکس میتواند تفاوتی معنیدار در عملکرد ایجاد کند.
این بخش، مقدمهای است بر یکی از مهمترین اصول Performance Tuning در #PostgreSQL؛ جایی که انتخاب بین B-Tree، GIN، GiST یا حتی یک Partial/Expression Index میتواند به معنای چند میلیثانیه یا چند ثانیه تفاوت باشد.
🎬 ویدئوی فارسی را از اینجا ببینید:
https://youtu.be/IQThCcn7yRo
🔍 در این ویدئو درباره این موارد صحبت میکنیم:
🔰 آشنایی با Access Methodها و رفتار پستگرس در حالت بدون ایندکس
🔰 ساختار صفحه، Tuple و نقش TID در دسترسی مستقیم
🔰 انواع ایندکسها و کاربرد دقیق هرکدام: B-Tree، Hash، GIN، GiST، BRIN و…
🔰 ایندکسهای پیشرفته: Partial، Expression، Multicolumn، Covered
🔰 نگهداری ایندکسها: REINDEX، CLUSTER، مدیریت bloat
🔰 تحلیل آماری: تشخیص ایندکس بلااستفاده و خطاهای طراحی
این ویدئو بخشی از دوره «Postgres in Action» است.
فهرست کامل دورهها : https://sepahram.ir/cources
👍3❤1💩1