<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های hamed sahami</title><link>https://virgool.ir/feed/@sahami.hamed</link><description>https://www.linkedin.com/in/hamedsahami/</description><language>fa</language><pubDate>2026-11-10 20:18:12</pubDate><image><url>https://files.virgool.ir/upload/users/47653/avatar/TsoqwH.png</url><title>hamed sahami</title><link>https://virgool.ir/@sahami.hamed</link></image><item><title>کلیک استک (ClickStack)</title><link>https://virgool.ir/@sahami.hamed/کلیک-استک-clickstack-wdszu3uq0ddn</link><description>کلیک استک (ClickStack) یک پلتفرم مشاهده‌پذیری (observability) در سطح تولید است که بر پایه پایگاه داده کلیک هاوس (ClickHouse) ساخته شده است. این پلتفرم برای نظارت و اشکال‌زدایی سیستم‌های پیچیده طراحی شده و هدف آن متحد کردن لاگ‌ها (logs)، تریس‌ها (traces)، متریک‌ها (metrics) و نشست‌ها (sessions) در یک راه‌حل واحد و با عملکرد بالا است.در اینجا تعریف و جزئیات کامل کلیک استک بر اساس منابع ارائه شده آمده است:۱. ماهیت و فلسفه اصلی کلیک استککلیک استک توسعه‌دهندگان و مهندسان قابلیت اطمینان سایت (SREs) را قادر می‌سازد تا مسائل را به صورت سرتاسری پیگیری کنند، بدون اینکه نیاز به جابجایی بین ابزارها یا اتصال دستی داده‌ها با استفاده از برچسب‌های زمانی یا شناسه‌های همبستگی (correlation IDs) داشته باشند.ایده محوری: ایده اصلی کلیک استک ساده اما قدرتمند است: تمام داده‌های مشاهده‌پذیری باید به صورت رویدادهای عریض و غنی(wide, rich events) جذب شوند. این رویدادها بر اساس نوع داده—مانند لاگ‌ها، تریس‌ها، متریک‌ها و نشست‌ها—در جداول کلیک هاوس ذخیره می‌شوند، اما در سطح پایگاه داده کاملاً قابل جستجو و همبستگی متقابل (cross-correlatable) باقی می‌مانند.عملکرد و معماری کلیک هاوس: کلیک استک به گونه‌ای طراحی شده است که با استفاده از معماری ستون‌محور (column-oriented architecture)، پشتیبانی بومی از JSON و موتور اجرای کاملاً موازی کلیک هاوس، حجم کار با کاردینالیتی بالا (high-cardinality workloads) را به طور موثر مدیریت کند. این قابلیت‌ها امکان جستجوی زیر ثانیه‌ای در مجموعه‌ داده‌های عظیم، تجميع سریع در محدوده‌های زمانی وسیع، و بازرسی عمیق تریس‌های فردی را فراهم می‌کند.کلیک هاوس برای داده‌های مشاهده‌پذیری مناسب است زیرا:در داده‌های با کاردینالیتی بالا عالی عمل می‌کند.داده‌ها را به طور موثر فشرده می‌کند.از SQL آشنا استفاده می‌کند.از JSON بومی پشتیبانی می‌کند، که به آن امکان می‌دهد داده‌های نیمه‌ساختاریافته‌ای که اغلب در مشاهده‌پذیری دیده می‌شوند را مدیریت کند. JSON در قالبی فشرده و ستونی ذخیره می‌شود، که تکامل طرحواره (schema evolution) را بدون نیاز به مداخله دستی یا تعریف قبلی ممکن می‌سازد.۲. اجزاء اصلی (Components)کلیک استک از سه جزء اصلی تشکیل شده است که می‌توانند به صورت مستقل یا با هم مستقر شوند:رابط کاربری HyperDX (HyperDX UI):این یک فرانت‌اند هدفمند است که برای کاوش و بصری‌سازی داده‌های مشاهده‌پذیری ساخته شده است.از هر دو سینتکس‌های سبک لوچین (Lucene-style) و SQL پشتیبانی می‌کند، به کاربران اجازه می‌دهد رابط جستجویی متناسب با گردش کار خود انتخاب کنند.امکانات دیگری مانند داشبوردهای تعاملی، هشداردهی، و کاوش تریس را ارائه می‌دهد.یک نسخه میزبانی شده در مرورگر از HyperDX UI نیز موجود است که کاربران را قادر می‌سازد بدون زیرساخت اضافی به استقرارهای موجود کلیک هاوس متصل شوند.جمع‌آورنده OpenTelemetry (OpenTelemetry collector):این یک جمع‌آورنده سفارشی و از پیش تنظیم شده است که با یک طرحواره مشخص (opinionated schema) برای لاگ‌ها، تریس‌ها و متریک‌ها ارائه می‌شود.این جمع‌آورنده پروتکل‌های OpenTelemetry را دریافت می‌کند و داده‌ها را مستقیماً به کلیک هاوس با استفاده از درج‌های دسته‌ای کارآمد (efficient batched inserts) می‌نویسد.کلیک استک از OpenTelemetry پشتیبانی بومی دارد.این جزء به عنوان یک دروازه (gateway) عمل می‌کند و در عین حال که بومی OpenTelemetry است، انحصاری آن نیست. کاربران پیشرفته می‌توانند داده‌ها را مستقیماً با استفاده از فرمت‌های فایل بومی، پایپ‌لاین‌های سفارشی، یا ابزارهای شخص ثالث مانند Vector به کلیک هاوس وارد کنند.کلیک هاوس (ClickHouse):پایگاه داده تحلیلی با عملکرد بالا است که به عنوان مخزن مرکزی داده‌ها برای رویدادهای عریض عمل می‌کند.با بهره‌گیری از موتور ستونی خود و پشتیبانی بومی از JSON، قدرت جستجو، فیلترگذاری و تجميع سریع را در مقیاس فراهم می‌کند.جزء کمکی: علاوه بر این سه جزء اصلی، کلیک استک از یک پایگاه داده MongoDB برای ذخیره وضعیت برنامه (application state)، مانند داشبوردها، حساب‌های کاربری و تنظیمات پیکربندی، استفاده می‌کند.۳. اصول و ویژگی‌های کلیدیاصول طراحی (Principles):نصب آسان در عرض چند دقیقه: کلیک استک با هر نمونه و طرحواره کلیک هاوس کار می‌کند و حداقل پیکربندی را نیاز دارد.کاربرپسند و هدفمند: رابط کاربری HyperDX به طور خاص برای مشاهده‌پذیری بهینه‌سازی شده است تا تیم‌ها بتوانند به سرعت علل ریشه‌ای را شناسایی کنند.مشاهده‌پذیری سرتاسری (End-to-end observability): دید کامل پشته، از نشست‌های کاربری فرانت‌اند تا متریک‌های زیرساخت بک‌اند، لاگ‌های برنامه و تریس‌های توزیع شده را فراهم می‌کند. این دیدگاه یکپارچه امکان همبستگی و تحلیل عمیق در کل سیستم را می‌دهد.ساخته شده برای کلیک هاوس: هر لایه از پشته برای استفاده کامل از قابلیت‌های کلیک هاوس طراحی شده است.بومی OpenTelemetry: تمامی داده‌ها از طریق یک نقطه پایانی جمع‌آورنده OpenTelemetry جذب می‌شوند.متن‌باز و کاملاً قابل تنظیم: کلیک استک کاملاً متن‌باز (Open source) بوده و می‌تواند در هر مکانی مستقر شود. اجزای آن قابل مقیاس‌بندی مستقل هستند تا نیازهای جذب، جستجو یا ذخیره‌سازی را برآورده کنند.ویژگی‌های کلیدی (Features):کلیک استک شامل چندین ویژگی اصلی است که برای اشکال‌زدایی و تحلیل علت ریشه‌ای طراحی شده‌اند:همبستگی و جستجو: امکان همبستگی و جستجوی لاگ‌ها، متریک‌ها، بازپخش نشست‌ها (session replays) و تریس‌ها، همه در یک مکان.جستجوی سریع: جستجوها و بصری‌سازی‌های فوق‌العاده سریع بهینه شده برای کلیک هاوس.جستجوی بصری: سینتکس جستجوی بصری برای متن کامل و جستجوی ویژگی‌ها (مثلاً level:err)، با SQL به عنوان یک گزینه.تشخیص الگو و ناهنجاری: تجزیه و تحلیل روند ناهنجاری‌ها با دلتاهای رویداد (event deltas) و تشخیص الگوی لاگ.پشتیبانی از JSON: جستجوی رشته بومی JSON.پوشش جامع: نظارت بر سلامت و عملکرد از درخواست‌های HTTP تا جستجوهای پایگاه داده (APM).Live Tail: امکان مشاهده لحظه‌ای لاگ‌ها و تریس‌ها برای دریافت تازه‌ترین رویدادها.هشدارها: تنظیم هشدارها تنها با چند کلیک.</description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Sun, 28 Sep 2025 16:51:54 +0330</pubDate></item><item><title>Exabeam: مقیاس‌پذیری جستجوی تحلیلی امنیت با ClickHouse</title><link>https://virgool.ir/@sahami.hamed/exabeam-مقیاس-پذیری-جستجوی-تحلیلی-امنیت-با-clickhouse-fduyjrgm1hen</link><description>متون ارائه شده بر رویکرد شرکت اگزابیم (Exabeam) در زمینه امنیت سایبری و تجزیه و تحلیل امنیتی تمرکز دارند. منبع اول که رونوشتی از یک ویدیوی یوتیوبی است، جزئیات فنی استفاده اگزابیم از کلیک‌هاوس (ClickHouse) را برای ایجاد یک پلتفرم عملیات امنیتی مقیاس‌پذیر تشریح می‌کند؛ این پلتفرم از هوش مصنوعی و یادگیری ماشین برای تشخیص تهدید، رسیدگی، و پاسخ‌دهی استفاده کرده و نشان می‌دهد که چگونه برای مدیریت بیش از یک میلیون رویداد در ثانیه و ۸۰ میلیارد رویداد روزانه، بهینه‌سازی‌هایی در معماری و تزریق داده انجام شده است. منبع دوم، یک صفحه وب از اگزابیم است که به طور کلی سبد محصولات و راهکارهای این شرکت را معرفی می‌کند، شامل پلتفرم‌های SIEM (مدیریت اطلاعات و رویدادهای امنیتی) با قابلیت‌های بومی ابری و خودمیزبان، همراه با تمرکز بر تحلیل رفتار کاربر و موجودیت (UEBA) و تشخیص، بررسی و پاسخ‌دهی به تهدید (TDIR). هر دو منبع، اهمیت اگزابیم در مقابله با تهدیدات داخلی و خارجی و همچنین انطباق با مقررات را برجسته می‌سازند.شرکت اکزابیم (Exabeam) یک متخصص در حوزه امنیت سایبری است که راهکارهایی را برای شناسایی، تحقیق و پاسخگویی به تهدید (TDIR) ارائه می‌دهد. هدف اکزابیم کمک به سازمان‌های پیشرو در جهان است تا با تهدیداتی که نمی‌توانند ببینند، به صورت سریع‌تر، دقیق‌تر و قابل تکرار مبارزه کنند.این شرکت خدمات خود را با استفاده از هوش مصنوعی (AI) و اتوماسیون برای بهبود عملیات‌های امنیتی (SOC) ارائه می‌دهد.پلتفرم‌ها و قابلیت‌های کلیدیپورتفولیوی محصول اکزابیم انتخاب‌های انعطاف‌پذیری را برای مدیریت اطلاعات و رخدادهای امنیتی (SIEM) و TDIR فراهم می‌کند. این محصولات به دو دسته اصلی تقسیم می‌شوند:پلتفرم ابری (Cloud-Native Platform): شامل New-Scale Fusion، New-Scale SIEM و New-Scale Analytics است که برای TDIR پیشرفته مبتنی بر هوش مصنوعی و اتوماسیون طراحی شده است.پلتفرم خودمیزبان (Self-Hosted Platform): شامل LogRhythm SIEM و LogRhythm Intelligence است که برای TDIR و رعایت الزامات تطبیق‌پذیری (Compliance) کاربرد دارد.قابلیت‌های محوری این شرکت عبارتند از:SIEM (مدیریت اطلاعات و رخدادهای امنیتی).UEBA (تحلیل رفتار کاربر و موجودیت).AI (هوش مصنوعی).SOAR (خودکارسازی امنیت، ارکستراسیون و پاسخگویی).TDIR (شناسایی، تحقیق و پاسخگویی به تهدید).رویکرد TDIR مبتنی بر هوش مصنوعیپلتفرم عملیات امنیتی اکزابیم بر چهار ستون اصلی تکیه دارد که از هوش مصنوعی و یادگیری ماشین بهره می‌برند:ورود داده (Injection Pipeline): از طریق این خط لوله، داده‌ها از منابع مختلف از جمله بارهای کاری ابری، برنامه‌های SaaS، نقاط پایانی (endpoints) و فایروال‌ها جمع‌آوری می‌شوند. این داده‌ها با زمینه‌های اضافی غنی‌سازی می‌شوند تا برای تشخیص تهدید استفاده شوند. اکزابیم در حال حاضر از حدود ۹۵۰۰ تحلیلگر (parsers) پشتیبانی می‌کند.شناسایی تهدید (Threat Detection): این موتور از هوش مصنوعی و یادگیری ماشین برای ارائه تحلیل رفتار کاربر و موجودیت (UEBA)، اولویت‌بندی، امتیازدهی و همبستگی استفاده می‌کند. این امر به برجسته کردن سریع تهدیدات واقعی کمک کرده و در عین حال نویز را به حداقل می‌رساند. این سیستم شامل حدود ۲۰۰۰ قانون تحلیلی و ۷۵۰ مدل رفتاری است.تحقیق (Investigation): اکزابیم ابزارهایی مانند جدول زمانی رخدادها و همچنین دستیاران هوش مصنوعی مولد (Generative AI co-pilots) را ارائه می‌دهد که خلاصه‌هایی از تهدید و بینش‌های عمیق را بر اساس تمام شناسایی‌ها فراهم می‌کنند.پاسخگویی (Response): این شرکت یک پلتفرم اتوماسیون (SOAR) دارد که به سازمان‌ها اجازه می‌دهد تا پلی‌بوک‌های خود را خودکارسازی کرده و با ابزارهای شخص ثالث ادغام شوند.مقیاس و عملکردعملکرد بالا و مقیاس‌پذیری، یک معیار حیاتی در امنیت سایبری برای اکزابیم است.پلتفرم عملیات امنیتی اکزابیم در ۱۰ منطقه جهانی فعال است.این پلتفرم قادر است در اوج، از ۱.۲ میلیون رخداد در ثانیه پشتیبانی کند.تقریباً ۸۰ میلیارد رخداد روزانه جذب می‌شود.این شرکت در ماه‌های اخیر، بیش از ۳.۵ پتابایت داده را جذب کرده است.یک معیار کلیدی که اکزابیم بر آن تمرکز دارد، میانگین زمان شناسایی (MTDT) است، یعنی زمان بین ورود رخدادها تا زمانی که تهدید شناسایی و به تحلیلگران امنیتی نشان داده می‌شود.برای مدیریت این حجم بالا از داده‌ها و ارائه جستجوی کم‌هزینه و پرسرعت، اکزابیم از کلیک‌هاوس (ClickHouse) استفاده می‌کند.تمرکز بر تهدیدات خاص و تطبیق‌پذیریاکزابیم راهکارهایی را برای تحقق نتایج استراتژیک امنیتی ارائه می‌دهد:تهدیدات داخلی (Insider Threats): این راهکارها شامل نظارت بر رفتار داخلی برای تعیین نیت و شناسایی نوع جدیدی از تهدیدات داخلی: عوامل هوش مصنوعی (AI Agents) هستند.تهدیدات خارجی (External Threats): دفاع در برابر فیشینگ، بدافزار، باج‌افزار و موارد دیگر.تطبیق‌پذیری (Compliance): اکزابیم امکان پایبندی دائمی و ساده‌سازی گزارش‌دهی را فراهم می‌کند.لازم به ذکر است که اکزابیم به دلیل نوآوری در هوش مصنوعی و تفاوت‌هایش در ارائه ارزش، به عنوان یک رهبر مورد اعتماد و برنده جوایز متعدد در صنعت امنیت شناخته شده است.در آخر باید اشاره کرد که کلیک هاوس (ClickHouse) به شرکت اگزابیم (Exabeam) کمک کرده است تا پلتفرم عملیات امنیتی (SecOps) خود را مقیاس‌پذیر سازد. این مقیاس‌پذیری به ویژه برای برآورده کردن یک معیار کلیدی در امنیت سایبری، یعنی میانگین زمان شناسایی (MTDT) حیاتی بوده است.در زیر، شرح کامل کارهایی که کلیک هاوس برای این شرکت انجام داده و نحوه اجرای آن بر اساس اطلاعات ویدئو آورده شده است:دستاوردهای کلیدی و مقیاس‌پذیری (آنچه کلیک هاوس انجام داد)کلیک هاوس به اگزابیم اجازه داد تا به توانمندی‌های عملکردی زیر دست یابد:سرعت بالا و تأخیر کم: با بهره‌گیری از کلیک هاوس، اگزابیم توانسته است قابلیت‌های جستجوی پرسرعت، مقیاس‌پذیر، با تأخیر کم و مقرون به صرفه را ارائه دهد.پشتیبانی از حجم داده عظیم: در اوج مصرف، پلتفرم قادر به پشتیبانی از 1.2 میلیون رویداد در ثانیه است.حجم بلعیده شده روزانه: تقریباً 80 میلیارد رویداد به صورت روزانه بلعیده می‌شوند.ذخیره‌سازی داده: در چند ماه گذشته، سه و نیم پتابایت داده وارد سیستم شده است.کاهش MTDT: کلیک هاوس به اگزابیم کمک کرد تا معیار MTDT (میانگین زمان شناسایی) را کاهش دهد، که برای امنیت سایبری بسیار حیاتی است.عملکرد جستجو: امکان دستیابی به هزینه کمتر و جستجوهای سریع‌تر برای شناسایی تهدیدات و نمایش آن‌ها به تحلیلگران امنیتی فراهم شد.نحوه اجرای فنی و بهینه‌سازی‌ها (چگونه این کار انجام شد)اگزابیم از ClickHouse Cloud استفاده می‌کند و در 10 منطقه جهانی فعال است. تیم فنی چندین بهینه‌سازی عمده را برای مدیریت حجم بالای داده و عملکرد انجام دادند:1. بهینه‌سازی معماری و جداسازی فرآیندهابرای مدیریت 1 میلیون رویداد در ثانیه، چندین بهینه‌سازی، عمدتاً در معماری، صورت گرفت:جداسازی خواندن، نوشتن و ادغام: از قابلیت محاسباتی کلیک هاوس برای جداسازی فرآیندهای نوشتن (writes)، ادغام (merges) و خواندن (reads) استفاده شد. این جداسازی تضمین می‌کند که بارهای کاری بسیار سنگین خواندن بر روی عملیات نوشتن و ادغام تأثیر نگذارند.ساختار معماری سطح بالا: معماری شامل موارد زیر است:سرویس‌های Ingest (بلعیدن داده).نمونه‌های نوشتن (Write instances) که صرفاً بر روی نوشتن داده در کلیک هاوس تمرکز دارند.نمونه‌های ادغام (Merge instances) که ادغام‌های پس‌زمینه را انجام می‌دهند.نمونه‌های خواندن (Read instances) که بارهای کاری مختلف خواندن را مدیریت می‌کنند.مدیریت شمای داده: از سرویس مدیریت کلیک هاوس برای مدیریت شمای داده در محیط کلیک هاوس استفاده شد.2. بهینه‌سازی مدل داده برای جستجوی سریعترمدل اطلاعات مشترک (CIM): داده‌ها در مدلی به نام Common Information Model (مدل اطلاعات مشترک) نرمال‌سازی شده‌اند که شامل بیش از 1000 فیلد است. مدل داده کلیک هاوس بر اساس این ساختار ساخته شده است و کلیک هاوس از آن در قالب چندمستأجری پشتیبانی می‌کند.تغییر از ستون‌های زیاد به فیلدهای یکپارچه: با وجود 1200+ ستون در مدل فرضی، تیم متوجه شد که جستجوی 180+ ستون حدود 8 ثانیه یا بیشتر طول می‌کشد، در حالی که جستجوی یک ستون در کمتر از یک ثانیه انجام می‌شد.فشرده‌سازی ستون‌ها: آن‌ها فیلدها را بهینه کردند. با توجه به اینکه 80 درصد از ستون‌ها در مدل ممکن است تهی (null) باشند، آن‌ها این ستون‌های کمیاب را فشرده کرده و آن‌ها را در فیلدهای کمیاب (rare fields) قرار دادند، جایی که نام ستون کلید و مقدار ستون، مقدار آن است.کاهش تعداد ستون: با استفاده از این رویکرد، تعداد ستون‌ها از 1200+ به 250 ستون کاهش یافت.نتایج بهینه‌سازی: این بهینه‌سازی، سرعت بلعیدن داده را از 100 هزار رویداد در ثانیه به 250 هزار رویداد در ثانیه در یک کلاستر سه گره‌ای (سه ریپلیکایی) افزایش داد.3. بهینه‌سازی خط لوله بلعیدن داده (Ingestion Pipeline)تیم اگزابیم چندین بهینه‌سازی فنی را برای مقیاس‌بندی ورودی انجام داد:استفاده از GCP Reader: استفاده از GCP reader هنگام خواندن فایل‌ها از GCS buckets، 20 درصد افزایش عملکرد در خواندن فایل‌ها به همراه داشت.مهاجرت JSON: مهاجرت از JSON به Jackson، 60 درصد عملکرد سریع‌تر در پردازش داده و رویدادهای JSON فراهم کرد.بهینه‌سازی شبکه Data Writer: برای ارسال سریع 100 هزار رویداد به کلیک هاوس:روش اولیه (فرمت باینری خام با JSON) 20 ثانیه طول کشید.روش دوم (استفاده از چندین رشته و تبدیل سطرها به بایت قبل از ارسال) زمان انتقال را به 5 ثانیه کاهش داد.روش پیشنهادی کلیک هاوس (استفاده از iterable by array input stream) زمان انتقال را به 1 ثانیه کاهش داد، اما 7 گیگابایت از حافظه Pod را مصرف کرد زیرا استفاده از iterator مانع از جمع‌آوری زباله (Garbage Collection) می‌شد.راه‌حل نهایی: آن‌ها یک wrapper ایجاد کردند تا رویکرد iterator را حذف کنند و امکان جمع‌آوری زباله فوری فراهم شود. این کار مصرف حافظه را از 7 گیگابایت به 4 گیگابایت کاهش داد و توان عملیاتی را از 16 هزار رویداد در ثانیه به 20 هزار رویداد در ثانیه افزایش داد.4. حل چالش‌های عملیاتی در تولیدمشکل Max Part File: در محیط تولید، نوشتن 100 هزار رویداد در یک دسته (batch) به چندین پارتیشن منجر به ایجاد فایل‌های پارتیشن متعدد شد. این وضعیت باعث مصرف بالای حافظه، تداخل در فرآیندهای ادغام (merges) و لغو شدن آن‌ها می‌شد.راه‌حل: رویدادهای بلعیده شده به دو دسته &#34;زمان واقعی&#34; (Real-time) و &#34;معوقه&#34; (Backlog) تقسیم شدند. رویدادهای زمان واقعی مستقیماً به کلیک هاوس ارسال می‌شوند. رویدادهای معوقه به یک تاپیک معوقه ارسال می‌شوند و توسط پردازنده‌های بلع معوقه در دسته‌های بسیار بزرگتر پردازش و ثبت می‌شوند. این کار تعداد فایل‌های پارتیشن برای پارتیشن‌های قدیمی‌تر را کاهش داد. این رویکرد مشکل حداکثر فایل پارتیشن و همچنین هزینه‌های عملیاتی را کاهش داد.مشکل ایندکس‌گذاری (Ngram): در ابتدا، آن‌ها از ایندکس n-gram برای جستجوهای عبارات منظم (Regular Expression) و IP استفاده کردند.مشکل: N-gram به سخت‌افزار بیشتری نیاز داشت زیرا کلیک هاوس باید عملیات تطبیق پس‌زمینه را انجام داده و ایندکس را بازسازی کند که برای داده‌های لاگ حجیم بسیار پرهزینه بود.راه‌حل: آن‌ها به رویکرد توکن‌سازی (tokenization) روی آوردند. توکن‌سازی توکن‌های کمتری تولید می‌کند، به سخت‌افزار کمتری نیاز دارد و عملکرد کلیک هاوس را با کاهش اندازه ایندکس بهبود می‌بخشد. این تصمیم عملی بود زیرا جستجوهای عبارات منظم تنها 1 درصد از کوئری‌های مشتریان آن‌ها را تشکیل می‌داد.در کنار همه این ها باید گفت که کلیک هاوس مطابق مطالب طرح شده در جلسات Meetup   با امکانات فراوانی که ارایه کرده به این شرکت امنیتی به شکل مطلوبی کمک کرده تا از کلان داده های تولید شده استفاه درست و به موقعی داشته باشه.</description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Wed, 24 Sep 2025 12:21:30 +0330</pubDate></item><item><title>تازه های کلیک هاوس نسخه ۲۵.۸</title><link>https://virgool.ir/@sahami.hamed/تازه-های-کلیک-هاوس-نسخه-۲۵۸-zh7xv5ygay82</link><description>نسخه ۲۵.۸ (ClickHouse Release 25.8) کلیک‌هاوس یک نسخه بسیار مهم است، زیرا به عنوان نسخه پشتیبانی بلندمدت (LTS) منتشر شده است.این نسخه در تاریخ ۵ سپتامبر ۲۰۲۵ منتشر شد و شامل ۴۵ قابلیت جدید (🌻)، ۴۷ بهینه‌سازی عملکرد (🏍)، و ۱۱۹ رفع اشکال (🐝) است. تعداد ۱۱۹ مورد رفع اشکال، احتمالاً بزرگترین میزان رفع اشکال در یک نسخه است، زیرا این نسخه برای پایداری در محیط‌های تولیدی (LTS) به دقت آماده شده است. این نسخه به مدت یک سال، تا آگوست ۲۰۲۶، با وصله‌ها، به‌روزرسانی‌ها و رفع اشکالات پشتیبانی خواهد شد.در زیر مهم‌ترین امکانات و نکات این نسخه آورده شده است:۱. خواننده جدید و سریع‌تر Parquet (Parquet Reader v3)این نسخه یک خواننده بومی و سریع‌تر برای فرمت Parquet معرفی می‌کند که در حال حاضر آزمایشی است.عملکرد سریع‌تر: خواننده جدید، عملکرد کوئری‌های ClickBench را به طور متوسط ۱.۸۱ برابر بهبود بخشیده است، که تقریباً سرعت اجرای کوئری‌ها را دو برابر می‌کند. این بهبود سرعت از مجموع فیلتر کردن در سطح صفحه (page-level min/max filtering) و استفاده از PREWHERE حاصل می‌شود.معماری بومی: خواننده جدید Parquet فایل‌ها را مستقیماً به فرمت داخلی حافظه کلیک‌هاوس می‌خواند. این کار لایه اضافی استفاده از کتابخانه Apache Arrow را حذف می‌کند که قبلاً فایل‌های Parquet را به فرمت Arrow تجزیه و کپی می‌کرد.موازی‌سازی پیشرفته: خواننده جدید علاوه بر اسکن موازی چندین گروه ردیفی (Row Groups)، می‌تواند ستون‌های مختلف را از یک گروه ردیفی به طور همزمان بخواند، که منجر به بهره‌وری بهتر CPU می‌شود.بهره‌وری I/O: از فیلتر سطح صفحه (page-level min/max filtering) و پشتیبانی از PREWHERE اضافه شده استفاده می‌کند. این امر حجم داده‌ای را که باید پردازش شود، به شدت کاهش می‌دهد.اهمیت Lakehouse: پردازش سریع Parquet اساس کار کلیک‌هاوس به عنوان یک موتور Lakehouse است و برای کوئری‌نویسی کارآمد بر روی فرمت‌های باز جداول مانند Apache Iceberg و Delta Lake حیاتی است.۲. بهبودهای گسترده Data Lakeپشتیبانی کلیک‌هاوس از دریاچه‌های داده (Data Lakes) پیشرفت‌های عظیمی داشته است و به عنوان بزرگترین بهبود نسخه معرفی شده است.Iceberg: اکنون می‌توانید با استفاده از موتور جدول IcebergS3، عملیات ایجاد جدول، درج، حذف، به‌روزرسانی داده‌ها و تنظیم طرح‌واره (schema) را روی Iceberg انجام دهید.Delta Lake: پشتیبانی از نوشتن داده و قابلیت سفر در زمان (time travel) برای جداول Delta Lake اضافه شده است.کاتالوگ‌ها در وضعیت بتا: کاتالوگ‌های Unity، REST، Glue، و Hive Metastore از حالت آزمایشی (experimental) به وضعیت بتا (beta) ارتقا یافته‌اند.پشتیبانی از نوشتن: درج داده در Iceberg از طریق کاتالوگ‌های REST و Glue پشتیبانی می‌شود.۳. نوشتن با پارتیشن‌بندی به سبک Hiveکلیک‌هاوس اکنون از نوشتن داده‌ها با پارتیشن‌بندی به سبک Hive پشتیبانی می‌کند.ساختار دایرکتوری: داده‌ها بر اساس مقادیر کلید پارتیشن، به دایرکتوری‌هایی (یا پیشوندهای مشابه دایرکتوری در S3) تقسیم می‌شوند.استراتژی پارتیشن‌بندی: این قابلیت از طریق تنظیم partition_strategy = &#39;hive&#39; فعال می‌شود.عملکرد خواندن: هنگامی که این ویژگی فعال است، عملیات خواندن (SELECT) به طور خودکار از این ستون‌ها برای فیلتر کردن استفاده می‌کند.۴. بهبود عملکرد Azure Blob Storageمشکلات تأخیر (Latency) در کار با Azure Blob Storage حل شده است.مشکل حل شده: قبلاً نوسانات تأخیر (Latency Spikes) تا ۵، ۱۰ یا حتی ۱۵ ثانیه در Azure Blob Storage مشاهده می‌شد.راه‌حل: کلیک‌هاوس کلاینت HTTP موجود در Azure SDK را با پیاده‌سازی داخلی خود جایگزین کرد و از منطق تلاش مجدد تهاجمی گمانه‌زنانه (aggressive speculative retries) که برای AWS S3 استفاده می‌شد، بهره برد.نتیجه: نوسانات تأخیر از بین رفته و Azure اکنون به سرعت AWS کار می‌کند.۵. یکپارچه‌سازی Arrow Flightپشتیبانی اولیه از پروتکل Arrow Flight اضافه شده است.ماهیت پروتکل: Arrow Flight یک پروتکل با عملکرد بالاست که برای تبادل داده بر اساس فرمت حافظه ستونی Apache Arrow و gRPC ساخته شده است. این پروتکل جایگزینی مدرن و کارآمد برای ODBC یا JDBC است.نقش کلاینت و سرور: کلیک‌هاوس اکنون می‌تواند هم به عنوان کلاینت (با استفاده از تابع جدول arrowflight یا موتور جدول ArrowFlight) برای پرس‌وجو از منابع داده Arrow Flight راه دور عمل کند و هم به عنوان سرور، داده‌های خود را در معرض دید کلاینت‌های سازگار با این پروتکل قرار دهد.۶. پشتیبانی اولیه از PromQLپشتیبانی اولیه از زبان پرس‌وجوی پرومتئوس (Prometheus Query Language یا PromQL) اضافه شده است.نحوه استفاده: با تنظیم dialect=&#39;promql&#39; در کلاینت کلیک‌هاوس و اشاره به یک جدول سری زمانی با استفاده از تنظیم promql_table_name=&#39;X&#39;، می‌توانید از آن استفاده کنید.توابع پشتیبانی شده: در نسخه ۲۵.۸، تنها توابع rate, delta و increase پشتیبانی می‌شوند.۷. ستون مجازی _table در همه‌جاستون مجازی _table که قبلاً عمدتاً در توابع جدول merge برای شناسایی منبع داده استفاده می‌شد، اکنون برای انواع دیگر کوئری‌ها (مانند استفاده با UNION ALL) نیز در دسترس است. این قابلیت امکان ردیابی جدول اصلی یک سطر نتیجه را فراهم می‌کند.۸. امکانات امنیتی S3چندین ویژگی امنیتی جدید برای کار با داده‌های ذخیره شده در S3 اضافه شده است.نقش‌های IAM سفارشی: اکنون می‌توانید از نقش‌های IAM سفارشی (custom IAM roles) با تابع جدول s3 استفاده کنید. این قابلیت قبلاً فقط در ClickHouse Cloud موجود بود.اعطای دسترسی (GRANTS) با جزئیات: اکنون می‌توان دسترسی‌های READ یا WRITE را بر اساس عبارات منظم (Regular Expressions) برای URLهای خاص S3 تعریف کرد، به جای اعطای دسترسی کلی به همه باکت‌ها.۹. ویژگی‌های جدید و بهبودهای دیگردیسک‌های خارجی برای داده‌های موقت: کلیک‌هاوس اکنون می‌تواند از هر نوع دیسک خارجی (از جمله ذخیره‌سازهای سازگار با S3) برای ذخیره داده‌های موقت مورد نیاز کوئری‌های پیچیده و سنگین (مانند GROUP BY یا ORDER BY با حجم بالا) استفاده کند.بهبود نمایه سازی ثانویه: نمایه‌های ثانویه اکنون بر اساس اندازه فشرده‌سازی خود (سبک وزن اول، سنگین وزن بعدی) خوانده و اعمال می‌شوند تا عملکرد بهتری داشته باشند.آپدیت‌های سبک وزن (Lightweight Updates): این ویژگی دیگر آزمایشی نیست و به وضعیت بتا ارتقا یافته است. پیاده‌سازی آن بر اساس ذخیره کردن پچ‌های کوچک است، نه بازنویسی کامل داده‌ها.پروتکل PostgreSQL: پشتیبانی از دستور COPY که اغلب برای بارگذاری حجم عظیمی از داده استفاده می‌شود، بهبود یافته است.جستجوی برداری (Vector Search): این ویژگی در نسخه ۲۵.۸ به در دسترس بودن عمومی (GA) رسیده است.ClickPipes و MongoDB: کانکتور CDC برای MongoDB (در حال حاضر پیش نمایش خصوصی) معرفی شده است که امکان ingest مداوم داده‌ها از MongoDB به کلیک‌هاوس را فراهم می‌کند. این کانکتور از درج، حذف، به‌روزرسانی و تغییرات طرح‌واره انعطاف‌پذیر پشتیبانی می‌کند و می‌تواند داده‌ها را به عنوان نوع داده JSON در کلیک‌هاوس ذخیره کند.منابع و لینک های مرتبطhttps://clickhouse.com/blog/clickhouse-release-25-08پادکست تولید شده با نوت بوک ال ام گوگلhttps://notebooklm.google.com/notebook/06aed707-3ed1-4117-b4a1-d549251e396f?artifactId=67410281-218f-419e-b1a7-6b7b30dec78b</description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Tue, 23 Sep 2025 17:47:53 +0330</pubDate></item><item><title>کلیک هاوس در Exabeam</title><link>https://virgool.ir/@sahami.hamed/کلیک-هاوس-در-exabeam-hgopdhzpsrrl</link><description>این جلسه، که توسط وِنایاک سوار (معاون مهندسی در Exabeam) و آرون (سرپرست فنی) ارائه شده است، بر چگونگی استفاده شرکت Exabeam از پایگاه داده تحلیلی ClickHouse برای مقیاس‌دهی پلتفرم عملیات امنیتی (SecOps) خود متمرکز بود.در زیر خلاصه‌ای از مطالب ارائه شده بر اساس منابع موجود آمده است:۱. مروری بر پلتفرم Exabeam و ضرورت استفاده از ClickHouseپلتفرم عملیات امنیتی Exabeam برای ارائه قابلیت‌های تشخیص، بررسی و واکنش به تهدیدات سایبری از ابتدا تا انتها، از هوش مصنوعی (AI) و یادگیری ماشین (ML) استفاده می‌کند.چهار ستون اصلی این پلتفرم عبارتند از:خط لوله داده‌گیری (Injection): از ۹,۵۰۰ تجزیه‌کننده (parser) پشتیبانی می‌کند و داده‌ها را از منابع مختلف (از جمله بارهای کاری ابری، برنامه‌های SaaS، نقاط پایانی و فایروال‌ها) جمع‌آوری و با زمینه‌های اضافی غنی‌سازی می‌کند.تشخیص تهدید: این موتور از AI و ML استفاده کرده و شامل ۲۰۰۰ قانون تحلیلی و ۷۵۰ مدل رفتاری است که برای تحلیل رفتار کاربران و نهادها، اولویت‌بندی، امتیازدهی و همبستگی‌سازی استفاده می‌شود تا تهدیدات واقعی با کمترین نویز شناسایی شوند.بررسی (Investigation): جدول‌های زمانی رویدادها و همچنین کمک‌خلبان‌های (Co-pilots) هوش مصنوعی مولد را ارائه می‌دهد که خلاصه‌های عمیق و خوبی از تهدیدات را در اختیار کاربران قرار می‌دهند.واکنش (Response): یک پلتفرم خودکارسازی را فراهم می‌کند که به شرکت‌ها اجازه می‌دهد Playbookهای خود را خودکار کرده و با ابزارهای شخص ثالث ادغام شوند.معیار کلیدی و نقش ClickHouse: در امنیت سایبری، میانگین زمان تشخیص (MTDT) بسیار حیاتی است؛ یعنی زمان بین ورود رویدادها تا زمان شناسایی و نمایش تهدید به تحلیلگران امنیتی. ClickHouse به Exabeam کمک کرده است تا این معیار (MTDT) را کاهش دهد و نیاز به یک پایگاه داده تحلیلی بلادرنگ را برآورده سازد که بتواند جستجوی کم‌هزینه و سریع را فراهم کند.۲. معیارهای مقیاس و عملکردExabeam در ۱۰ منطقه جهانی از ClickHouse Cloud استفاده می‌کند. دستاوردهای مقیاس‌دهی به شرح زیر است:حجم داده‌گیری: در اوج، پلتفرم قادر به پشتیبانی از ۱.۲ میلیون رویداد در ثانیه است.میزان روزانه: تقریباً ۸۰ میلیارد رویداد روزانه در سیستم وارد می‌شود.ذخیره‌سازی: در چند ماه اخیر، بیش از ۳.۵ پتابایت داده وارد شده و این میزان در حال رشد است.مدل داده: داده‌ها در یک مدل اطلاعاتی مشترک (CIM) با بیش از ۱۰۰۰ فیلد نرمال‌سازی شده‌اند و مدل داده ClickHouse حول این ساختار ساخته شده است.۳. بهینه‌سازی‌های فنی و معماریبرای مدیریت ۱ میلیون رویداد در ثانیه در ClickHouse Cloud، بهینه‌سازی‌های متعددی انجام شده است [4، 5].الف) معماری و جداسازی وظایفبرای جلوگیری از تأثیر بارهای کاری سنگین خواندن (Read Heavy) بر عملیات نوشتن و ادغام، Exabeam از قابلیت‌های محاسباتی ClickHouse برای جداسازی فرآیندهای نوشتن، ادغام و خواندن استفاده کرد:Write Instance (نمونه نوشتن): صرفاً بر روی نوشتن داده‌ها در ClickHouse تمرکز دارد.Merge Instance (نمونه ادغام): ادغام‌های پس‌زمینه را انجام می‌دهد.Read Instance (نمونه خواندن): بارهای کاری مختلف خواندن را مدیریت می‌کند.ب) بهینه‌سازی برای جستجوی سریعبرای بهبود عملکرد جستجو، Exabeam تعداد ستون‌ها را بهینه‌سازی کرد:استفاده از فیلدهای فشرده (Consolidated Fields): اگرچه جدول فرضی آن‌ها بیش از ۱۲۰۰ ستون داشت، بازیابی تمام این ستون‌ها عملکرد کافی نداشت. با این حال، اگر فقط یک ستون جستجو می‌شد، پاسخ در کمتر از یک ثانیه حاصل می‌شد.کاهش تعداد ستون‌ها: بسیاری از ستون‌ها (حدود ۸۰ درصد) در مدل داده‌ای، مقدار Null داشتند. با فشرده‌سازی این ستون‌های نادر و قرار دادن آن‌ها در فیلدهای خاص (که در آن کلید، نام ستون و مقدار، ارزش ستون بود)، تعداد ستون‌ها از ۱۲۰۰+ به ۲۵۰ ستونکاهش یافت.مزیت عملکرد: این رویکرد توانست سرعت داده‌گیری را از ۱۰۰ هزار رویداد در ثانیه به ۲۵۰ هزار رویداد در ثانیه در یک خوشه سه‌گره‌ای ClickHouse افزایش دهد.ج) بهینه‌سازی داده‌گیری و پردازش رویدادخواننده (Reader) GCP: استفاده از خواننده اختصاصی GCP ۲۰٪ مزیت عملکردی در خواندن فایل‌ها از GCS Buckets فراهم کرد.مهاجرت JSON به Jackson: این تغییر ۶۰٪ عملکرد سریع‌تر در پردازش داده‌ها و رویدادهای JSON به همراه داشت.بهینه‌سازی نویسنده داده (Data Writer): انتقال ۱۰۰ هزار رویداد از ماشین به ClickHouse ابتدا ۲۰ ثانیه طول می‌کشید (با فرمت JSON/باینری خام). پس از آزمایش‌های مختلف، با استفاده از رویکرد بهینه‌سازی‌شده تبدیل ردیف‌ها به بایت‌ها و استفاده از byte array q input stream، زمان انتقال از طریق شبکه به ۱ ثانیه کاهش یافت.د) حل چالش‌های عملیاتیمشکل حداکثر فایل‌های قطعه (Max Part File Issue): هنگام درج ۱۰۰ هزار رویداد در یک دسته، داده‌ها به پارتیشن‌های مختلفی وارد می‌شدند که این امر منجر به ایجاد فایل‌های قطعه‌ای متعدد، استفاده زیاد از حافظه و لغو شدن فرآیندهای ادغام (Merge) می‌شد.راه حل: برای حل این مشکل، جریان داده‌گیری به رویدادهای بلادرنگ (Real-time) و بک‌لاگ (Backlog) تقسیم شد. رویدادهای بک‌لاگ به یک تاپیک جداگانه ارسال و در دسته‌های بزرگتر پردازش شدند، که این کار تعداد فایل‌های قطعه‌ای برای پارتیشن‌های قدیمی‌تر را کاهش داد و هزینه‌های عملیاتی را نیز پایین آورد.هزینه سخت‌افزاری و ایندکس‌گذاری: Exabeam در ابتدا از ایندکس اِن‌گرام (ngram index) استفاده می‌کرد که برای عبارات باقاعده و جستجوی IP مفید است، اما به سخت‌افزار بیشتری نیاز داشت زیرا ClickHouse باید تطبیق‌های پس‌زمینه را انجام می‌داد که برای داده‌های لاگ گران تمام می‌شد.راه حل: از آنجا که جستجوهای عبارت باقاعده تنها ۱٪ از پرس‌وجوهای مشتریان را تشکیل می‌داد، Exabeam به رویکرد توکن‌سازی (Tokenization) روی آورد. توکن‌سازی توکن‌های کمتری تولید می‌کند، به سخت‌افزار کمتری نیاز دارد و اندازه ایندکس را کاهش می‌دهد و در نهایت عملکرد ClickHouse را بهبود می‌بخشد.در نتیجه، با بهره‌گیری از ClickHouse، Exabeam توانست به قابلیت‌های جستجوی بسیار سریع، مقیاس‌پذیر، با تأخیر کم و مقرون به صرفه دست یابد.لینک ویدیوhttps://youtu.be/T87D6FTDGX0?list=TLGG9a--NsXGHFIyMzA5MjAyNQ</description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Tue, 23 Sep 2025 16:47:40 +0330</pubDate></item><item><title>تغییرات نسخه 25.3 بصورت LTS از کلیک هاوس</title><link>https://virgool.ir/@sahami.hamed/تغییرات-نسخه-253-بصورت-lts-از-کلیک-هاوس-ykpzkbmgmfw7</link><description>بازهم نسخه جدید و تغییرات جالب انگیز از کلیک هاوس امکانات کاربردی این نسخه از کلیک هاوس هم نوآورانه بودند هم برطرف کننده رنج های قدیمی مثل مشکلات استخراج اطلاعات از درون داده های SemiStructured مانند JSON که خیلی از سیستم های مدیریت داده تا به امروز سرعت بازیابی مناسبی بخصوص برای مصارف تحلیلی ارائه نکرده بودند.پشتیبانی از نوع داده ای JSON به شکل موثر که بررسی و روش استفاده صحیح اون رو از طریق یوتیوب می توان مشاهده کرد.نوع داده ای JSONتخمین میزان فشرده سازی داده براساس الگوریتم های موجود و در حال پشتیبانی در کلیک هاوسمیران فشرده سازیاستخراج تفاضل در آرایه هاarraySymmetricDifferenceرونمایی از روش جدید رمز نگاری برای بلاک چینkeccak256 استفاده از حافظه پنهان به شکل بهینه بر اساس شرایط کوئریحافظه پنهانحافظه پنهان مبتنی بر حافظه RAMUserspace Page Cacheموازی سازی خودکار برای منابع داده خارج از کلیک هاوسموازی سازی خودکاراینترفیس SSH برای اتصال به سرور حالا دیگه میشه حتی از موبایل هم استفاده اما به شکل امنSSH Interfaceیکپارچگی با Iceberg دوست داشتنی DataLakeCatalogبخشی  از تغییرات نسخه که در کانال رسمی کلیک هاوس برای یوتیوب تو این مقاله آورده شد، اما برای اطلاع دقیق و کامل تر از این تغییرات به وب سایت رسمی و مستندات کلیک هاوس مراجعه کنید.</description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Sat, 22 Mar 2025 01:00:00 +0330</pubDate></item><item><title>تغییرات نسخه 25 در ClickHouse</title><link>https://virgool.ir/@sahami.hamed/تغییرات-نسخه-25-در-clickhouse-cmoy9kotz4si</link><description>شرکت altinity ارائه کننده سریعترین پایگاه داده ی تحلیلینسخه 25پایگاه داده تحلیلی که هر چند وقت یکبار نسخه ای جدید از این محصول رو ارائه میکنه در نسخه آخرش 12 امکان جدید برای استفاده کننده هایش ارائه کرده است. این بار چند مورد از این تغییرات و امکانات رو با شما دوستان عزیز باشتراک میزارم تا شما هم مثل از این محصول بتوانید به شکل بهتری برای سازمان استفاده کنید.استفاده از زیر ستون ها در عبارت پیش فرض &#34;Support subcolumns in the DEFAULT and MATERIALIZED expressions&#34;اغلب داده های ورودی در بستر های مشابف کافکا و ... از ساختار داده ای JSON استفاده میکنند که از همین رو هر بهبود و امکان جدیدی در این محصول بروی این نوع داده ها مطمئنا برای شما دوستان هم میتواند مفید باشد.نمونه استفاده اضافه شدن یک موتور جدید برای دیتابیس های کلیک هاوس تحت عنوان DatabaseBackupاگر به یک نسخه از بکاپ دیتابیس نیاز دارید، با کمک نسخه جدید می توانید بصورت مستقیم از آن استفاده کنید و زمان خود را در استفاده مجدد از آن مدیریت و صرفه جویی کنید.نمونه استفاده از موتور جدید دیتابیسیکپارچگی با &#34;دلتا لیک&#34; با استفاده از کتابخانه  از دیتابریکس می توانیم مطابق نمونه زیر از دلتا لیک نیز در ساخت جداول درون کلیک هاوس استفاده کنیم.دلتا لیک و جدول کلیک هاوسایجاد ایندکس بر اساس شاخص OrderByدر کلیک هاوس می توانید برای جستجوی بهینه از کلید اصلی، پارتیشن بندی استفاده کنید اما در نسخه جدید کلیک هاوس برای بهبود بازدهی و سرعت می توانید مطابق تصویر و نمونه زیر از شاخص های مرتبط سازی نیز استفاده کنید.بهره گیری از OrderBy برای دستور Selectنتیجه گیریدر نسخه جدید علاوه بر امکانات جدید شاهد رفع اشکالات و قابلیت های نو آورانه دیگری می توانید باشید که برای تکمیل دانش و تجربه حال بهتر  در کلیک هاوس دو لینک معرفی تغییرات نسخه و ویدئو ارائه شده توسط کانال کلیک هاوس در یوتیوب و الکسی استفاده کنید. علاوه بر این پیشنهاد میکنم به تصویر زیر که بیانگر قابلیت های بسیار خوب کلیک هاوس در یکپارچگی با سایر ابزارها و راه کار هاست، توجه ویژه ای داشته باشید.یکپارچگی با ابزارها</description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Fri, 28 Feb 2025 21:50:53 +0330</pubDate></item><item><title>کلیک هاوس و شدنی های بینظیرش</title><link>https://virgool.ir/@sahami.hamed/کلیک-هاوس-و-شدنی-های-بینظیرش-gqm9heh5rx55</link><description>تعریف ورودی برای Viewتو بین فعالان حوزه دیتا پذیرفته شده است وقتی تو دیتابیس هایی که استفاده میکنند نیاز دارند یه دستور select که معمولا پیچیده هست و یا نیاز دارند چند مرتبه از اون استفاده کنند از یک آبجکت به اسم View استفاده میکنند. این آبجکت بهشون اجاز میده که فقط دستور یا کوئری پیچیده رو ذخیره کنند. تو برخی موارد و محصولات دیتابیس یا پایگاه های داده که رابطه ای بودن و بعضا تجربه کار باهاش رو داریم، امکان ذخیره کردن نتیجه دستور SELECT هم وجود داره که اصلاحا و عموما MaterializedView صدا زده میشوند. اما کلیک هاوسداخل این محصول بی رغیب امکان استفاده از MaterializedView وجود داره و کلی Option و امکان اضافه تر هم به شما میده که اون ها رو باهم بررسی میکنیم. به صورت پیش فرض این ابجکت برای شما بر اساس تریگر و اضافه شدن رکورد جدید به جدول منبع برای شما کار خواهد کرد و برای ساخت سیستم های در لحظه یا RealTime بخصوص وقتی جدول منبع با کافکا یا منابع اطلاعاتی مشابه اون پر میشه بسیار عالی کار خواهد کرد.قابیلت appendبا استفاده از این گزینه تو زمان ساخت یک متریالایز ویو میشه کاری کرد که داده های مورد نیازمون به صورت تدریجی یا Incremental به جدول مقصد اضافه بشه تا بار سبک تری به سیستم تحمیل بشه و تو حجم اطلاعاتی زیاد بازهم امکان استفاده از متریالاز ویو برای نگهداری و افزودن تازه های سیستم وجود داشته باشه.CREATE MATERIALIZED VIEW &lt;DbName&gt;.&lt;ObjectName&gt; REFRESH EVERY 1 MINUTE APPEND TO &lt;DbName&gt;.&lt;ObjectName&gt;&#xA;As&lt;your query&gt;&#xA;   SETTINGS allow_experimental_refreshable_materialized_view = 1تو نمونه بالا هر یک دقیقه یکبار متریالایز ویو اجرا خواهد شد و جدول مقصد شما رو بر اساس کوئری تون بروز میکنه، شما در این بخش میتوانید از شرط های مبتنی براساس زمان &#34;تغییرات یک دقیقه آخر&#34; و حتی آفست &#34;بزرگتر بودن از آخرین آفست یا کلید موجود&#34; استفاده کنید تا رکوردهای بازه مورد نظرتون رو دریافت کنید. تعریف ورودی برای Viewدر کلیک هاوس امکانات یا آپشن های بیشتری برای کلیک هاوس بازهم وجود داره، اما چیزی که من رو سورپرایز کرد امکان تعریف ورودی برای ویو در کلیک هاوس بود که تو خیلی از سیستم های ذخیره اطلاعات رابطه ای ندیده بودم. کلیک هاوس بصورت مبتنی بر ستون &#34;Column Base&#34;هست و با این امکانی که ارائه کرد کنار کلی قابلیت دیگه من رو خوشحال کرد.نمونه اسکریپت ایجاد ویو بصورت ParameterizedCreate Script&#xA;CREATE VIEW raw_data_parametrized ASSELECT *FROM raw_dataWHERE (id &gt;= {id_from:UInt32}) AND (id &lt;= {id_to:UInt32})&#xA;&#xA;Usage Example&#xA;SELECT count() FROM raw_data_parametrized(id_from=0, id_to=50000);با همین ابتکار ساده خیلی جاها به کمک من اومد تا بتونم شبیه به یک تابع این بار View رو صدا بزنم و بر اساس ورودی ها منتظر خروجی ای باشم که تو مصارف تحلیلی و تجمیعی در برابر دیتابیس های معمول سرعت 100 برابری داره و بازهم حال خودم و استفاده کننده گان داده در سازمان رو خوشحال کنه.هر جا دوست داشتید چیزهای بیشتر از کلیک هاوس بدونین یا مشکلی رو تو کلیک هاوس مشورت کنین با دوست دیگه ای رو کمک من حامد سهامی حتما حساب کنین، خوشحال میشم . </description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Mon, 10 Feb 2025 16:55:28 +0330</pubDate></item><item><title>Monitoring Clickhouse</title><link>https://virgool.ir/@sahami.hamed/monitoring-clickhouse-kk2eyjciyr9h</link><description>سریعترین دیتابیس برای کارهای تحلیلی که این روزها برای خیلی از فعالان حوزه بیگ دیتا شناخته شده است. همواره استفاده از هر منبع ذخیره سازی اطلاعات  برای محیط عملیاتی نیاز جدی و مبرمی به مانیتورینگ و پایش مداوم درخواست ها یا کوئری های در حال پردازش دارد. چگونگی استفاده کاربران و میزان استفاده آنها از منابع  سرویس دهنده (در کلاستر یا کلاسترهای سازمان) بایستی به طور منظم مورد بررسی قرار بگیرد تا بهینه سازی و یا گاها آموزش های لازم در دستور کار دپارتمان داده قرار بگیرد.علاوه برای خیل ابزارهای گوناگون مانیتورینگ در جامعه سورس باز کلیک هاوس، میتوانیم از بسترهای مصورسازی (Visulization) در سازمان مانند Metabase, Superset و حتی PowerBI با کمک نمونه کد های زیر استفاده کنیم. مانیتورینگ کوئری هابه طور کلی کار را بر اساس دو شاخصه زیر می توانیم دسته بندی کنیم:مانیتورینگشناسائی اشکالاتنمای کلی از کلاستربا استفاده از کوئری زیر میتوانیم چگونگی اطلاعات کمی و کیفی جداول درون دیتابیس را مشاهده کنیم تا فراوانی و در نمای دیگر اشتباهات سهوی در ساخت و طراحی جداول را شناسایی کنیم.SELECT     table,     sum(rows) AS rows,     max(modification_time) AS latest_modification,     formatReadableSize(sum(bytes)) AS data_size,     formatReadableSize(sum(primary_key_bytes_in_memory)) AS primary_keys_size,     any(engine) AS engine,     sum(bytes) AS bytes_size FROM clusterAllReplicas(default, system.parts) WHERE active GROUP BY     database,     table ORDER BY bytes_size DESC&#xA;Global overview of your cluster پر هزینه ترین کوئری ها در کلیک هاوسدر گام بعدی با استفاده یک کوئری تلاش میکنیم تا کوئری هایی که برای اجرا به سمت کلیک هاوس ارسال  شده اند را پس از مرتب سازی بر اساس شاخصی مانند مدت اجرا/پردازش کوئری مشاهده کنیم که در مورد استفاده شما میتواند تغییر پیدا کند.SELECT    type,    query_start_time,    formatReadableTimeDelta(query_duration_ms) AS query_duration,    query_id,    query_kind,    is_initial_query,    query,    concat(toString(read_rows), &#39; rows / &#39;, formatReadableSize(read_bytes)) AS read,    concat(toString(result_rows), &#39; rows / &#39;, formatReadableSize(result_bytes)) AS result,    formatReadableSize(memory_usage) AS `memory usage`,    exception,    concat(&#39;\n&#39;, stack_trace) AS stack_trace,    user,    initial_user,    multiIf(empty(client_name), http_user_agent, concat(client_name, &#39; &#39;, toString(client_version_major), &#39;.&#39;, toString(client_version_minor), &#39;.&#39;, toString(client_version_patch))) AS client,    client_hostname,    databases,    tables,    columns,    used_aggregate_functions,    used_dictionaries,    used_formats,    used_functions,    used_table_functions,    ProfileEvents.Names,    ProfileEvents.Values,    Settings.Names,    Settings.ValuesFROM system.query_logWHERE (type != &#39;QueryStart&#39;) AND (query_kind = &#39;Select&#39;) AND (event_date &gt;= (today() - 1)) AND (event_time &gt;= (now() - toIntervalDay(1)))ORDER BY query_duration_ms DESCLIMIT 10Most expensive SELECT queriesدر این نمونه برای سازمان تلاش کردم از ابزار متابیس برای مصور سازی این اطلاعات استفاده کرده ام و برای مشاهده کوئری های اجرا شده از طریق این ابزار و کاربران سازمان ستونی را برای شناسایی و مشاهده اطلاعات کاربر مرتبط نیز اضافه کرده ام تا برای بررسی دقیق تر مشکل با آنها بتوانم ارتباط بگیرم.کوئری اصلاح شدهSELECT    type,    query_start_time,    query_duration_ms,    formatReadableTimeDelta(query_duration_ms/1000) AS query_duration,    query_id,    query_kind,    is_initial_query,    query,    case when extract(query, &#39;userID: (\\d+)&#39;)!=&#39;&#39; then concat(&#39;https://***.com/admin/people/&#39;,extract(query, &#39;userID: (\\d+)&#39;),&#39;/edit&#39;) else &#39;N/A&#39; end AS MetabaseUserID,    concat(toString(read_rows), &#39; rows / &#39;, formatReadableSize(read_bytes)) AS read,    concat(toString(result_rows), &#39; rows / &#39;, formatReadableSize(result_bytes)) AS result,    formatReadableSize(memory_usage) AS `memory usage`,    exception,    concat(&#39;\n&#39;, stack_trace) AS stack_trace,    user,    initial_user,    multiIf(empty(client_name), http_user_agent, concat(client_name, &#39; &#39;, toString(client_version_major), &#39;.&#39;, toString(client_version_minor), &#39;.&#39;, toString(client_version_patch))) AS client,    client_hostname,    databases,    tables,    columns,    used_aggregate_functions,    used_dictionaries,    used_formats,    used_functions,    used_table_functions,FROM system.query_logWHERE (type != &#39;QueryStart&#39;) AND (query_kind = &#39;Select&#39;) AND (event_date &gt;= (today() - 1)) AND (event_time &gt;= (now() - toIntervalDay(14)))order by query_duration_ms descخروجی این کار که برای مدیر سرویس کلیک هاوس نیز سفارشی سازی شده است مانند تصویر زیر خواهد بود.نمونه اطلاعات در بستر متابیسنمونه جزییات قابل مشاهده در هر یک از سطرهای اطلاعاتی نیز به شکل دیالوگ نیز قابل مشاهده و بررسی خواهد بود.جزییات استخراج شده از کوئرینکته! بدلیل یکسان بودن بستر مانیتورینگ و پایش داده های کلیک هاوس به آسانی با کلیک بروی لینک سفارشی شده میتوان از هویت کاربران نیز آگاه شد تا با آنها مذاکره یا Action مورد نیاز را در دستور کار قرار داد.در بررسی جزییات نتیجه بدست آمده از کوئری میزان حجم اطلاعات خوانده شده از دیسک، حافظه جانبی یا RAM و مدت کوئری را میتوان مورد بررسی قرار داد.مقایسه مدت اجرای کوئری هابر این اساس و نیاز مندی کوئری زیر میتواند به شما امکان مقایسه مدت اجرا یا هر متریک دیگری که در مقایسه کوئری ها نیاز دارید با جای گزاری و بازنویسی بخش یا ستون مربوطه در کوئری زیر صورت پذیرد. SELECT     query_id,     query,     formatReadableTimeDelta(query_duration_ms) AS query_duration FROM clusterAllReplicas(default, system.query_log) WHERE (type != &#39;QueryStart&#39;) AND (query_kind = &#39;Select&#39;) AND (event_time &gt;= (now() - toIntervalHour(1))) ORDER BY event_time DESC LIMIT 10Compare metrics between two queriesدر ادامه دو نسخه از یک کوئری را میتوان با شناسایی کوئری آی دی آنها از system.querylog با استفاده کوئری زیر مقایسه کرد.WITH     query_id = &#39;...query_id_old_version...&#39; AS first,     query_id = &#39;...query_id_new_version...&#39; AS second SELECT     PE.Names AS metric,     anyIf(PE.Values, first) AS v1,     anyIf(PE.Values, second) AS v2 FROM clusterAllReplicas(default, system.query_log) ARRAY JOIN ProfileEvents AS PE WHERE (first OR second) AND (event_date = today()) AND (type = 2) GROUP BY metric HAVING v1 != v2 ORDER BY     (v2 - v1) / (v1 + v2) ASC,     v2 ASC,     metric ASCمتوسط مدت و تعداد درخواست هاد ر نمونه کوئری و نمودار زیر می توانید تعداد و مدت صرف شده &#34;بصورت میانگین&#34; برای اجرای کوئری های پردازش در کلیک هاوس را مشاهده کنید تا رفتارهای نامتعارف و بحران های در حال اتفاق را مشاهده و گاها پیش بینی نمایید.SELECT    toStartOfHour(event_time) AS event_time_h,    count() AS count_m,    avg(query_duration_ms) AS avg_durationFROM clusterAllReplicas(default, system.query_log)WHERE (query_kind = &#39;Select&#39;) AND (type != &#39;QueryStart&#39;) AND (event_time &gt; (now() - toIntervalDay(3)))GROUP BY event_time_hORDER BY event_time_h ASCAverage query duration and number of requestsتعداد کوئری ها بر اساس کلاینت های کلیک هاوسکوئری زیر میتواند به شما امکان مشاهده و محاسبه تعداد کوئری ها بر اساس نام کلاینت را ارائه کند تا کانال های  ارتباطی بهره برداران و میزان کارهای دریافتی از سمت آنها را شناسایی نموده و برای مدیریت یا بهبود آنها اقدام مناسبی را اتخاذ نمایید.SELECT    toStartOfMinute(event_time) AS event_time_m,    if(empty(client_name), &#39;unknow_or_http&#39;, client_name) AS client_name,    count(),    query_kindFROM clusterAllReplicas(default, system.query_log)WHERE (type = &#39;QueryStart&#39;) AND (event_time &gt; (now() - toIntervalMinute(10))) AND (query_kind = &#39;Select&#39;)GROUP BY    event_time_m,    client_name,    query_kindORDER BY    event_time_m DESC,    count() ASCLIMIT 100Number of SQL queries by client or useنتیجه گیریدر واقع امکان مشاهده و پایش تمام سرویس ها و اتفاقات به صورت چشمی توسط انسان کاری نشدنی یا به عبارتی دیگر نامطمئن است. بنابراین پیشنهاد میکنم تا با پیاده سازی کد و یا اسکریپت های مطلوب اقدام به بررسی های برنامه ریزی شده و سیستماتیک نمایید و به هنگام کشف موارد قابل رسیدگی و پیشگیری به کارشناسان و مدیران سرویس اعلان &#34;notification&#34; های مناسب ارسال نمایید و در صورت نبود بستر مورد نیاز از ایمیل استفاده شود.</description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Mon, 10 Feb 2025 13:18:46 +0330</pubDate></item><item><title>Microservice Design Patterns</title><link>https://virgool.ir/@sahami.hamed/microservice-design-patterns-du8yuaxngpfr</link><description>انواع مرسومِ الگوهای طراحی میکروسرویس‌ها که مجموعه‌ای از بهترین روش‌ها و راه‌حل‌ها برای طراحی و پیاده‌سازی سیستم‌های مبتنی بر معماری میکروسرویس هستند. این الگوها به توسعه‌دهندگان کمک می‌کنند تا چالش‌های رایج در این حوزه را مدیریت کنند. الگوی تجزیه بر اساس کسب‌وکار و یا Domain-Driven Design - DDDاین الگو پیشنهاد می‌کند که سیستم بر اساس دامنه‌های کسب‌وکار (Business Domains) به میکروسرویس‌های کوچک‌تر تقسیم شود. هر میکروسرویس مسئول یک بخش خاص از کسب‌وکار است. این کار باعث می‌شود که هر سرویس مستقل و متمرکز بر یک وظیفه خاص باشد. البته برای اطلاع بهتر از این رویکرد حتما از مطالب مفید منتشر شده از بنیانگذار آن Eric Evans در وبسایت های مطرح مراجعه نمایید و مطابق صحبت های ارائه کننده این الگوی طراحی در سیستم هایی نظیر راه کارهای جامع کشتیرانی و برنامه ریزی بارگیری آنها که تغییر پذیری بالایی را به صورت ذاتی دارد توصیه میشود.الگوی API Gateway به عنوان یک نقطه ورود واحد برای تمام درخواست‌های کلاینت‌ها عمل می‌کند. این الگو درخواست‌ها را به میکروسرویس‌های مناسب هدایت می‌کند و همچنین می‌تواند وظایفی مانند احراز هویت، لاگ‌گیری و تبدیل پروتکل‌ها را انجام دهد. استفاده از این الگو به عنوان مثال در راهکار PGSB از سازمان فناوری اطلاعات کشور و مطابق اسم آن برای ارائه خدمات دولت الکترونیک مناسب بوده و توسط برخی از اپراتورهای آن به کار گرفته شده است.الگوی Circuit Breakerاین الگو برای جلوگیری از شکست‌های زنجیره‌ای در سیستم استفاده می‌شود. اگر یک میکروسرویس از کار بیفتد، Circuit Breaker درخواست‌ها را به آن سرویس قطع می‌کند تا از انتشار خطا به سایر بخش‌های سیستم جلوگیری شود. پیاده سازی این الگوی طراحی در سیستم های اطلاع رسانی و استعلامی در مقیاس های بزرگ نیز توصیه میشود.الگوی Event Sourcingدر این الگو، تمام تغییرات حالت سیستم به‌صورت رویداد (Event) ذخیره می‌شوند. این کار به شما امکان می‌دهد تا در هر لحظه وضعیت سیستم را بازسازی کنید و از آن برای دیباگ یا تحلیل استفاده کنید. البته به کارگیری این الگوی طراحی می تواند در زمینه های و صنایع مختلفی توصیه شود که بعنوان مثال راه کاری های CRM نیز استعداد بالایی برای به کارگیری این الگوی طراحی نیز دارد.الگوی CQRS (Command Query Responsibility Segregation)این الگو عملیات خواندن (Query) و نوشتن (Command) را از هم جدا می‌کند. با این کار می‌توانید پایگاه داده‌های جداگانه برای خواندن و نوشتن داشته باشید و عملکرد سیستم را بهبود بخشید. راه کارهای مربوط به بازارهای مالی و سرمایه مانند کارگزاری ها بسیار مناسب برای استفاده از این الگوی طراحی هستند.الگوی Sagaبرای مدیریت تراکنش‌های توزیع‌شده بین چندین میکروسرویس استفاده می‌شود. هر مرحله از تراکنش توسط یک میکروسرویس انجام می‌شود و در صورت شکست، مراحل جبرانی (Compensating Transactions) اجرا  می‌شوند. برای تایید نهایی چند مرحله در سرویس های مجزا این الگوی طراحی نیز پرکاربرد و مفید خواهد بود که به عنوان نمونه تراکنش های مالی بین بانکی و افتتاح حساب های دسته ای و... نیز از نمونه کاربردهای این الگوی طراحی هستند.الگوی Service Registryاین الگو برای مدیریت و کشف سرویس‌ها استفاده می‌شود. هر میکروسرویس هنگام راه‌اندازی خود را در یک رجیستری ثبت می‌کند و سایر سرویس‌ها می‌توانند از طریق این رجیستری سرویس‌های مورد نیاز خود را پیدا کنند.مقیاس پذیری، پویایی سرویس ها و موارد  دیگیری نیز از فواید و کاربردهای این الگوی طراحی در رویکرد میکرو سرویس است. لگوی Bulkhead این الگو شبیه به دیواره‌های کشتی است که از گسترش آسیب به کل سیستم جلوگیری می‌کند. با جداسازی منابع (مانند threadها یا connectionها) برای هر میکروسرویس، از تأثیر خطاهای یک سرویس بر سایر سرویس‌ها جلوگیری می‌شود. سرویس پرداخت، سرویس کاربران و سرویس محصولات همگی از کاربردها و مثال های خوب برای این الگوی طراحی هستند که با مدیریت و محدودسازی میزان منابع آنها در مدیریت بهتر محیط عملیاتی می توان عمل کرد.به شکل خلاصهسایر الگوهای قابل استفاده در این رویکرد شامل موارد زیر می شود تا همگی در طراحی و چگونگی پیاده سازی این دست سیستم های نرم افزاری به کمک تیم های توسعه و طراحان/معماران شوند.Database per ServiceShared DatabaseOrchestrationChoreographySidecarBackend for Frontend (BFF) Strangler Figنتیجه گیریالگوهای طراحی میکروسرویس‌ها به شما کمک می‌کنند تا سیستم‌های مقیاس‌پذیر، قابل اعتماد و انعطاف‌پذیر بسازید. انتخاب الگوی مناسب به نیازهای کسب‌وکار و پیچیدگی سیستم شما بستگی دارد. اگر سوالی دارید یا نیاز به توضیح بیشتری دارید، همیشه از طریق لینکدین حامد سهامی و در قالب پیام های خصوصی کنارتون هستم. در صورتیکه ادامه و تشریح هر کدوم از بخش های این نوشته براتون جذاب بود حتما بهم اطلاع بدید تا براتون به شکل مفصل تری نوشته های جدیدی رو آماده کنم. ;)</description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Sun, 09 Feb 2025 23:19:22 +0330</pubDate></item><item><title>Python ETL</title><link>https://virgool.ir/@sahami.hamed/python-etl-nuckjetefppk</link><description>سلام دوستان و مخاطبین عزیزمنمونه کد این نوشته برای انتقال اطلاعات از پایگاه داده PostgreSQL به پایگاه داده MS SQL با زبان پایتون با سادگی زیاد تهیه شده است. در این کد تلاش کردم ضمن حفظ سادگی بار خیلی کمی بروی منبع اطلاعاتی با خرد کردن اطلاعات به تعداد رکوردهای محدود پنج هزارتایی تقسیم کنم تا مدت تراکنش و Lock  شدن جدول منبع به میزان زیادی کاهش پیدا کنه، علاوه بر اون سعی کردم تو کتابخانه پاندا برای ذخیره اطلاعات در سمت پایگاه داده مقصد از روش BulkInsert استفاده کنم تا ذخیره کردن اطلاعات هم با سرعت قابل قبولی صورت بگیره.دلتون شاد کدتون سلامت ;)import psycopg2import pyodbcimport pandas as pdfrom sqlalchemy import create_engine# PostgreSQL connection detailspg_db = &#34;****&#34;pg_user = &#34;**********&#34;pg_password = &#34;***************&#34;pg_host = &#34;**********&#34;pg_port = &#34;**********&#34;# MSSQL connection detailsmssql_driver = &#34;{ODBC Driver 17 for SQL Server}&#34;mssql_server = &#34;*****************&#34;mssql_db = &#34;*****&#34;mssql_user = &#34;***********&#34;mssql_password = &#34;*************&#34;table_name = &#39;*****************&#39;# Connect to PostgreSQL databasewith psycopg2.connect(database=pg_db, user=pg_user, password=pg_password, host=pg_host, port=pg_port,connect_timeout=0) as pg_conn:# Connect to MSSQL databaseconn_str = f&#34;DRIVER={mssql_driver};SERVER={mssql_server};DATABASE={mssql_db};UID={mssql_user};PWD={mssql_password}&#34;engine = create_engine(f&#34;mssql+pyodbc:///?odbc_connect={conn_str}&#34;,fast_executemany=True)# ...# Fetch data from PostgreSQL table in chunks and insert into MSSQL tablecommand = &#34;&#34;&#34;SELECT *FROM &#34;&#34;&#34;+table_name+&#34;&#34;&#34;&#34;&#34;&#34;df = pd.read_sql_query(command, pg_conn, chunksize=5000)# Establish a connection to the MSSQL databasewith pyodbc.connect(conn_str) as mssql_conn:# Execute the DELETE querycursor = mssql_conn.cursor()cursor.execute(&#34;&#34;&#34; truncate table temp_&#34;&#34;&#34;+table_name)mssql_conn.commit()# Iterate over the chunks and insert into MSSQL tablefor chunk in df:chunk.to_sql(&#39;temp_&#39;+table_name, con=engine, if_exists=&#39;append&#39;, index=False )print(&#39;Data inserted successfully&#39;)# ...# Execute the DELETE querycursor.execute(&#34;&#34;&#34;DELETE FROM &#34;&#34;&#34;+table_name+&#34;&#34;&#34;WHERE id IN (SELECT id FROM temp_&#34;&#34;&#34;+table_name+&#34;&#34;&#34;);INSERT INTO &#34;&#34;&#34;+table_name+&#34;&#34;&#34;SELECT * FROM temp_&#34;&#34;&#34;+table_name+&#34;&#34;&#34; with(tablock);&#34;&#34;&#34;)print(&#39;Data transfered from temp&#39;)# Commit the changesmssql_conn.commit()# Close connectionspg_conn.close()engine.dispose()</description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Wed, 11 Oct 2023 23:18:41 +0330</pubDate></item><item><title>بارگزاری فایل در  Bucket Amazon S3</title><link>https://virgool.ir/@sahami.hamed/بارگزاری-فایل-در-bucket-amazon-s3-muu52nj7xznb</link><description>سرویس محبوب و خوش اقبال شرکت آمازون برای فراهم کردن بستر ابری مدیریت و ذخیره کردن فایل ها می تواند راه حل تعداد قابل توجهی از دغدغه های تیم های فنی شرکت های مختلف باشد. از همین رو با فرض آگاهی مخاطبین به میزان کافی از چیستی، چرایی و چگونگی این موضوع نمونه کد زیر که برای اولین بار از من چند ساعت وقت گرفت رو با شما دوستان به زبان بسیار ساده و روان پایتون به اشتراک میزارم تا شاید از هزینه زمانی یا چالش های یادگیری اولیه کاسته بشه و برای شما مخاظبین مفید باشه.import loggingimport osimport pathlibfrom pprint import pprintimport boto3import botocorefrom botocore.exceptions import ClientErroraws_access_key_id = &#39;54feafac58d8a866**********************4ad21&#39;aws_secret_access_key = &#39;7b839c4dc8a247b79*************************f81471267bae2cb08a&#39;local_file_path = r&#34;&lt;fullpath of your file&gt;&#34;bucket_name = &#39;snappshop-stage-databases&#39;s3_key = &#39;path/to/s3/&lt;yourfilename&gt;&#39;endpoint_url = &#39;https://*****&#39;try:    s3 = boto3.client(&#39;s3&#39;, endpoint_url=&#39;https://s3*****&#39;,                      aws_access_key_id=aws_access_key_id,                      aws_secret_access_key=aws_secret_access_key)    response = s3.list_objects_v2(Bucket=bucket_name)    if &#39;Contents&#39; in response:        for file in response[&#39;Contents&#39;]:            print(file[&#39;Key&#39;])    else:        print(&#34;Bucket is empty.&#34;)    s3.upload_file(local_file_path, bucket_name, s3_key)    print(&#39;File uploaded successfully.&#39;)except botocore.exceptions.NoCredentialsError:    print(&#39;AWS credentials not found.&#39;)except botocore.exceptions.EndpointConnectionError:    print(&#39;Unable to connect to the S3 endpoint.&#39;)except Exception as e:    print(e)کد ارائه شده در ابتدا با تعیین کلید های رشته ای برای اتصال به سرویس دهنده محلی سازمان یا شرکت شما و در یافت آدرس فایل مرجع و همچنین در یافت نام فایل در آدرس مقصد امکان بارگزاری فایل رو به شما ارائه میکند. همچنین در ابتدای امر به هنگام اجرای این کد فایل های از پیش ارسال شده به باکت &#34;سطل&#34; های  سرویس آمازون برای شما نمایش داده میشود. نکته! امکان استفاده از ابزار داخل Remote Desktop Manager البته به صورت غیر قابل اتکا برای دریافت و بارگزاری فایل درون سرویس مورد بحث از شرکت آمازون به تازگی فراهم شده است.دلتون شاد، کدتون سلامتhttps://en.wikipedia.org/wiki/Amazon_S3</description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Tue, 03 Oct 2023 23:20:33 +0330</pubDate></item><item><title>مقدمه ای بر JUnit</title><link>https://virgool.ir/coderlife/مقدمه-ای-بر-junit-ohtwlm5zj4pm</link><description>آزمایش و تست بخش اساسی تولید نرم افزار است و منجر به افزایش اطمینان پذیری کد و دستورات نوشته شده برنامه نویسان میشود. با وجود کد های تست نوشته شده و اجرای آنها قبل از ارائه نسخه جدید از برنامه باعث می شود تنها خطاهای کوچکی در نرم افزار باقی بماند. در این مقاله نمیخواهم تمام ویژگی های JUnit را معرفی کنم، اما یک سیر کامل از چگونگی استفاده و اجرای آن را برای توسعه دهندگان جاوا نمایش خواهم داد .  سورس کد این برنامه در سایت گیت هاب قابل دریافت خواهد بود. درک تست هاقبل از تعریف مجموعه ای از تست ها ما باید فلسفه و دلیل پشت Test Case ها درک کنیم و بدانیم که ظرفیت یا تاثیر حد اکثری آن را بکار بگیریم. زمانی که شما کد یا قطعه ای از برنامه را می نویسید، شما امیدوار  هستید آنطور که می خواهید پیش برود.  برای مثال اگر شما یک برنامه ماشین حساب را می نویسید، انتظار خواهید داشت در جمع دو عدد 1 و 0 نتیجه برابر با عدد یک باشد. اگر اینطور نبود برنامه شما اشتباه عمل کرده است . به بیان عمومی تر ما با استفاده از Test Case میخواهیم به مشخصه هایی که برنامه با بدست آوردن آنها بدقت و کارایی صحیح دست پیدا میکند را شناسایی خواهیم کرد.تعریف Testما با استفاده از تست میتوانیم میزان دقت برنامه را در موارد استفاده از پیش تعیین شده اش را بسنجیم. در مثال ما برنامه ماشین حساب قرار بود با استفاده از عملیات محاسباتی و این امر نیز از ویژگی ها و قابلیت های اصلی برنامه به شمار می آمد. ما باید آزمایش کنیم که برنامه ما برای وروردی های ثابتی مانند 0و1 نتیجه درستی را باز میگرداند یا خیر.لازم بذکر است که امروزه در مدیریت تیم های توسعه به صورت AGILE از تست ها یا آزمایش های خودکار استفاده میشود که با پیکربندی و روش های ساده  ای میتوانند بعد از هر تغییر به صورت خودکار اجرا شوند . بعد از گذشت دو دهه فریم ورک های فراوانی برای Automated Testing ارائه شد اما JUnit معروفترین آنها در زمان جاری به حساب می آید.راه اندازی تست ها در پروژهبرای ایجاد پروژه با امکان استفاده از این فریم ورک کافیست تا dependency های زیر را به پروژه اضافه کنیم. آزمایش یک Featureاولین گام برای نوشتن تست برنامه ایجاد قابلیت یا feature برای برنامه است. برای مثال برنامه ی ساده ی ماشین حساب را در نظر بگیرید. ماشین حساب در مثال ما تنها یک عمل ساده جمع دو عدد را انجام می دهد.ایجاد یک Test Caseبا ساخت یک کلاس اختصاصی برای رفتار های مورد نیاز تست برنامه ماشین حساب تحت عنوان Calculator Test می توانیم مانند مثال زیر با کمک annotaion ساده ی @Test یک متد ساده تست ایجاد کنیم. فرایند پیاده سازی شده در این تست شامل گام های زیر است. GivenWhenThenدر مراحل مشحص شده ابتدا از کلاس های مورد نیاز نمونه سازی خواهیم کرد و سپس در مرحله دوم متد مورد نظر را فراخوانی میکنیم و سپس نتیجه را درون حافظه نگه داری می کنیم تا در ادامه با استفاده رفتار های استاندارد تست مانند Assertion جواب یا خروجی متد را راستی آزمایی کنیم. متد های مختلفی برای راستی آزمایی در تست Case های نوشته شده با استفاده از روش Assertion وجود دارد که در تصویر زیر می توانید آنها را مشاهده کنید.دوستان عزیز توجه داشته باشید که نتیجه فراخوانی تمامی متدهای فوق در تست Case های نوشته شده در کلاس های تست شما بایستی مقدار True را به عنوان جواب و خروجی در بر داشته باشند. در غیر اینصورت تست های شما Failed خواهد شد.وابستگی های Mock در تست  Case هادر فرایند اجرای تست نباید فراخوانی متد های کلاس های نوشته شده تاثیرات و تغییرات دائمی و واقعی بروی اطلاعات اصلی سیستم و ... ایجاد کنند. بنابراین باید نسخه ای از کلاس های پایه ی تست های شما در محیط تست استفاده شوند که به صورت واقعی و دائمی بروی اطلاعات و سیستم تاثیر نگذارند و تنها در چرخه اجرای تست به کار گرفته شوند. Mockito بهترین فریم ورک تجربه شده توسط بسیاری از افراد تا به امروز برای ساخت نشخه های Mock از کلاس های شما عزیزان برای استفاده در Test Case ها می باشد.برای استفاده از این فریم ورک کافیست که تغییرات کمی را مانند شکل زیر در Pom.xml پروژه دلخواه تان انجام دهید.دوستان عزیز بعد از افزودن این وابستگی یا dependency به پروژه تون میتونین با استفاده از متد mock() از کلاس Mockito از کلاس های پایه ی مورد استفاده در Test Case هاتون با خیال راحت تست های مورد نظرتون رو اجرا کنید درست هونطور که در شکل زیر مشاهده می کنید.برای مطالعه بیشتر در خصوص این فریم ورک عالی پیشنهاد می کنم به سایت رسمی مستندات Mockito مراجعه کنید.اجرای تست ها به صورت دستیدر صورتی که از ابزار maven در پروژه هاتون استفاده میکنید کافیه دستور mvn test رو در ترمینال اجرا کنید .در صورتیکه از ابزار Intelij IDEA استفاده میکنید هم میتوانید مثل تصویر زیر عمل کنین.نتیجه گیری یه برنامه نویس خوب همیشه سعی می کنه برای برنامه هاش تست بنویسه.شاد باشین دوستان و همیشه تو حوزه برنامه نویسی با زبان های شی گرا رو کمک حامد سهامی دوستدار شما عزیزان در واتس آپ و لینکدین حساب کنید.</description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Fri, 06 Sep 2019 01:30:29 +0430</pubDate></item><item><title>مقایسه فریم ورک های یکپارچه سازی برنامه های اینترپرایز</title><link>https://virgool.ir/@sahami.hamed/مقایسه-فریم-ورک-های-یکپارچه-سازی-برنامه-های-اینترپرایز-yk9s0phumjbm</link><description>تبادل اطلاعات بین شرکت های دنیا روز به روز در حال افزایش است. در نتیجه تعداد برنامه هاییی که باید با یکدیگر یکپارچه شوند نیز در همچنین حال افزایش است. Interface ها از تکنولوژی ها، پروتکل ها و فرمت های داده ای گوناگونی استفاده می کنند. با این اوصاف، یکپارچه سازی برنامه های کاربردی باید با یک راه و روش استاندارد، موثر ضمن پشتیبانی از آزمون های خودکار مدل شوند.فریم ورک های یکپارچه سازی در محیط JVM در دسترس هستند که هر کدام نیازمندی های این امر را برآورده می کنند:Spring IntegrationMule ESBApache Camelهر یک از این فریم ورک ها الگوهای یکپارچه سازی برنامه های اینترپرایز را پیاده سازی کرده اندو به همین دلیل برای استاندارد سازی و ... به منظور یکپارچه سازی توصیه می شوند.این فریم ورک ها می توانند بروی تمام برنامه های محیط JVM به کار گرفته شوند - مهم  نیست کدام تکنولوژی، پروتکل انتقال یا قالب و فرمت داده ای استفاده شود. تمام پروژه های یکپارچه سازی می توانند در یک روش و راه مستحکم تولید شوند.در این مقاله قصد دارم بر اساس بخشی از مطالعات و نظرات فردی ام به مقایسه این فریم ورک ها بپردازم که بر اساس شاخص های زیر به عنوان نمونه شما هم می توانید مقایسه و نظر شخصی خود را داشته باشید.Open sourceBasic concepts / architectureTest abilityDeploymentPopularityCommercial supportIDE-SupportError handlingMonitoringEnterprise readinessDomain specific language (DSL)Number of components for interfaces, technologies and protocolsExpand abilityتفاوت هااگر شما می دانید یکی از این فریم ورک ها را بشناسید، شما می توانید سایر این دسته از فریم ورک ها را به آسانی فرا بگیرید چراکه در تمام آنها مفاهیم و ویژگی های مشترک زیادی وجود دارد. تفاوت این فریم ورک ها در تعداد ابزارهای قابل پشتیبانی و DSL مورد استفاده شان است.  به همین دلیل تمرکز ما به طور ویژه بروی همین دو شاخص در امر مقایسه فریم ورک ها خواهد بود.لطفا به کد ها و پیاده سازی های زیر در هر یک از این فریم ورک ها دقت کنید.Spring Integrationدر این فریم ورک یکپارچه سازی با استفاده از کد های فراوان XML انجام میشود و ابزار های ساده ای را مانند موارد زیر پشتیبانی میکند.File, FTP, JMS, TCP, HTTP or Web Servicesقطعه کد زیر یک مثال حد اقلی برای یکپارچه سازی با استفاده از این فریم ورک است. البته شما میتوانید برای بعضی از ابزارهای اشاره شده از annotaion ها نیز استفاده کنید اما در آخر به فایل XML اختصاصی این فریم ورک نیاز داریم. البته به نظر من بهتر بود از یک DSL برای این کار استفاده میشد. من در مورد این فریم ورک می توانم بگویم که برای پروژه های موجود از جنس SPRING با ابزارهای ساده اشاره شده بهتر است استفاده کنید. هر چند خودم از طرفداران متعصب مجموعه Springهستم.:( Mule ESBهمانطور که مشخص است می توانید از این فریم ورک برای یک ESB تمام عیار استفاده کنید، اما با این وجود می توانید از این فریم ورک به شکل سبک و ساده نیز همچنان استفاده نمایید. با اینکه این فریم ورک هم مانند Spring Integration  از XML برای این یکپارچه سازی استفاده می کند اما به نظر من خوانایی بیشتری را به نسبت آن دارد. ابزار Mule Studio نیز کار را برای انجام یکپارچه سازی نیز بسیار راحت کرده است. البته لازم بذکر است که این فریم ورک connector های اختصاصی برای اینترفیس های زیر ارائه کرده است.SAPTibco RendevousOracle Siebel CRMPaypalIBM’s CICS Transaction Gatewayراستی برای تکمیل اطلاعات پیشنهاد میکنم در خصوص این فریم ورک به سایت زیر هم سر بزنید.http://blogs.mulesoft.org/osgi-no-thanks/Apache Camelاین فریم ورک که توسط غول بزرگ فریم ورک ها یعنی Apacheطراحی و تولید شده از فریم ورک Mule  شناخته شده تر است و شرکت های بیشتر در مورد مسیله یکپارچه سازی به سراغ آن میروند. به طور قطع برای هر ابزاری که فکرشو کنید می توانید از این فریم ورک برای مسیله جاری استفاده کنیم. اگر ابزار یا کامپوننت مورد نظر خودتون رو در این فریم ورک پیدا نکردید می تونید به سادگی خودتون اون رو ایجاد کنید.&#39;خوانایی قابل قبول، ابزار بصری طراحی سناریوهای لازم که توسط FuseSource برای تولید XML مورد نیاز طرح یکپارچه سازی به کار میرود همگی از نقاط قدرت این فریم ورک هستند. اما جالب انگیز ترین مطلب در خصوص مقایسه این فریم ورک بیان این نکته است که شما میتوانید از JAVA, Groovy, Scala نیز به جای XMLاستفاده کنید.نتیجه گیری لازم نیست برنده این مقایسه معلومهشاد باشین دوستان عزیزم و برای پیدا کردن سوالات برنامه نویسی و چند تا حوزه دیگه رو کمک من در کانال واتس آپ بنده حساب کنید.;)https://chat.whatsapp.com/DmERbiw3rVU42I9uELlMgRدوستدار شما عزیزان حامد سهامی</description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Tue, 03 Sep 2019 00:13:12 +0430</pubDate></item><item><title>BDD یا توسعه رفتار محور</title><link>https://virgool.ir/@sahami.hamed/bdd-یا-توسعه-رفتار-محور-cagvpoqbitkw</link><description>یکی از روش های توسعه نرم افزار ها به صورت چابک را میتوان توسعه رفتار محو یا BDD معرفی کرد که بر اصل تعامل تیم توسعه و تیم کسب و کار تاکید دارد. این رویکرد در سال 2003 توسط دن نورس &#34;Dan North&#34; در ارتباط با TDD  تدوین و در سال 2009 با عنوان توسعه رفتار محور در لندن تکمیل شد. در ادامه بخشی از صحبت ایشان در سال 2009 به صورت نقل قول آورده شده است. “BDD is a second-generation, outside-in, pull-based, multiple-stakeholder, multiple-scale, high-automation, agile methodology. It describes a cycle of interactions with well-defined outputs, resulting in the delivery of working, tested software that matters.”این رویکرد با هدف فعال سازی دو تیم توسعه و کسب و کار با هدف دستیابی سریعتر به اهداف پروژه پدید آمده است. در توسعه رفتار محور، تاکید بر شفاف سازی رفتارهای نرم افزار برای فهم درست توسط مهندسین و کارشناسان منتسب به پروژه یا نرم افزار شده است. تفاوت توسعه آزمون محور و توسعه رفتار محوربسیاری از افراد فکر می کنند که هر دو رویکرد اشاره شده در این بخش با یکدیگر یکسان هستند، در صورتیکه در توسعه ی آ زمون محور  اساسا از unit test های آماده برای تعیین چگونگی طراحی نرم افزار تلاش میکنیم. توسعه رفتار محور میتواند یک best practice برای نوشتن بهترین آزمون ها باشد. بزرگترین تفاوت توسعه رفتار محور در نوشتن آزمون به زبان طبیعی به طوریکه افراد غیر برنامه نویس بتوانند آنها را بخوانند است. به جای توسعه توابع و عملیات، با استفاده از جملات شما خواهید گفت که کد و برنامه شما چه کاری را دقیقا انجام خواهند داد . شما درک بهتر و شفاف تری را از کاری که سیستم میخواهد انجام دهد، بدست خواهید آورد . توسعه رفتار محور برای بوجود آوردن همکاری مشتری و توسعه دهنده در تحلیل نیازمندی ها است. اگرچه این رویکرد برای بوجود آوردن تعامل کامل بین تمام افراد حاضر در توسعه نرم افزار است. به جای اینکه آزمون ها یا test هایی را تنها برای توسعه دهنده گان آماده کنیم، شما آزمون هایی را خواهید داشت که به تمام افراد بتوانند کمک کنند. توسعه رفتار محور طراحی نرم افزار به شکل جالبی تحت تاثیر قرار می دهد، در صورتی که توسعه آزمون محور به آزمایش کد های نوشته شده توجه دارد. در نتیجه می توان گفت رویکرد توسعه ی رفتار محور به جنبه ی رفتاری سیستم اشاره دارد و توسعه ی آزمون محور به پیاده سازی سیستم توجه دارد.مزایای توسعه ی رفتار محوربه طر خلاصه می توان به چند مورد زیر به عنوان مزایای توسعه ی رفتار محور اشاره نمود.همکاری و تعامل بیشترشفافیت بیشترطراحی نرم افزار با پیروی از ارزش های کسب و کاراستفاده از زبان عمومیتامین نیاز های کاربر به شکل موثراطمینان بیشتر از سمت توسعه دهندگان با درک شفاف ترهزینه کمتردوستان عزیز برای درک چگونگی استفاده از فریم ورک مطرح در توسعه رفتار محورِ Cucumber از لینک زیر در سایت DZONE استفاده کنید.https://dzone.com/articles/bdd-cucumber-in-actionدوستان علاقه مند به برنامه نویسی می توانند با متصل شدن به پروفایل لینکدین بنده در ادامه راه برای کسب اطلاعات بیشتر از دنیای برنامه نویسی حرفه ای با بنده همراه باشند.https://www.linkedin.com/in/hamed-sahami-34861153/</description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Sun, 01 Sep 2019 21:11:13 +0430</pubDate></item><item><title>Spring Boot,Redis ,Docker</title><link>https://virgool.ir/@sahami.hamed/spring-bootredis-docker-uua9bf6qzglt</link><description>سلام دوستان عزیزاین مقاله کوتاه راهنمای شما برای یکپارچه سازی پروژه اسپرینگ با Redis بر پایه داکر خواهد بود. خیلی وقتها برای تیم های توسعه این نیاز بوجود میاد که بخاطر استفاده از معماری امروزیه میکرو سرویس برای بالا بردن سرعت بارگزاری نسخه های برنامه ها یا پروژه هاشون از داکر بخوان استفاده کنند.این کار عموما همونطور که گفتم برای تسریع فرایند Deployment انجام میشود.اول از همه باید Docker Desktop  رو نصب کنید و بعد از اون image مربوط به Redis رو باید از سایت داکر هاب بگیرین یا اینکه با دستور ساده docker pull redis در محیط Command Prompt اون رو دریافت کنید.حالا برای بالا آوردن Redis کافیه دستور زیر رو بعد از نصب Docker Desktop اجرا کنید تا Redis براتون بالا بیاد.docker run -p 6379:6379 redisحالا میتونید با Redis  که داخل محیط داکر بالا اومده تو برنامه ای که سورس اون رو از طریق لینک زیر از طریق ریپوزیتوری github دریفات کنید و با حداقل پیکربندی ازش استفاده کنید.خوبی این پروژه که از داخل گیت هاب پیدا کردم اینه که زیرو کانفیگ هستش و خیلی جلو میافتین.https://github.com/springframeworkguru/spring-boot-redis-exampleدوستان نکته کوچکی که در این پروژه خواهید دید استفاده از Annotation کاربردیه @RedisHash(&#34;Name&#34;,TimetoLive=10L)خواهد بود . این خصوصیت باعث میشود که موجودیت مارک شده درون Redis معرفی شده به پروژه که به صورت پیش فرض ماشین محلی و درگاه 6379 است، ذخیره شود. خصوصیت درون پرانتز زمان انقضاء موجودیت درون Redis را مشخص کند.دوستان عزیزم هر مشکل یا سوالی داشتین خوشحال میشم کمکتون بکنم.https://www.linkedin.com/in/hamed-sahami-34861153/شاد باشین</description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Tue, 13 Aug 2019 11:05:29 +0430</pubDate></item><item><title>یادگیری ماشین و تشخیص چهره</title><link>https://virgool.ir/@sahami.hamed/یادگیری-ماشین-و-تشخیص-چهره-s6xlrik7odm0</link><description>در نمونه کد زیر با استفاده از زبان پایتون و یادگیری ماشین کار تشخیص چهره پیاده سازی شده. می تونید اول مدل خودتون را با عکس های اشخاص آموزش بدین و بعد عکس های انفرادی جدید رو بهشون بدین تا براتون شناسایی کنه .دوستان برای یادگیری مطالب بیشتر به سایت ما  http://sciencehome.net  سر بزنید یا با خودم در شبکه های اجتماعی و حرفه ای در ارتباط باشین.</description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Mon, 01 Jul 2019 13:23:21 +0430</pubDate></item><item><title>مرور کتابخانه های یادگیری ماشین در پایتون</title><link>https://virgool.ir/@sahami.hamed/مرور-کتابخانه-های-یادگیری-ماشین-در-پایتون-vrhp1g4lgtbu</link><description> scikit-learnیک پروژه سورس باز است. این پروژه به طور مداوم در حال توسعه و ارتقاء است و در کامیونیتی خود از افراد زیادی بهره مند می باشد. این پروژه شامل تعداد زیادی از الگوریتم های یادگیری ماشین است، هر یک از این الگوریتم ها ابزار بسیار محبوبی در نزد متخصصین هستند و از این پروژه در قالب یک کتابخانه ی پایتون به طور ثابت تقریبا در پروژه های یادگیری ماشین به کار می آیند. این کتابخانه به طور گسترده ای در صنعت و دانشگاه ها و مراکز تحقیقاتی به کار گرفته میشود که البته لازم بذکر است که کدهای آماده و مستندات فراوانی از کارهای ممکن با این کتابخانه در سطح اینترنت منتشر شده است. این کتابخانه به خوبی با سایر ابزار های کار با اعداد در پایتون قابل استفاده است که من در آینده به بیان و معرفی آنها خواهم پرداخت . پس از مطالعه خلاصه معرفی این پروژه به شما دوستان عزیز توصیه میکنم به راهنمای این کتابخانه مراجعه کرده و آن را دقیقا مطالعه نمایید تا از جزئیات هر الگوریتم به طور جداگانه آگاه شوید.NumPyنام پای یکی از پکیج های پایه و اساسی در محاسبات علوم داده از پایتون است. این پکیج شامل امکانات مناسبی برای آرایه های چند بعدی ، توابع محاسباتی سطح بالا از قبیل عملیات جبر خطی و مبدل ها و تولید کننده اعداد تصادفی است. آرایه های این کتابخانه به عنوان ساختمان داده های پایه الگوریتم های کتابخانه sklearn هستند. این کتابخانه داده ها را از ارایه های نام پای دریافت میکند . هر داده ای که شما استفاده می کنید به آرایه از نام پای تبدیل میشود. هسته عملیاتی نام پای کلاس ndarry است که یک آرایه چند بعدی می باشد. تمام المان های آرایه باید از یک نوع داده ای باشند.SciPyیک مجموعه از توابع محاسباتی علوم داده در پایتون است. این مجموعه فراهم کننده ی، توابع گسترده ی دیگر، مانند جبر خطی پیشرفته، توابع ارتقاء محاسبتی، پردازش سیگنال، توابع محاسباتی ویژه و آماری توزیع شده است.matplotlibیکی از کتابخانه های اصلی پایتون در حوزه علوم داده است. این کتابخانه توابعی را برای انتشار و ارائه امکانات بصری از قبیل نمودار های خطی، هیستوگرام، پلات های ویژه و بسیاری از نمودارها و امکانات دیگر است. امکان استفاده از این امکانات در داخل نوت بوک جوپیتروجود دارد، شما می توانید اشکال مختلف مبتنی بر مجموعه داده های خود به صورت مستقیم در داخل مرورگر با شکل ویژه ای، وجود دارد. ما این کتابخانه را به شما توصیه میکنیم تا محیطی تعاملی ایجاد کنیم.pandasپاندا یکی از کتابخانه های پایتون برای تحلیل و کار با داده است. این کتابخانه برای ساخت دیتا فریم های کاربردی در مجموعه دستورات کار با داده نیز به کار گرفته میشود. در بیان ساده فکر کنید دیتا فریم یک جدول است مانند یک صفحه گسترده اکسل است. پاندا متد های فراوانی برای ویرایش و عملیات بروی این اطلاعات در قالب جدول است. به طور مشخص می توان مانند دستورات SQL این جداول را به هم متصل نمود و یا بروی آنها درستورات یا کوئری هایی را اجرا نمود. حتی پاندا می تواند آرایه های مورد نیاز Numpy را به سادگی به ازای ستون های مورد نظر شما تولید کند. ارزشمندی دیگر این کتابخانه توانایی فراخوانی و وارد کردن اطلاعات از انواع فایل ها و منابع اطلاعاتی را دارد.دوستدار شما عزیزان حامد سهامی</description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Wed, 12 Jun 2019 16:49:25 +0430</pubDate></item><item><title>خبر خوب</title><link>https://virgool.ir/@sahami.hamed/خبر-خوب-kiuvziwyxnpg</link><description> سلام دوستان عزیزمامروز تصمیم گرفتم به ارائه یکی از کتاب های خوب برای یادگیری ماشین در فضای مجازیخبر خوب تر ترجمه این کتاب رو هم در چند ماه اینده می خوام به همه دوستان علاقه مندم به این حوزه تقدیم کنم Python Machine LearningSebastian Raschka </description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Tue, 04 Jun 2019 18:24:19 +0430</pubDate></item><item><title>فاز های عمومی یادگیری ماشین</title><link>https://virgool.ir/@sahami.hamed/فاز-های-عمومی-یادگیری-ماشین-otjwdghjnimb</link><description> MLlib در حقیقت API های استانداردی هشتند که برای الگوریتم های یادگیری ماشین برای ساده تر شدن فرایند ترکیب چند الگوریتم با یکدیگر در مرحله های کاری از یک جریان کاری متداول در پروژه های هستند.Dataframe: این ای پی آی یادگیری ماشین از اسپارک اس کیو ال به عنوان یه مجموعه داده یادگیری ماشین استفاده میشود که می تواند انواع داده ای گوناگونی را شامل شود. یک دیتا فریم میتواند ستون هایی را از متون ذخیره شده، وکتور های ویژگی ها، برچسب ها و پیش بین ها شامل شود.Transformer الگوریتمی است که می تواند یک دیتا فریم را به دیتا فریم دیگری تبدیل کند. یک مدل یادگیری ماشین ترنسفورمر است که دیتا فریم را همراه ویژگی هایش به دیتا فریم دیگری که شامل پیش بینی ها میشود تبدیل میکند.Estimator: یک الگوریتم که میتواند بروی دیتا فریم ها برای fit کردن برای تولید یک ترنسفورمر به کار گرفته شوند. یک الگوریتم یادگیری که در ارزیاب ها آموزش دیتا فریم ها را برای مدل ها انجام میدهند.Pipeline: زنجیره ای از چند ترنسفرمر و ارزیاب که با یکدیگر چرخه ای از یادگیری ماشین را می سازند.</description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Mon, 03 Jun 2019 10:06:37 +0430</pubDate></item><item><title>مفاهیم پرکاربرد داده کاوی و یادگیری ماشین – بخش اول</title><link>https://virgool.ir/@sahami.hamed/مفاهیم-پرکاربرد-داده-کاوی-و-یادگیری-ماشین-بخش-اول-jqq9n8b1n3xh</link><description> SVM ماشین بردار پشتیبانییکی از روشهای نسبتاً نوین در سالهای اخیر که کارایی خوبی را به نسبت سایر روشها در طبقه بندی دارد. مبنای کار این روش دسته بندی خطی دادهها است و در تقسیم خطی دادهها تلاش میشود خطی انتخاب شود که جاشیه اطمینان بیشتری داشته باشد. پیش از تقسیم خطی برای اینکه ماشین بتواند دادهها با پیچیدگی بالا را دسته بندی کند دادهها را به بواسطه یک تابع به فضای دیگر منتقل میکنند. از این الگوریتم در مواقعی که نیاز به تشحیص اکو یا دسته بندی اشیا در کلاسهای خاص باشد میتوان استفاده کرد.K-meansیک الگوریتم خوشه بندی مبتنی بر فاصله است که دادهها را به تعدادی از پیش تعیین شده از خوشه ها پارتیشن بندی می نماید. هر خوشه دارای یک مرکز (مرکز ثقل) است.فاکتور بندی ماتریس غیر منفی (NMF)NMF صفات جدید را با استفاده از ترکیبات خطی از صفات اصلی تولید مینماید. ضرایب ترکیبات خطی، غیر منفی است. در طی اعمال مدل ،یک مدل NMF، داده های اصلی را به مجموعه ای جدید از ویژگیهای کشف شده توسط مدل نگاشت میکند. به عنوان مثال، با توجه به اطلاعات دموگرافیک در مورد مجموعه ای از مشتریان، صفات را برای ویژگیهای کلی مشتریان گروه بندی نماییدمدلهای خطی تعمیم یافته یا Generalized Linear ModelsGLM، رگرسیون لجستیک را برای طبقه بندی اهداف باینری و رگرسیون خطی برایاهداف مستمر پیاده سازی میکند. طبقه بندی GLM از مرزهای اعتماد برای احتمالات پیش بینی پشتیبانی میکند. رگرسیون GLM از مرزهای اعتماد برای پیش بینی پشتیبانی میکندحداقل شرح طول یا MDLMDL یک اصل انتخاب مدل نظری اطلاعات است .MDL فرض میکند که سادهترین، فشردهترین ارائه از اطلاعات، بهترین و محتملترین توضیح برای داده هاستدرختهای تصمیم گیریدرختهای تصمیم گیری، اطلاعات پیش بینی کننده را در قالب قوانین انسانی قابل درک استخراج مینمایند. این قوانین، به صورت عبارات اگر- آنگاه- درغیراینصورت میشوند؛ آنها تصمیماتی را توضیح میدهند که منجر به پیش بینی میشودBaggingدر اصل برای ارزیابی میزان دقت تخمینهای تقریبی بکار گرفته شده در تکنیکهای داده کاوی از Bagging استفاده میشود. در این تکنیک به صورت مفروض است که داده آموزش مانند بسیاری از تکنیک نمونه یا نمایندهای از جامعه داده است تا روشهای گوناگون تحقق دادهها در یک جامعه داده شناسایی شود. این تکنیک دارای روش اختصاصی و مناسبی برای کار با دادههای حجیم است. مجموعه دادهها میتوانند با کمک این تکنیک به مجموعههای کوچکتری تقسیم شوند تا توسط دسته بندی کنندههای مختلف به کار گرفته شود. این زیر مجموعههای دادهای در دو بخش تصادفی و متوالی نیز بر مبنای میزان اهمیت آنها تولید میشوند. نمونه دادههایی در این تکنیک اهمیت پیدا میکنند که باعث تنوع در مجموعه دادهها شود .دادههای سخت نیز نوع دیگری از قدرت تشخیص قابل بحث در این تکنیک است. این امر نیز برای شناسایی دادههای آسان برای حذف از مجموعه دادهها کاربرد دارد. AdaBoostروشی برای به کار گرفتن چند روش حل مسئله یادگیری و تجمیع آنها بر اساس خروجیهای همهی آنها است. این روش را میتوان معروفترین الگوریتم خانواده کلاسه کننده معرفی کرد که از جزو ده الگوریتم برتر داده کاوی محسوب میشود. این روش مانند ماشین بردار حاشیهها را افزایش میدهد. از این روش برای آموزش دسته بندی کنندهها استفاده میشود اما بعد از آموزش دسته بندی کنندهها برای شناخت دادههای سخت به کار گرفته میشود تا دسته بندی به شکل صحیح انجام شود. در ابتدای کار تمام سطرهای اطلاعاتی وزن یکسان دریافت میکنند که بر خلاف Bagging این کار صورت میگیرد. در نهایت کار این روش و تکنیک یک نمونه داده جدید با وزن پیشنهادی و برچسب کلاس بر اساس نظر اکثریتی انتخاب میشود.در بیان فنی میتوان گفت که این روش از ترکیب سه یاد گیرنده ضعیف یک یادگیرنده قوی را عرضه میکند Rotation Forestاین روش حل مسئله یا الگوریتم در سال 2006 به عنوان یک طبقه بندی کننده ترکیبی معرفی شده است و نظریه اصلی آن بهبود در تنوع و دقت به صورت همزمان بوده است. الگوریتم Boosting به دلیل اینکه بر نمونه دادههای سخت تمرکز میکند اصولاً از دقت بالایی برخوردار نیست و بر خلاف آن Bagging هم علی رغم داشتن دقت خوب تنوع خوبی در طبقههای پایه ندارد. این روش حل مسئله تنوع فراوانی از Bagging و دقت بالایی از Boosting و حتی Random Forest یا جنگل تصادفی دارد .این الگوریتم در ساخت دادههای آموزشی متفاوت برای هر طبقه بندی کننده ،ویژگیها را به چند بخش تقسیم میکند. پس از تحلیل مؤلفههای اساسی و نگهداری تمام مؤلفهها در ماتریس rotation برداری از ویژگیهای جدید ایجاد میکند تا دادههای آموزشی با استفاده از آن ماتریس در فضای جدیدی نگاشته شوند Decorateیک یادگیرنده فراگیر برای ساخت مجموعه های متنوع طبقه بندیها با استفاده از نمونه های آموزش مصنوعی است .آزمایش های جامع نشان میدهد که این روش به طور مداوم دقیق تر از طبقه بندی پایه، Bagging و جنگلهای تصادفی است .این روش همچنین دقت بیشتری نسبت به ارتقاء در مجموعه های آموزشی کوچک کسب میکند و عملکرد قابل مقایسهای را در مجموعه های آموزشی بزرگ به دست آورده است . این روش با هر تکرار یک طبقه بندی جدید را ایجاد میکند. در تکرار اول طبقه بندی پایه و بعد هر طبقه بندی با استفاده از داده های آموزش مصنوعی ساخته میشود و نتیجه آن طبقه بندیهایی خواهد بود که به عنوان تنوع داده ها شناخته میشود. Random Subspaceاز طبقه بندیهای چندگانهای که بر روی زیرمجموعههای تصادفی انتخاب شده و با آنها ترکیب شده تا در نهایت آنها را با یک روش رأی اکثریت رأی گیری به یک تصمیم نهایی تبدیل کند. هر کدام از طبقه بندیها تنها از یک زیر مجموعهی تمام ویژگیهای موجود که در دسترس است استفاده می کندکه در مجموعه دادههای آموزش و آزمایش قرار دارد. این ویژگیها در هر زیر مجموعه نیز به تصادفی انتخاب میشوند. بر اساس مطالعات تجربی نیز تعداد استاندارد ویژگیهای مورد استفاده برای بدست آوردن نتایج خوب، نصف تعداد کل ویژگیها است  .Logestic Regresionیک مدل آماری از رگرسیون است که برای متغیرهای وابسته با ویژگی دو سویه بودن معنا میشود. این مدل یک مدل خطی تعمیم یافته است که از تابع logitبرای پیوند آنها استفاده میکند و خطای آن از توزیع چند جملهای پیروی میکند. کاربرد این روش در ابتدا در حوزه پزشکی بوده است و برای احتمال وقوع بیماری استفاده میشده است. اما امروزه در تمام زمینههای علمی کاربرد فراوانی پیدا کرده است. این مدل آماری بر اساس فرضیه های کاملاً متفاوتی از رگرسیون خطی بوجود آمده است و تفاوت آن با مدل خطی نیز در دو ویژگی توزیع شرطی و مقادیر پیش بینی احتمالی است.“دوستان عزیزم حتما در آینده توضیحات بیشتری خدمتتون تقدیم میکنم و حتی به شرح و بیان کاربرد های هر کدوم از مفاهیم مقاله با ذکر نمونه کد می پردازم. “دوستان عزیزم تو سایتم منتظرتون هستم و تو کار هاتون تو حوزه های مرتبط رو کمکم حتما حساب کنید.به امید پیشرو بودن شما دوستان عزیزم در حوزه های مختلف ;) http://sciencehome.net/2019/06/02/%D9%85%D9%81%D8%A7%D9%87%DB%8C%D9%85-%D9%BE%D8%B1%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF-%D8%AF%D8%A7%D8%AF%D9%87-%DA%A9%D8%A7%D9%88%DB%8C-%D9%88-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D9%85%D8%A7/ </description><category>hamed sahami</category><author>hamed sahami</author><pubDate>Mon, 03 Jun 2019 10:03:28 +0430</pubDate></item></channel></rss>