it-swarm.asia

ما هي العوائق باستخدام UUID أو GUID كمفتاح أساسي؟

أود بناء نظام موزع. أحتاج إلى تخزين البيانات في قواعد البيانات وسيكون من المفيد استخدام UUID أو ارشادية كمفتاح أساسي في بعض الجداول. أفترض أنها عيوب في هذا التصميم لأن UUID/GUID كبير جدًا ويكاد يكون عشوائيًا. البديل هو استخدام INT أو LONG المتزايدان تلقائيًا.

ما هي العوائق باستخدام UUID أو GUID كمفتاح أساسي لجداولي؟

ربما سأستخدم Derby/JavaDB (على العملاء) و PostgreSQL (على الخادم) كـ DBMS.

62
Jonas

يعتمد ذلك على دالة التوليد وحجم الجداول النهائية

الغرض من GUIDs هو أن تكون فريد عالميًا معرّفات. كما تمت مناقشته في وثائق Postgres 8. لا توجد منهجيات مناسبة عالميًا لتوليد هذه المعرفات ، ولكن postgreSQL تأتي مع عدد قليل من المرشحين الأكثر فائدة.

من نطاق مشكلتك ، والحاجة إلى غير متصل يكتب ، أنت محاصر تمامًا في استخدام أي شيء باستثناء GUID ، وبالتالي لا توجد مزايا تعويضية للمخططات الأخرى.

من الناحية الوظيفية ، لا يمثل طول المفتاح عادة مشكلة في أي نوع من النظام الحديث ، اعتمادًا على عدد القراءات وحجم الجدول. كطريقة بديلة ، يمكن للعملاء غير المتصلين تجميع دفعات جديدة بدون مفتاح أساسي وإدراجها ببساطة عند إعادة الاتصال. نظرًا لأن postgreSQL تقدم نوع البيانات "التسلسلي" ، فلن يحتاج العملاء مطلقًا إلى تحديد المعرّف إذا كان بإمكانهم إجراء كتابة بسيطة إلى قاعدة البيانات.

29
Brian Ballsun-Stanton

نصيحة أخرى - لا تستخدم أبدًا GUIDs كجزء من فهرس مجمع. المعرفات الفريدة العمومية غير متسلسلة ، وبالتالي إذا كانت جزءًا من فهرس مجمع ، في كل مرة تقوم فيها بإدخال سجل جديد ، ستحتاج قاعدة البيانات إلى إعادة ترتيب جميع صفحات الذاكرة الخاصة بها للعثور على المكان المناسب للإدراج ، في حالة الزيادة التلقائية (intint) ، ستكون الصفحة الأخيرة فقط.

الآن إذا نظرنا إلى بعض إنجازات ديسيبل: 1.) MySQL - يتم تجميع المفاتيح الأساسية ، مع عدم وجود خيار لتغيير السلوك - لا نوصي باستخدام GUIDs على الإطلاق هنا 2.) Postgres ، MS-SQL - يمكنك عمل GUID كمفتاح أساسي غير مجزأ ، واستخدم حقلاً آخر كمؤشر مجمع ، على سبيل المثال intoincrement int.

22
Ross Ivantsiv

هذا يعتمد.

على محمل الجد ، مع كل ما قدمته حتى الآن ، هذا هو أبعد ما يمكن أن تذهب.

لماذا يكون من المفيد استخدام UUIDs؟ لماذا لا تستخدم INTs؟ لماذا لا يمكنك فهرسة UUIDs لاحقًا؟ هل تفهم ما يعنيه وجود قائمة مرتبة باستخدام مفتاح UUID وإدراج UUID عشوائي (غير متسلسل) بعد بضعة ملايين من الصفوف؟

ما المنصة التي سيعمل عليها هذا؟ كم عدد الأقراص؟ كم عدد المستخدمين؟ كم عدد السجلات؟

3
jcolebrand