استفاده از Guid مزایا و معایب خودش رو داره. دوتا نکته مهمی که راجبش وجود داره، یکی تفاوت سایزش با int هست، به این صورت که idهایی از جنس int توی دیتابیس 32 بیت فضا میگیرن، اما id هایی از جنس Guid توی دیتابیس 128 بیت فضا میگیرن. چالش بعدی، تصادفی بودنشون خوبه ازین جهت که یه سری پیچیدگیهای رو کم میکنه و نیازی نیست خیلی نگران id تکراری باشیم، اما همین تصادفی بودن باعث میشه موقع index کردن دیتابیس به مشکلی تحت عنوان index fragmentation بر بخوریم. لینک زیر بیشتر راجب این موضوع توضیح میده:
https://www.mssqltips.com/sqlservertip/4331/sql-server-index-fragmentation-overview/
اما راه حل چیه؟ ما نیاز داریم تا بتونیم حداقل تا حدی از کاملا تصادفی بودن دور بشیم در حدی که بتونیم "تا حدودی" id های sortable داشته باشیم. مقالهی زیر میاد این مسائل رو بطور مختصر بررسی میکنه و راه حل مناسبی ارائه میده:
https://andrewlock.net/generating-sortable-guids-using-newid/
راه حل چیه؟ پکیج NewId اومده و با الهام گرفتن از روشی که توئیتر روی Snowflake استفاده کرده برامون UUID یا همون GUID خودمون تو دات نت ایجاد میکنه که sortable هست. این کار چه اثری داشته؟
میزان fragmentation رو از 98 درصد به 5 درصد کاهش میده. داخل هر page دیتابیس فضای خالی کمتری بجا میزاره، اینطوری که guid عادی 75 درصد هر page رو پر میکنه اما guid جدیدمون 98 درصد رو پر میکنه و اینطوری باعث شده که تعداد page های ساخته شده از 77 تا به 59 تا برسه و از فضا بصورت بهینه استفاده کنه!
@ever_code
Post #133
141