MongoDB / الأساسي: أسس الوثائق / الدرس 2
نمذجة البيانات المضمنة والمرجعية
اختر حدود الوثيقة من الوصول والنمو المحدود، واشرح التضمين والمراجع والنسخ دون اعتبار المرونة غياب تصميم.
في هذه الصفحة
أهداف الدرس
- اختيار حدود تجميع لتحديث تجاري ذري.
- تحديد المصفوفات غير المحدودة وملكية الحقائق المنسوخة.
صمم من العمليات والثوابت
يناسب الحد الحقائق المقروءة أو المعدلة معاً. قد تضم الشحنة عنواناً محدوداً، وتحتاج الأحداث غير المحدودة وثائق منفصلة. لا يلزم ربط علاقي لكل شكل وتفيد المراجع عند اختلاف الدورة والنمو. حدد القراءة والكتابة والاحتفاظ والاتساق قبل البنية، ووثق معنى الحقول وإصداراتها رغم المرونة.
ضمن لقطة تاريخية مقصودة
تسجل الوثيقة عنوان قبول الحجز 101 وقد يبقى بعد تعديل العميل عنوانه الحالي؛ هذا نسخ تاريخي مقصود لا فشل مزامنة. يطبع الوصول Aqaba دون مجموعة العملاء. إذا احتاج التقرير العنوان الحالي فصرح بذلك واستخدم مرجعه؛ اسم address وحده لا يميز المعنيين.
const booking = {
_id: 101, customerId: 7,
deliveryAddress: { city: 'Aqaba', street: 'Quay Road' },
lines: [{ sku: 'PEN', qty: 2 }, { sku: 'PAD', qty: 1 }]
};
print(booking.deliveryAddress.city);
Aqaba
العنوان لقطة الحجز ويمكن أن يشير customerId لبيانات عميل مستقلة.
حد المصفوفات وحجم الوثيقة
الحد الأقصى للوثيقة العادية 16 MiB. قد تبلغه مصفوفة مسحات نامية وتجمع أحداثاً مستقلة في وثيقة ساخنة. احفظ ملخصاً حديثاً محدوداً بسياسة واضحة، والتاريخ منفصلاً بمرجع مفهرس. الحد ليس هدف أداء؛ قد تكون وثيقة أصغر مكلفة في النقل والكتابة والتخزين المخبأ مع التواتر.
اجعل التاريخ أحداثاً مستقلة قابلة للاستعلام
يجلب النمط أحداث الشحنة حسب shipmentId ويرتب الزمن و_id للتعادل. لا تمنح مطابقة المرجع صلاحية؛ أضف نطاق المستأجر إن لزم. ندرس الفهرس المركب لاحقاً. المتوقع أحداث الشحنة المطابقة مرتبة، وتعتمد الوثائق الفعلية على عينة لا مخرجات إنتاج مختلقة.
db.getSiblingDB('quay_lab').scanEvents.find(
{ shipmentId: 101 },
{ _id: 1, occurredAt: 1, state: 1 }
).sort({ occurredAt: 1, _id: 1 }).limit(20);
تتجنب مجموعة الأحداث تحميل كل التاريخ داخل قراءة الشحنة.
حدد من يحدث الحقائق المنسوخة
قد يخدم النسخ التاريخ أو القراءة، وتحتاج الحقيقة الحالية المنسوخة مالكاً وسياسة نشر. حدد التزامن أو التأخر أو إعادة البناء. يوفر التضمين حد ذرية وثيقة، ولا تحدث المراجع معاً تلقائياً. تنسق المعاملة العمل المدعوم ولا تجعل النمو غير المحدود فعالاً. صمم الثوابت ثم المعاملة أو outbox أو المصالحة وفق التأخير والفشل المقبولين.
الأخطاء الشائعة وإصلاحها
تنمو مصفوفة أحداث بلا حد
- لماذا يحدث؟
- ضُمن تاريخ متعدد النمو داخل أصل واحد.
- كيف تصلحه؟
- انقل التاريخ لوثائق مرجعية وحدد ملخصاً محدوداً.
- كيف تتجنب تكراره؟
- قدر النمو والكلفة قبل التضمين.
يتغير العنوان التاريخي بعد تعديل العميل
- لماذا يحدث؟
- استُخدم مرجع حالي بدل لقطة الحجز.
- كيف تصلحه؟
- احفظ عنوان القبول بمعنى تجاري واضح.
- كيف تتجنب تكراره؟
- ميز الحالي والتاريخي بالعقد.
تختلف القيم الحالية المنسوخة
- لماذا يحدث؟
- لم يحدد مالك أو نشر ومصالحة.
- كيف تصلحه؟
- حدد المرجع ونفذ سياسة مراجعة.
- كيف تتجنب تكراره؟
- وثق القدم المقبول ودليل الإصلاح لكل حقيقة حالية منسوخة.
اختبر فهمك
1. هل تضم الشحنة ملخص آخر ثلاث حالات وتاريخها الكامل في مصفوفة غير محدودة؟
اعرض الحل المشروح
قد يناسب ملخص محدود بثلاثة مع قاعدة تحديث، ولا يناسب التاريخ الكامل مصفوفة بلا حد. خزنه بأحداث ومرجع وفهرس وقت. حدد المرجع وإعادة بناء الملخص بعد الفشل حتى لا يصبح النسخ تناقضاً مجهولاً.
2. يغير العميل المدينة بعد الحجز. أي مدينة تعرض الفاتورة؟
اعرض الحل المشروح
حدد المعنى أولاً؛ تحتاج الفاتورة عادة لقطة القبول لا الملف الحالي. احفظها وسمها. قد يتبع تقرير التواصل المرجع الحالي، ويدعم النموذج المعنيين دون ادعاء حقل واحد متزامن تلقائياً.
أهم ما تعلمته
- ضمن المحدود المتغير معاً وأشر للتاريخ المستقل أو النامي.
- تحتاج كل حقيقة حالية منسوخة ملكية وسياسة اتساق.