Consistent Hashing فضایِ کلید را روی یک حلقه به گرههای مسئول وصل میکند. افزودنِ گره، در قراردادِ پایه فقط بخشی از مالکیتها را عوض میکند؛ اما بارِ برابر یا دسترسپذیری را خودکار تضمین نمیکند. این تمرین تمام۶۴مکانِ یک حلقهٔ ساختگی را پیش و پس از ورود یا خروجِ یک گره نگاشت میکند.
ابتدا قراردادِ مرز را روشن کنیم
حلقه مکانهای صحیحِ ۰تا۶۳دارد. گرههایAدر۸،Bدر۲۴وCدر۴۸هستند. مالکِ یک مکان، نخستین گرهٔ ساعتگرد با مختصاتِ بزرگتر یا مساوی است؛ پس خودِ ۸بهAمیرسد. بعد از۶۳به۰برمیگردیم و جستوجو ادامه دارد.
در متنِ Dynamo عبارتِ موقعیتِ بزرگتر آمده است؛ برای برخوردِ دقیقِ کلید و گره، این مثال سیاستِ صریحِ مساوی را انتخاب کرده و تفاوت را ثبت میکند. مختصات را خودمان دادهایم؛ تابعِ هش، توزیعِ یکنواخت یا مجموعهٔ واقعیِ سرورها تولید نشده است.
مالکیتِ تمامِ مکانها را بسازیم
با مرتبکردنِ گرهها روی محور، bisect_left نخستین مختصاتِ مناسب را پیدا میکند. اگر از انتهایِ فهرست بیرون رفت، به نخستین گره برمیگردیم. در حالتِ اولیه، A مالکِ ۴۹تا۶۳و۰تا۸است؛ B مکانهای۹تا۲۴وC مکانهای۲۵تا۴۸را میگیرد.
بارِ شمارشیِ این جهانِ یککلیدبرایهرمکان،۲۴برایA،۱۶برایBو۲۴برایCاست. این تعداد، حجمِ بایت، نرخِ درخواست یا قدرتِ پردازشی نیست. حتی در همین حلقهٔ کوچک نیز تعدادِ سهمها برابر نشده است؛ نامِ روش وعدهٔ بالانسِ کامل نمیدهد.
گره D در۳۶وارد شود
حالا D را در۳۶اضافه میکنیم و همهٔ۶۴مالکیت را دوباره میسازیم. فقط مکانهای۲۵تا۳۶که قبلاً C داشت، بهDمیروند. خارج از همین۱۲مکان، شناسهٔ مالک بدون تغییر است. فایل فهرستِ کاملِ پیش و پس و محلهای تغییر را نگه میدارد.
بارها اکنونA=۲۴،B=۱۶،C=۱۲وD=۱۲است. کوچکشدنِ بخشی از دامنهٔ C دیده میشود، اما A همچنان دو برابرِ C مکان دارد. در منبعِ Dynamo، گرههای مجازی برای مسئلهٔ توزیع مطرحاند؛ این فایل آن سازوکار، تکثیر یا سنجشِ عملکرد را اجرا نمیکند.
خروجِ B یک آزمایشِ جداست
از حلقهٔ اولیه، B را حذف میکنیم؛ این سناریو ادامهٔ ورودِ D نیست. مکانهای۹تا۲۴بهCمیروند و بقیه تغییر نمیکنند. جدا نگهداشتنِ خطِ مبنا لازم است؛ مقایسهٔ دو تغییرِ زنجیرهای با سناریویِ تکتغییر، شاهدِ متفاوتی میسازد.
مالکیتِ تازه به معنیِ منتقلشدنِ واقعیِ داده نیست. پس از تغییرِ عضویت در سامانهٔ عملیاتی، انتقال،نسخهها،درخواستهای همزمان و شیوهٔ توافق مسئلههای جدا هستند. کد فقط نگاشت را محاسبه میکند و به هیچ گره یا شبکهای وصل نمیشود.
oracle بدون جستوجوی دودویی
مرجعِ مستقل برای هر گره، فاصلهٔ ساعتگردِ پیمانه۶۴از کلید را حساب و کوچکترین را انتخاب میکند. نتیجه برای تمام۶۴مکان با روشِ bisect برابر است. سه چرخشِ مبدأ با انتقالِ همزمانِ کلیدها و گرهها نیز همان شناسههای مالک را میدهند.
مرزِ دقیق، wrap و تمامِ مکانهایِ نزدیکِ همسایهها در همین پوشش حضور دارند. هفت ورودیِ نامعتبر، از حلقهٔ خالی و مختصات یا شناسهٔ تکراری تا مکانِ بولین،حذفِ ناشناخته یا حذفِ آخرین گره، رد میشوند. سقفِ محلی۸گره است؛ این محدودیتِ ابزارِ آموزشی است، نه حدِ الگوریتم.
هشِ ویژگی ستونِ نمایشِ مدل میسازد و Bloom عضویتِ احتمالی را میسنجد؛ اینجا مالکیتِ دامنه عوض میشود. ادامه در آموزش هوش مصنوعی؛ هیچ تضمینِ امنیت،توافق یا چیدمانِ واقعیِ اپرا اعلام نشده است.
فایل تمرین و منبع
کد کاملِ تمرینِ مستقل و کنترلها؛ Python · ورودی و تمامِ خروجیِ اجرای واقعی؛ JSON
منابع در 2026-11-04 خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثالها و فایلهای این راهنما آموزشی و ساختهٔ تحریریهاند.