برخی از مفاهیم هستند که ما با آن ها آشنا هستیم ولی آن ها را به شکل عمیق مطالعه نکرده ایم. با این حال آشنایی کم ما تا حد خوبی کار ما را راه می اندازد و به همین دلیل هیچ وقت اطلاعات بیشتری راجع به آن پیدا نمی کنیم. برخی مطالب ذاتا برای ما جالب هستند که بدون در نظر گرفتن نیاز راجع به آن ها کاوش می کنیم اما بسیار از مطالب این طور نیستند. برای شخص من GUID یا UUID یکی از مفاهیمی بود که خیلی جذابیت نداشت و میزان دانشم راجع به آن برای استفاده ام از آن کافی بود.
وقتی می خواستم سیستم کاربران آپادانا را قدرتمند کنم و امکان ورود به یک حساب را از طریق روش های مختلف بدهم، تصمیم گرفتم نگاهی به روش های مختلف تولید شناسه unique برای کاربران بکنم. برای کاربردهای مختلف از روش های مختلفی برای تولید شناسه استفاده می شود. در بسیاری از انواع پایگاه داده رابطه ای اعدادی که خود به خود زیاد می شوند برای شناسه مورد استفاده قرار می گیرند. تویتر در گذشته برای تولید شناسه برای تویت ها از روشی ترکیبی که تشکیل شده از زمان فعلی سیستم و عددی گرفته شده از zookeeper برای تولید شناسه استفاده می کرد که به آن snow flake می گویند. این روش مقداری کند است ولی خاصیت های جذابی دارد، مثلا این که اگر تویت ها را بر حسب شناسه مرتب کنید، این مرتب سازی بر حسب زمان و ماشین هم خواهد بود. برای یک حساب کاربری نیز شناسه می تواند دارای ویژگی های مختلفی باشد ولی در سیستم ما تنها ویژگی مورد نیاز unique بودن بود و مثلا نمی خواستیم شناسه به ما مفهوم دیگری مانند زمان ساخته شدن و یا متد سازنده کاربر را بگوید. به همین دلیل GUID را گزینه مناسب دیدم.

 شاید از خود بپرسید که یک GUID دقیقا چیست و چگونه کار می کند. یک GUID یا UUID یک عدد 128 بیتی است که می تواند 2^128 حالت مختلف را پوشش دهد. البته 6 بیت از این 128 بیت برای مشخص کردن نوع GUID و نگارش آن استفاده می شوند که 122 بیت را برای تولید شناسه باقی می گذارند. انواع مختلفی از GUID وجود دارند که به روش های مختلف تولید می شوند. 4 بیت اول بخش سوم GUID به ما نوع آن را می گوید که در این بخش شما معمولا عدد 4 را مشاهده می کنید. این نوع از GUID ها با استفاده از یک عدد random تولید می شوند. انواع دیگری از GUID ممکن است با استفاده از ترکیبی از مک آدرس کارت شبکه و زمان فعلی سیستم، گرفتن انواع hash از محتوایی که برایش GUID تولید می شود و ... استفاده می کنند. 

شاید تعجب کنید که چه طور تولید عدد تصادفی توسط ماشین های مختلف در دنیا بدون انجام هیچ گونه هماهنگی چه طور می تواند سیستمی تولید کند که واقعا شناسه های unique تولید می کند. پاسخ این است که به علت عظیم بودن گستره اعداد تولید شده، احتمال انجام collision و تولید شدن یک GUID تکراری بسیار پایین است. یک پست جالب در این باره وجود دارد که برایتان حساب می کند احتمال انجام برخورد بسیار کم است و اگر کسی از قصد یک GUID که دیده است را برای کاری استفاده نکند، احتمال انجام برخورد بسیار بسیار پایین است.

این نکته بسیار مهم است که GUID با تصور همکاری همه طرفین کار می کند. در سیستم هایی مثل ISBN که برای اختصاص شناسه به کتاب استفاده می شود. شرکت هایی وجود دارند که دامنده های مختلف اعداد را به ناشر ها و شهر ها و ... نسبت می دهند ولی در سیستمی مثل GUID شما تا وقتی شناسه هایی unique خواهید داشت که کسی از قصد شناسه را مجدد استفاده نکند. به همین دلیل کاربردهای GUID به سیستم هایی محدود می شود که از چنین مساله ای آسیب نبینند. در سیستمی مثل آپادانا که تمام GUID ها را برنامه خود ما تولید می کند از این نظر مشکلی وجود ندارد مگر این که ما برنامه نویسی در شرکت داشته باشیم که قصدش راه رفتن روی سلولهای مغذ دیگران باشد. امیدوارم که ما چنین برنامه نویسی در شرکته نداشته باشیم و در بدترین حالت فرد متخاصم به راه رفتن روی میز و صندلی اکتفا نماید