almessadi.
العودة إلى الفهرس

UUIDv4 مقابل ULID: ما الذي يهم حقًا في كتابة قواعد البيانات_

المعرفات العشوائية مريحة، لكنها ليست مجانية. إذا كانت محليّة الكتابة ذات أهمية، قارن بين UUIDv4 والمعرفات مرتبة زمنياً مثل ULID أو UUIDv7.

تاريخ النشر2 أبريل 2024
وقت القراءة5 min read

UUIDv4 هو خيار جيد افتراضي عندما تحتاج إلى معرفات فريدة يمكن توليدها بشكل مستقل عبر الخدمات.

المشكلة ليست أن UUIDv4 "خاطئ". المشكلة هي أن المعرفات العشوائية بالكامل لديها محليّة كتابة أضعف مقارنةً بالمعرفات المتسلسلة أو مرتبة زمنياً عند استخدامها في الفهارس.

هذا مهم عندما تكون كمية الكتابة مرتفعة بما فيه الكفاية.

لماذا تؤثر المعرفات العشوائية على سلوك الفهارس

تستخدم PostgreSQL عادةً فهارس B-tree للمفاتيح الرئيسية.

مع معرف مناسب للإضافة، تميل الصفوف الجديدة إلى الهبوط بالقرب من نهاية الفهرس. مع معرف عشوائي مثل UUIDv4، يتم إدراج القيم في جميع أنحاء نطاق المفتاح.

يمكن أن يؤدي ذلك إلى:

  • المزيد من تقسيم الصفحات
  • أسوأ محليّة في التخزين المؤقت
  • المزيد من تضخيم الكتابة تحت حمل إدخال ثقيل

هذه ليست فشلًا أخلاقيًا في UUIDv4. إنها نتيجة للعشوائية.

متى تلاحظ ذلك

ستنشر العديد من الأنظمة قيد التشغيل لن تهتم بذلك أبدًا.

إذا كانت الجدول صغيرة الحجم أو كان معدل الكتابة معتدلاً، فإن UUIDv4 غالبًا ما يكون جيدًا.

تبدأ بالاهتمام عندما:

  • تكون الجدول كبيرة
  • تكون عمليات الإدخال حارة
  • المفتاح الأساسي هو أيضًا نمط الوصول المجموع للعوالم المجاورة

تلك هي النقطة التي تصبح فيها المعرفات مرتبة زمنياً جذابة.

ULID و UUIDv7

ULID شائع لأنه قابل للترتيب في ترتيب معجمي وما زال لامركزيًا. إنه يحسن المحليّة مقارنةً بـ UUIDv4.

اليوم، UUIDv7 يستحق أيضًا انتباهاً جاداً لأنه يوفر UUIDs مرتبة زمنياً في تنسيق موحد.

هذا يؤدي إلى قاعدة إبهام أكثر حداثة:

  • استخدم UUIDv4 عندما تكون العشوائية مقبولة والحمل غير حساس
  • استخدم ULID أو UUIDv7 عندما تكون المحليّة والفهرسة مهمة

المقايضة في التطبيق

اختيار المعرف ليس مجرد قرار قواعد بيانات.

أنت تختار أيضًا:

  • سلوك الترتيب
  • طول السلسلة والترميز
  • التوافق مع المكتبات وقواعد البيانات
  • القراءة الإنسانية في السجلات وعناوين URL

لهذا السبب لا يوجد فائز عالمي.

توصية مفيدة

إذا كنت تبدأ نظامًا جديدًا وترغب في معرفات مرتبة زمنياً، ففضل استخدام تنسيق موحد قدر الإمكان. يعني ذلك عادةً تقييم UUIDv7 أولاً، مع وجود ULID كخيار عملي عندما يكون توافق نظامه البيئي أفضل لتقنيتك.

إذا كنت تستخدم بالفعل UUIDv4 وقاعدة البيانات في وضع صحي، فلا تهاجر فقط لأن منشور مدونة قال إن المعرفات العشوائية سيئة. قم بقياس الحمل الفعلي أولاً.

قراءة إضافية