ساخت ID های منحصر به فرد در دیتابیس های توزیع شده ( قسمت اول)
سلام دوستان عزیز امیدوارم که حالتون خوب باشه. در کنارتون هستیم با یکی از پرکاربرد ترین و مهمترین مسئله های حوزه مهندسی نرم افزار و در حیطه سیستم های توزیع شده.
ما در قسمت قبل کمی درباره سیستم های توزیع شده و همینطور sharding صحبت کردیم و یه دید کلی نسبت بهش به دست آوردیم.
فرض کنید ما یک سیستم بزرگ داریم که با حجم مناسبی از داده ها سر و کار داریم ( منظورم بیگ دیتا نیست) و نیاز داریم که داده ها رو در دیتابیس های مختلفی ذخیره کنیم به جای این که یک سرور دیتابیس داشته باشیم و صفر تا صد رو داخل اون ذخیره کنیم.
اگر sql بدونید و با دیتابیس ها کار کرده باشید میدونید ما یک کلید داریم تحت عنوان primary key یا کلید اصلی. که معمولا یا یک مقدار منحصر به فرد مثل کد ملی داره و یا این که auto increment هست ( یعنی کلید هر ردیف رو به شکل اتوماتیک ست میکنه : ۱و۳و۵و… که تو این مثال کلید ها دو تا دوتا اضافه شدن).
ویژگی auto increment مزیت هایی داره :
یک ) مطمئن هستیم که هیچوقت کلید تکراری در یک دیتابیس تولید نمیشه.
دو) کلید ها از الگوی خاصی پیروی میکنن که این هم میتونه مزیت و هم عیب محسوب بشه.
اما این روش اشکالاتی هم داره. زمانی که شما میخواید از معماری توزیع شده استفاده کنید قطعا بیش از یک دیتابیس دارید. مثلا دو تا یا سه تا. و هر کدوم از این دیتابیس ها نمیتونن با یک الگوی خاص داده رو ذخیره کنن.( اینطوری کلید تکراری میخوریم و مشکل بزرگ ایجاد میشه برامون)
و اما راه حل چیه؟
راه حل اول : از الگو های متفاوتی استفاده کنیم برا auto increment به عنوان مثال در دیتابیس A و B مثال های زیر رو ببینین
A : 1,3,5,7,…
B: 2,4,6,8,…
به نظر راه حل خوبی میاد ولی چند اشکال داره:
۱.مقیاس پذیری دشوار
۲.اگر سروری کم و زیاد بشه مقیاس پذیری ما به F**k میره 🙂
این یه مقدمه ای بود راجع به این چالشی که این روزا زیاد باهاش دست و پنجه نرم میکنیم. تو قسمت بعدی به ارائه روش های مناسبتری برای حل این چالش میپردازیم
منبع:
https://t.me/tobecomesoftwareengineer