README.md
280 subscribers
20 photos
9 files
626 links
Everything about software engineering
⌨️

https://t.me/boost/readmemdd
Download Telegram
Forwarded from Go Casts 🚀
یکی از زیبایی های گولنگ اینترفیس هست، چیزی که فلسفه composition over inheritance رو به زیبایی هر چه تمام تر در گولنگ امکانپذیر کرده
ولی نحوه استفاده از اینترفیس با زبان های دیگه متفاوته
این مقاله توضیحاتی در این مورد داده
https://eli.thegreenplace.net/2023/the-power-of-single-method-interfaces-in-go/

اینم یه مقاله زیرخاکی از russ cox در مورد اینترفیس
Go Data Structures: Interfaces
Posted on Tuesday, December 1, 2009
https://research.swtch.com/interfaces

@gocasts

#golang #interface
سوال مصاحبه: چطور میشه بررسی کرد که نام کاربری بین یک میلیارد کاربر تکراری نباشه؟ 🤔

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

### مشکل کجاست؟ 😟
اگه بخوایم از روش‌های سنتی و دیتابیس برای بررسی نام کاربری استفاده کنیم، با زیاد شدن کاربرها سیستم کند میشه و با مشکلات زیر روبه‌رو می‌شیم:
- کندی در درخواست‌ها
- فشار زیاد به دیتابیس💥 که باعث مصرف زیاد منابع میشه.
- مشکل در مقیاس‌پذیری 🚧 یعنی وقتی تعداد درخواست‌ها زیاد بشه، سرور نمی‌تونه همه رو مدیریت کنه.

### استفاده از Redis: سریع ولی پرمصرف 💾
ردیس Redis کمک می‌کنه که بررسی نام کاربری خیلی سریع بشه، چون داده‌ها رو توی حافظه ذخیره می‌کنه. اما این روش یه مشکل بزرگ داره: حافظه زیادی مصرف می‌کنه. مثلاً برای یک میلیارد نام کاربری به 15 گیگابایت حافظه نیاز داریم! 😳 که تو سیستم‌های بزرگ، خیلی پرهزینه و غیرعملی میشه.

### فیلتر Bloom: ساده، بهینه و کم‌مصرف 💡
حالا بریم سراغ فیلتر Bloom. این فیلتر یه روش خیلی بهینه‌تره که فضای حافظه خیلی کمتری استفاده می‌کنه. برای همون یک میلیارد نام کاربری، فقط 1.67 گیگابایت حافظه نیاز داره! 😎

اما فیلتر Bloom چیه؟ بذار یه مثال ساده بزنم:
فرض کن یه کیف داری که یه سری جیب کوچیک داره. هر بار که می‌خوای یه نام کاربری جدید رو ذخیره کنی، یه سری کلید (یعنی همون الگوریتم‌های هش) بهت میگه تو کدوم جیب‌های کیف بذاری. بعد اگه بخوای ببینی اون نام کاربری قبلاً ذخیره شده یا نه، فقط کافیه جیب‌های مشخص شده رو چک کنی. اگه تو هر جیب چیزی باشه، یعنی احتمالاً اون نام کاربری قبلاً استفاده شده. ولی اگه یکی از جیب‌ها خالی باشه، مطمئنی که اون نام کاربری وجود نداره. 😄

با این روش:
- حافظه کمی استفاده میشه 🧠
- سرعت بررسی خیلی بالاست

البته یه نکته کوچیک داره: بعضی وقتا ممکنه به اشتباه بگه که یه نام کاربری هست در حالی که نیست (این همون خطای مثبت یا False Positive هست)، ولی در اکثر مواقع این خطا قابل چشم‌پوشیه.

### نتیجه‌گیری 🎯
اگه با سیستم‌هایی کار می‌کنید که میلیون‌ها یا حتی میلیاردها کاربر دارن، فیلتر Bloom یه راه‌حل خیلی بهینه و هوشمند برای بررسی یونیک بودن نام کاربریه. هم توی حافظه صرفه‌جویی می‌کنه، هم سرعت بررسی رو بالا نگه می‌داره.

اگه در مورد بهینه‌سازی سیستم‌های بزرگ کنجکاوید یا دوست دارید بیشتر بدونید، خوشحال میشم با هم بیشتر صحبت کنیم! 😊✌️

راستی مشتی باشید!


▶️join: @readmemdd
🔥3💯211👏1