چرا Update در SQL Server سریعتر از Delete + Insert است؟
مدتی پیش در پروژهی "بهای تمام شده" و "ریال انبار"، با چالشی روبرو شدم که باعث شد دوباره به اصول پایهای عملکرد دیتابیس فکر کنم.
ما برای محاسبه مجدد ریالی انبار، نیاز داشتیم حجم زیادی از دادهها را بازنویسی کنیم. دو راه پیش رو داشتیم:
1. ردیفهای قدیمی را
2. یا ردیفهای موجود را با مقادیر جدید
در نگاه اول شاید فکر کنید این دو عملیات از نظر منطقی یکی هستند؛ اما در عمل، وقتی از روش Delete + Insert استفاده میکردیم، سرعت فرآیند بسیار پایین بود و سیستم تحت فشار قرار میگرفت. اما به محض اینکه استراتژی را به
اگر فکر میکنید
هزینهی ایندکسها (The Index Trap):
در روش حذف و درج، شما مجبورید تمام ایندکسهای جدول را برای حذف "پاکسازی" و برای درج مجدد "بازسازی" کنید. اما در
پایداری در صفحات داده (Data Pages):
عملیات حذف و درج مجدد، باعث ایجاد Fragmentation در صفحات داده میشود و احتمال
مدیریت تراکنش (Logging):
مدیریت یک عملیات واحد، همیشه بهینهتر از مدیریت دو عملیات مجزای سنگین در Transaction Log است.
@DevTwitter | <seied Mojtaba sajadi/>
مدتی پیش در پروژهی "بهای تمام شده" و "ریال انبار"، با چالشی روبرو شدم که باعث شد دوباره به اصول پایهای عملکرد دیتابیس فکر کنم.
ما برای محاسبه مجدد ریالی انبار، نیاز داشتیم حجم زیادی از دادهها را بازنویسی کنیم. دو راه پیش رو داشتیم:
1. ردیفهای قدیمی را
DELETE کنیم و ردیفهای جدید را INSERT کنیم.2. یا ردیفهای موجود را با مقادیر جدید
UPDATE کنیم.در نگاه اول شاید فکر کنید این دو عملیات از نظر منطقی یکی هستند؛ اما در عمل، وقتی از روش Delete + Insert استفاده میکردیم، سرعت فرآیند بسیار پایین بود و سیستم تحت فشار قرار میگرفت. اما به محض اینکه استراتژی را به
UPDATE تغییر دادم، شاهد بهبود چشمگیر سرعت بودیم.اگر فکر میکنید
UPDATE هم همان DELETE + INSERT است، باید به ساختار زیرین نگاه کنید:هزینهی ایندکسها (The Index Trap):
در روش حذف و درج، شما مجبورید تمام ایندکسهای جدول را برای حذف "پاکسازی" و برای درج مجدد "بازسازی" کنید. اما در
UPDATE (اگر ستونهای ایندکسشده تغییر نکنند)، SQL Server اصلاً درگیر ساختار ایندکسها نمیشود و فقط مقدار را در همان بلوک داده تغییر میدهد.پایداری در صفحات داده (Data Pages):
عملیات حذف و درج مجدد، باعث ایجاد Fragmentation در صفحات داده میشود و احتمال
Page Split را بالا میبرد. در حالی که UPDATE سعی میکند عملیات را In-place و در همان مکان قبلی انجام دهد.مدیریت تراکنش (Logging):
مدیریت یک عملیات واحد، همیشه بهینهتر از مدیریت دو عملیات مجزای سنگین در Transaction Log است.
@DevTwitter | <seied Mojtaba sajadi/>
👍10🍌8❤7
پروژه dbBackup_manager؛ ابزاری برای بکاپ و بازیابی دیتابیس PostgreSQL
بهتازگی اولین نسخه از پروژهی dbBackup_manager رو منتشر کردم؛ یک ابزار با رابط کاربری تحت وب برای تهیهی بکاپ و بازیابی دیتابیسهای PostgreSQL بهصورت محلی.
امکانات فعلی:
تهیهی بکاپ از دیتابیسهای PostgreSQL
بازیابی دیتابیس از بکاپهای موجود
رابط کاربری تحت وب
ذخیرهسازی محلی اطلاعات برنامه و فایلهای بکاپ
تکنولوژیها: Java 21، Spring Boot و React
سورس کد و دانلود نسخهی انتشار
https://github.com/arshiachillguy/dbBackup-manager
@DevTwitter | <Arshia/>
بهتازگی اولین نسخه از پروژهی dbBackup_manager رو منتشر کردم؛ یک ابزار با رابط کاربری تحت وب برای تهیهی بکاپ و بازیابی دیتابیسهای PostgreSQL بهصورت محلی.
امکانات فعلی:
تهیهی بکاپ از دیتابیسهای PostgreSQL
بازیابی دیتابیس از بکاپهای موجود
رابط کاربری تحت وب
ذخیرهسازی محلی اطلاعات برنامه و فایلهای بکاپ
تکنولوژیها: Java 21، Spring Boot و React
سورس کد و دانلود نسخهی انتشار
https://github.com/arshiachillguy/dbBackup-manager
@DevTwitter | <Arshia/>
👍5🍌3❤1
داشتم منابع مصاحبه مهندسی داده رو بررسی میکردم، گفتم چرا همه مطالبی که پیدا میکنم رو یکجا جمع نکنم. این شد یه سایت ساده که ۱۹۴ درس داره و ۲۸۰۰ سوال واقعی مصاحبه رو یکجا جمع کرده. محتوا دو زبانه (فارسی و انگلیسی) هست.
اوپنسورس منتشرش کردم. اگه دوست داشتید میتونید استار بدید یا مشارکت کنید.
https://github.com/mohammadmaso/dataeng-interview
به نظر خودم مسیر مطالعاتی خوبی شد، هم برای آماده شدن برای مصاحبه و هم برای یادگیری کلی مهندسی داده.
@DevTwitter | <Mohammad Masoudi/>
اوپنسورس منتشرش کردم. اگه دوست داشتید میتونید استار بدید یا مشارکت کنید.
https://github.com/mohammadmaso/dataeng-interview
به نظر خودم مسیر مطالعاتی خوبی شد، هم برای آماده شدن برای مصاحبه و هم برای یادگیری کلی مهندسی داده.
@DevTwitter | <Mohammad Masoudi/>
❤37🔥7👍3
Forwarded from DevTwitter Ads.
اولین پروژهای که ترافیک واقعی گرفت، یه چیزی فهمیدم:
فرق بین کدی که کار میکنه و کدی که scale میشه، زمین تا آسمونه.
اینجا از این فرقها زیاد حرف میزنیم.
https://t.me/+HgGHhDZPg9tlNTU0
فرق بین کدی که کار میکنه و کدی که scale میشه، زمین تا آسمونه.
اینجا از این فرقها زیاد حرف میزنیم.
https://t.me/+HgGHhDZPg9tlNTU0
🍌119👎10👍5
حالا یک جایگزین رایگان و متنباز برای CapCut وجود دارد. بدون واترمارک، بدون نیاز به حساب کاربری و بدون اشتراک.
ویرایشگر ویدیوی Concat برای ویندوز، macOS، لینوکس و اندروید است و بیشتر کارهایی را پوشش میدهد که مردم معمولاً برای آنها سراغ CapCut میروند:
- زیرنویس خودکار، که روی کامپیوتر خودتان تولید میشود
- تبدیل متن به گفتار، بهعلاوه کلون کردن صدا با چند ثانیه صدای نمونه
- حذف پسزمینه برای افراد و اشیا
- انیمیشن keyframe با ویرایشگر منحنی (curve editor)
- بیش از ۱۷۰ افکت، فیلتر، ترنزیشن و انیمیشن متن
- ویرایش چندترکی و خروجی 4K
همهچیز بهصورت محلی اجرا میشود. مدلهای هوش مصنوعی برای زیرنویس، صداها و برش پسزمینه یکبار دانلود میشوند و بعد آفلاین کار میکنند. فوتیجهای شما هرگز از سیستم شما خارج نمیشوند.
این نرمافزار در مرحله بتا است، پس انتظار چند نقص و ناهماهنگی را داشته باشید.
لینک پروژه: github.com/jub0t/concat
@DevTwitter | <Yarad/>
ویرایشگر ویدیوی Concat برای ویندوز، macOS، لینوکس و اندروید است و بیشتر کارهایی را پوشش میدهد که مردم معمولاً برای آنها سراغ CapCut میروند:
- زیرنویس خودکار، که روی کامپیوتر خودتان تولید میشود
- تبدیل متن به گفتار، بهعلاوه کلون کردن صدا با چند ثانیه صدای نمونه
- حذف پسزمینه برای افراد و اشیا
- انیمیشن keyframe با ویرایشگر منحنی (curve editor)
- بیش از ۱۷۰ افکت، فیلتر، ترنزیشن و انیمیشن متن
- ویرایش چندترکی و خروجی 4K
همهچیز بهصورت محلی اجرا میشود. مدلهای هوش مصنوعی برای زیرنویس، صداها و برش پسزمینه یکبار دانلود میشوند و بعد آفلاین کار میکنند. فوتیجهای شما هرگز از سیستم شما خارج نمیشوند.
این نرمافزار در مرحله بتا است، پس انتظار چند نقص و ناهماهنگی را داشته باشید.
لینک پروژه: github.com/jub0t/concat
@DevTwitter | <Yarad/>
❤18🍌10👍2
This media is not supported in your browser
VIEW IN TELEGRAM
پونصد میلیون توکن رایگان برای استفاده از مدل های زیر :
DeepSeek V4
Qwen3.8-27B
GLM-5.3
در سایت زیر :
https://discovery.intern-ai.org.cn
@DevTwitter | <Reza/>
DeepSeek V4
Qwen3.8-27B
GLM-5.3
در سایت زیر :
https://discovery.intern-ai.org.cn
@DevTwitter | <Reza/>
🍌20❤9👎2
یک تیم کامل سهبعدی برای Blender متنباز شده؛ از طراحی کانسپت و مدلسازی گرفته تا انیمیشن، نورپردازی، دوربین و صدا، همه در قالب یک پلاگین!
معرفی Scenario Plugin؛ ابزاری که میتونی مستقیم داخل Blender ازش استفاده کنی یا از طریق MCP به Claude Code وصلش کنی.
قابلیتهای این پلاگین:
طراح کانسپت (Concept Artist) ساخت تصاویر کانسپت از روی پرامپت و استخراج تصاویر مرجع از نمای فعلی محیط Blender.
هنرمند سهبعدی (3D Artist) ساخت Mesh از متن یا عکس و تغییر بافت یا بازسازی مش مدل انتخابشده.
انیماتور (Animator) ریگ کردن کاراکتر انتخابشده و تولید حرکت از روی توضیحات متنی.
هنرمند متریال (Surfacing Artist) اعمال متریالهای PBR روی اسلاتهای مختلف و ساخت نقشههای متریال از روی عکس.
طراح صحنه (Layout Artist) ساخت بلوکبندی اولیه صحنه (Greybox) از روی توضیحات و تولید محیطها و آسمانهای ۳۶۰ درجه.
اپراتور دوربین (Camera Operator) تعریف مسیر حرکت دوربین با یک جمله و ایجاد حرکتهایی مثل Orbit، Dolly، Crane و Flyover.
متخصص رندر (Render Artist) تبدیل نمای محیط به تصویر نهایی باکیفیت و تبدیل Playblast به شات نهایی.
طراح صدا (Sound Designer) تولید موسیقی، صداگذاری و افکتهای صوتی و انتقال آنها به Sequencer پروژه.
نکته جذاب اینجاست که میتونی این قابلیتها رو از طریق Claude Code و MCP وارد جریان کاری خودت کنی؛ یعنی بهجای انجام دستی تکتک مراحل، بخشی از فرایند ساخت صحنه و ویدیو رو با دستورهای متنی مدیریت کنی.
البته برای استفاده واقعی، باید قابلیتهای هر بخش، نیازمندیها و محدودیتهای پلاگین رو بررسی کنی.
مخزن GitHub :
https://github.com/scenario-labs/blender-plugin
@DevTwitter | <Yarad/>
معرفی Scenario Plugin؛ ابزاری که میتونی مستقیم داخل Blender ازش استفاده کنی یا از طریق MCP به Claude Code وصلش کنی.
قابلیتهای این پلاگین:
طراح کانسپت (Concept Artist) ساخت تصاویر کانسپت از روی پرامپت و استخراج تصاویر مرجع از نمای فعلی محیط Blender.
هنرمند سهبعدی (3D Artist) ساخت Mesh از متن یا عکس و تغییر بافت یا بازسازی مش مدل انتخابشده.
انیماتور (Animator) ریگ کردن کاراکتر انتخابشده و تولید حرکت از روی توضیحات متنی.
هنرمند متریال (Surfacing Artist) اعمال متریالهای PBR روی اسلاتهای مختلف و ساخت نقشههای متریال از روی عکس.
طراح صحنه (Layout Artist) ساخت بلوکبندی اولیه صحنه (Greybox) از روی توضیحات و تولید محیطها و آسمانهای ۳۶۰ درجه.
اپراتور دوربین (Camera Operator) تعریف مسیر حرکت دوربین با یک جمله و ایجاد حرکتهایی مثل Orbit، Dolly، Crane و Flyover.
متخصص رندر (Render Artist) تبدیل نمای محیط به تصویر نهایی باکیفیت و تبدیل Playblast به شات نهایی.
طراح صدا (Sound Designer) تولید موسیقی، صداگذاری و افکتهای صوتی و انتقال آنها به Sequencer پروژه.
نکته جذاب اینجاست که میتونی این قابلیتها رو از طریق Claude Code و MCP وارد جریان کاری خودت کنی؛ یعنی بهجای انجام دستی تکتک مراحل، بخشی از فرایند ساخت صحنه و ویدیو رو با دستورهای متنی مدیریت کنی.
البته برای استفاده واقعی، باید قابلیتهای هر بخش، نیازمندیها و محدودیتهای پلاگین رو بررسی کنی.
مخزن GitHub :
https://github.com/scenario-labs/blender-plugin
@DevTwitter | <Yarad/>
❤65🔥47👍2
بزرگترین دیتابیس مواد غذایی فیگفیت با ۱۵۰۰۰ ورودی رو به شکل رایگان منتشر کردیم:
https://kaggle.com/datasets/amirparsadd/figfit-food-database
خوشحال میشم ببینم چه چیزایی باهاش میسازید
@DevTwitter | <Amirparsa Baghdadi/>
https://kaggle.com/datasets/amirparsadd/figfit-food-database
خوشحال میشم ببینم چه چیزایی باهاش میسازید
@DevTwitter | <Amirparsa Baghdadi/>
🔥22❤4👍1
داری روی سرور جدیدت با ۵۱۲ هسته Nginx رو کانفیگ میکنی، همهچیز خوبه و خوشحالی که چه سرور خفنی داری
بعد یهو
امروز موقع ریلیز یکی از پروژهها متوجه شدیم که Nginx یه محدودیت کمتر شناختهشده داره:
NGX_MAX_PROCESSES
مستر برای Child Processها حداکثر 1024 تا Slot داره؛ یعنی Nginx نمیتونه بیشتر از این تعداد Process رو همزمان مدیریت کنه.
البته این عدد کاملاً جدا از
ضمن اینکه محدودیتی که اینجا راجع بهش صحبت میکنم از داخل
حالا اگه
موقع Reload هم Nginx اول Workerهای جدید رو بالا میاره و Workerهای قدیمی رو نگه میداره تا Connectionهای موجودشون تموم بشه.
یعنی خیلی راحت میرسی به:
512 old workers + 512 new workers = 1024
حالا اگه فقط چند تا Worker از Reload قبلی هنوز Gracefully خارج نشده باشن، دیگه برای ساختن همه Workerهای جدید Slot کافی وجود نداره
و اینجاست که فاجعه اتفاق میافته:
no more than 1024 processes can be spawned
روی سرورهای خیلی بزرگ، استفاده از
پس بهتره همیشه حواسمون به کانفیگهایی که در حالت
@DevTwitter | <Mohammad Falahat/>
بعد یهو
nginx -s reload میزنی و کل سرویسها از دسترس خارج میشن امروز موقع ریلیز یکی از پروژهها متوجه شدیم که Nginx یه محدودیت کمتر شناختهشده داره:
NGX_MAX_PROCESSES
مستر برای Child Processها حداکثر 1024 تا Slot داره؛ یعنی Nginx نمیتونه بیشتر از این تعداد Process رو همزمان مدیریت کنه.
البته این عدد کاملاً جدا از
worker_connections هست که داخل nginx.conf تعیین میکنیم و مشخص میکنه هر Worker چند Connection میتونه داشته باشه.ضمن اینکه محدودیتی که اینجا راجع بهش صحبت میکنم از داخل
nginx.conf قابل تغییر نیست و توی سورس Nginx تعریف شده.حالا اگه
worker_processes auto داشته باشی، روی ۵۱۲ Core تقریباً ۵۱۲ تا Worker داری.موقع Reload هم Nginx اول Workerهای جدید رو بالا میاره و Workerهای قدیمی رو نگه میداره تا Connectionهای موجودشون تموم بشه.
یعنی خیلی راحت میرسی به:
512 old workers + 512 new workers = 1024
حالا اگه فقط چند تا Worker از Reload قبلی هنوز Gracefully خارج نشده باشن، دیگه برای ساختن همه Workerهای جدید Slot کافی وجود نداره
و اینجاست که فاجعه اتفاق میافته:
no more than 1024 processes can be spawned
روی سرورهای خیلی بزرگ، استفاده از
worker_processes auto همیشه هم بهترین انتخاب نیست.پس بهتره همیشه حواسمون به کانفیگهایی که در حالت
auto میزان مصرف منابعشون رو بر اساس منابع موجود سرور انتخاب میکنن باشه؛ چون چیزی که روی یه سرور معمولی کاملاً منطقیه، روی یه سرور خیلی بزرگ ممکنه ما رو به یه Limit فاجعهبار برسونه @DevTwitter | <Mohammad Falahat/>
❤13👍3🍌3
Forwarded from DevTwitter Ads.
سلام دوستان وقتتون بخیر
امیدوارم سالم و سرحال باشین
این پرسشنامه مربوط به یه کار تحقیقاتی در حوزه پت هست و نهایتاً ۴-۳ دقیقه وقت میبره پر کردنش؛ ممنون میشم اگر پت دارید پر کنین.
در انتها هم اگر شمارهتون رو وارد کنید یه هدیه ناقابلی برای خرید اقلام پت، تقدیمتون میشه 🙏🏻🌱
امیدوارم سالم و سرحال باشین
این پرسشنامه مربوط به یه کار تحقیقاتی در حوزه پت هست و نهایتاً ۴-۳ دقیقه وقت میبره پر کردنش؛ ممنون میشم اگر پت دارید پر کنین.
در انتها هم اگر شمارهتون رو وارد کنید یه هدیه ناقابلی برای خرید اقلام پت، تقدیمتون میشه 🙏🏻🌱
Porsline
پرسشنامه صاحبان پت
با پر کردن این پرسشنامه به ما کمک کنید دغدغههای صاحبان پت در ایران راجع به دامپزشکی و خدمات درمانی رو بهتر درک کنیم.
🍌13👍4👎4
آیا همیشه برای دریافت دادههای ورودی به یک سرویس اختصاصی نیاز داریم ؟ معرفی RudderStack
بهعنوان مهندس داده، یکی از اولین قدمها در ساخت یک خط پردازش داده، دریافت رویدادها از کلاینتهای مختلف و انتقال سریع و قابلاعتماد آنها به زیرساختی مثل Kafka است.
بسیاری از تیمها برای این کار سراغ توسعهٔ یک سرویس اختصاصی با زبانهایی مثل Go میروند؛ اما پیادهسازی و نگهداری SDKها، بافرگذاری، ارسال گروهی، تلاش مجدد و مقیاسپذیری، خودش به پروژهای جداگانه تبدیل میشود.
آیا واقعاً لازم است این بخش را از صفر بسازیم؟
معرفی RudderStack؛ درگاه ورود رویدادها به خطوط پردازش داده
رادراستک (RudderStack) در اصل یک پلتفرم مدیریت دادههای مشتریان (CDP) است که برای جمعآوری، پردازش و انتقال دادههای رفتاری از وبسایتها، اپلیکیشنها و سرویسهای مختلف به کار میرود. بخشی از این پلتفرم بهصورت متنباز ارائه شده است. در این پست، مشخصاً Rudder Server را معرفی میکنیم؛ موتور سمت سرور این پلتفرم که وظیفهٔ پردازش و مسیریابی رویدادها را بر عهده دارد و میتوان از آن بهعنوان لایهٔ ورود رویدادها به خط پردازش داده، برای مثال پیش از Kafka، استفاده کرد.
معماری پیشنهادی به کمک این ابزار، به شکل زیر خواهد بود :
Client SDK → RudderStack → Kafka → Consumers → ClickHouse
در این معماری، RudderStack رویدادها را از کلاینتهای مختلف دریافت میکند و به Kafka تحویل میدهد. سپس مصرفکنندگان Kafka مسئول پردازش و تبدیل دادهها هستند و در نهایت، دادهها میتوانند در ClickHouse ذخیره شوند.
چه قابلیتهایی دارد؟
پشتیبانی از SDKهای متنوع: پشتیبانی از پلتفرمهایی مانند JavaScript، iOS، Android، React Native و Flutter و زبانهایی مثل Python، Go، Java، .NET و Rust.
ارسال کارآمد: بافرگذاری و ارسال گروهی رویدادها برای کاهش سربار ارتباطات شبکه.
اتصال به Kafka: پشتیبانی از ارسال گروهی پیامها، فشردهسازی و قابلیتهای مرتبط با قالب و اعتبارسنجی دادهها.
مقیاسپذیری افقی: امکان اجرای چند نمونه پشت Load Balancer برای افزایش ظرفیت دریافت رویدادها.
(هر چند نسخه رایگان آن تک نود هست اما میتوان با اتخاذ راهکارهایی ، از چند نسخه آن پشت یک Load Balancer استفاده کرد)
میزبانی مستقل: امکان استقرار نسخهٔ متنباز در زیرساخت خودمان.
️ چند نکتهٔ عملیاتی
توان عملیاتی واقعی به سختافزار، اندازهٔ رویدادها و تنظیمات وابسته است؛ بنابراین اعداد بنچمارک را باید در محیط خودمان آزمایش کنیم.
همچنین اگر ترتیب رویدادهای هر کاربر اهمیت دارد، باید مسیریابی، رفتار مصرفکنندگان و کلید پارتیشنبندی Kafka را با دقت طراحی کنیم. اجرای چند نمونه بهتنهایی تضمینکنندهٔ ترتیب رویدادها نیست.
یک نکتهٔ تکمیلی
اگر مسئلهٔ ما دریافت دادههای تلهمتری، مانند لاگ، متریک و تریس است، OpenTelemetryCollector هم راهکار مهمی برای دریافت و انتقال این نوع دادههاست. اما برای رخدادهای محصول و کسبوکار، مانند کلیک کاربران، ثبت سفارش و فعالیت اپلیکیشنها، RudderStack میتواند گزینهای برای لایهٔ ورود رویدادها باشد.
کد منبع: https://github.com/rudderlabs/rudder-server
وبسایت: https://www.rudderstack.com/
@DevTwitter | <Mojtaba Banaie/>
بهعنوان مهندس داده، یکی از اولین قدمها در ساخت یک خط پردازش داده، دریافت رویدادها از کلاینتهای مختلف و انتقال سریع و قابلاعتماد آنها به زیرساختی مثل Kafka است.
بسیاری از تیمها برای این کار سراغ توسعهٔ یک سرویس اختصاصی با زبانهایی مثل Go میروند؛ اما پیادهسازی و نگهداری SDKها، بافرگذاری، ارسال گروهی، تلاش مجدد و مقیاسپذیری، خودش به پروژهای جداگانه تبدیل میشود.
آیا واقعاً لازم است این بخش را از صفر بسازیم؟
معرفی RudderStack؛ درگاه ورود رویدادها به خطوط پردازش داده
رادراستک (RudderStack) در اصل یک پلتفرم مدیریت دادههای مشتریان (CDP) است که برای جمعآوری، پردازش و انتقال دادههای رفتاری از وبسایتها، اپلیکیشنها و سرویسهای مختلف به کار میرود. بخشی از این پلتفرم بهصورت متنباز ارائه شده است. در این پست، مشخصاً Rudder Server را معرفی میکنیم؛ موتور سمت سرور این پلتفرم که وظیفهٔ پردازش و مسیریابی رویدادها را بر عهده دارد و میتوان از آن بهعنوان لایهٔ ورود رویدادها به خط پردازش داده، برای مثال پیش از Kafka، استفاده کرد.
معماری پیشنهادی به کمک این ابزار، به شکل زیر خواهد بود :
Client SDK → RudderStack → Kafka → Consumers → ClickHouse
در این معماری، RudderStack رویدادها را از کلاینتهای مختلف دریافت میکند و به Kafka تحویل میدهد. سپس مصرفکنندگان Kafka مسئول پردازش و تبدیل دادهها هستند و در نهایت، دادهها میتوانند در ClickHouse ذخیره شوند.
چه قابلیتهایی دارد؟
پشتیبانی از SDKهای متنوع: پشتیبانی از پلتفرمهایی مانند JavaScript، iOS، Android، React Native و Flutter و زبانهایی مثل Python، Go، Java، .NET و Rust.
ارسال کارآمد: بافرگذاری و ارسال گروهی رویدادها برای کاهش سربار ارتباطات شبکه.
اتصال به Kafka: پشتیبانی از ارسال گروهی پیامها، فشردهسازی و قابلیتهای مرتبط با قالب و اعتبارسنجی دادهها.
مقیاسپذیری افقی: امکان اجرای چند نمونه پشت Load Balancer برای افزایش ظرفیت دریافت رویدادها.
(هر چند نسخه رایگان آن تک نود هست اما میتوان با اتخاذ راهکارهایی ، از چند نسخه آن پشت یک Load Balancer استفاده کرد)
میزبانی مستقل: امکان استقرار نسخهٔ متنباز در زیرساخت خودمان.
️ چند نکتهٔ عملیاتی
توان عملیاتی واقعی به سختافزار، اندازهٔ رویدادها و تنظیمات وابسته است؛ بنابراین اعداد بنچمارک را باید در محیط خودمان آزمایش کنیم.
همچنین اگر ترتیب رویدادهای هر کاربر اهمیت دارد، باید مسیریابی، رفتار مصرفکنندگان و کلید پارتیشنبندی Kafka را با دقت طراحی کنیم. اجرای چند نمونه بهتنهایی تضمینکنندهٔ ترتیب رویدادها نیست.
یک نکتهٔ تکمیلی
اگر مسئلهٔ ما دریافت دادههای تلهمتری، مانند لاگ، متریک و تریس است، OpenTelemetryCollector هم راهکار مهمی برای دریافت و انتقال این نوع دادههاست. اما برای رخدادهای محصول و کسبوکار، مانند کلیک کاربران، ثبت سفارش و فعالیت اپلیکیشنها، RudderStack میتواند گزینهای برای لایهٔ ورود رویدادها باشد.
کد منبع: https://github.com/rudderlabs/rudder-server
وبسایت: https://www.rudderstack.com/
@DevTwitter | <Mojtaba Banaie/>
👍2❤1
مدیریت JWT در اندروید؛ Retrofit یا Ktor Client؟
در بررسی احراز هویت با JWT، یکی از نکاتی که برام جالب بود، تفاوت رویکرد Retrofit و Ktor Client در مدیریت توکنهاست.
استفاده از Retrofit + OkHttp: برای پروژههای Native Android گزینهای جاافتادهست. با Interceptor و Authenticator میتونیم ارسال توکن و مدیریت پاسخهای 401 و فرایند Refresh رو پیادهسازی کنیم؛ البته بخش مهمی از این منطق به طراحی و کدنویسی خودمون نیاز داره.
استفاده از Ktor Client: با پلاگین Auth و قابلیت Bearer Authentication، بخشی از این فرایند رو سادهتر میکنه. همچنین برای پروژههای Kotlin Multiplatform گزینه مناسبیه.
البته در هر دو روش، ذخیره امن توکنها، مدیریت خطاها و جلوگیری از Refresh همزمان درخواستها اهمیت زیادی داره.
در نهایت، انتخاب منوط به نیاز پروژهست؛ Retrofit برای Native Android اکوسیستم جاافتادهای داره و Ktor هم با قابلیتهای داخلی و پشتیبانی از Multiplatform انعطاف خوبی ارائه میده.
AndroidDevelopment Kotlin JWT Retrofit Ktor Authentication
برنامه_نویسی اندروید برنامه_نویس_اندروید
@DevTwitter | <Amir Hossein Jalili/>
در بررسی احراز هویت با JWT، یکی از نکاتی که برام جالب بود، تفاوت رویکرد Retrofit و Ktor Client در مدیریت توکنهاست.
استفاده از Retrofit + OkHttp: برای پروژههای Native Android گزینهای جاافتادهست. با Interceptor و Authenticator میتونیم ارسال توکن و مدیریت پاسخهای 401 و فرایند Refresh رو پیادهسازی کنیم؛ البته بخش مهمی از این منطق به طراحی و کدنویسی خودمون نیاز داره.
استفاده از Ktor Client: با پلاگین Auth و قابلیت Bearer Authentication، بخشی از این فرایند رو سادهتر میکنه. همچنین برای پروژههای Kotlin Multiplatform گزینه مناسبیه.
البته در هر دو روش، ذخیره امن توکنها، مدیریت خطاها و جلوگیری از Refresh همزمان درخواستها اهمیت زیادی داره.
در نهایت، انتخاب منوط به نیاز پروژهست؛ Retrofit برای Native Android اکوسیستم جاافتادهای داره و Ktor هم با قابلیتهای داخلی و پشتیبانی از Multiplatform انعطاف خوبی ارائه میده.
AndroidDevelopment Kotlin JWT Retrofit Ktor Authentication
برنامه_نویسی اندروید برنامه_نویس_اندروید
@DevTwitter | <Amir Hossein Jalili/>
❤3👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍3
Forwarded from DevTwitter Ads.
❓امروزه علت و ریشهی عدم ثبات و زودرنجی بازیکنان برزیلی چیه؟
❓چرا انسان به کنشهای منفی نسبت به کنشهای مثبت اهمیت بیشتری میده؟
❓آیا روشی هست تا تمرین و استمرار در یک کار، برای ما لذتبخش باقی بمونه؟
🆔 @footballaslife
❓چرا انسان به کنشهای منفی نسبت به کنشهای مثبت اهمیت بیشتری میده؟
❓آیا روشی هست تا تمرین و استمرار در یک کار، برای ما لذتبخش باقی بمونه؟
تو این کانال، ما با مثالهای فوتبالی و ورزشی به اعماق رازهای روانشناسی پی میبریم، و همچنین نگاه ویژهای داریم به تاریخ و سیاست، و روایتهایی که احتمالا نشنیده باشید.
🆔 @footballaslife
🍌6👎2🔥1