تم إعداد ترجمة المقال عشية بدء الدورة
أبرز الملامح:
- من المهم للغاية تطوير مخطط على الرغم من أنه اختياري في MongoDB.
- وبالمثل، يجب أن تتطابق الفهارس مع مخططك وأنماط الوصول.
- تجنب استخدام الكائنات الكبيرة والمصفوفات الكبيرة.
- كن حذرًا مع إعدادات MongoDB، خاصة عندما يتعلق الأمر بالأمان والموثوقية.
- لا يحتوي MongoDB على مُحسِّن استعلام، لذا يجب عليك توخي الحذر عند إجراء عمليات الاستعلام.
لقد كنت أعمل مع قواعد البيانات لفترة طويلة جدًا، ولكنني اكتشفت مؤخرًا MongoDB. هناك بعض الأشياء التي أتمنى أن أعرفها قبل أن أبدأ العمل بها. عندما يكون لدى شخص ما خبرة بالفعل في مجال معين، تكون لديه مفاهيم مسبقة حول ماهية قواعد البيانات وماذا يفعلون. وعلى أمل تسهيل فهم الآخرين، أقدم قائمة بالأخطاء الشائعة.
إنشاء خادم MongoDB بدون مصادقة
لسوء الحظ، يتم تثبيت MongoDB بدون مصادقة بشكل افتراضي. بالنسبة لمحطة عمل يتم الوصول إليها محليًا، يعد هذا الإجراء أمرًا عاديًا. ولكن نظرًا لأن MongoDB هو نظام متعدد المستخدمين يحب استخدام كميات كبيرة من الذاكرة، فسيكون من الأفضل أن تضعه على خادم به أكبر قدر ممكن من ذاكرة الوصول العشوائي، حتى لو كنت ستستخدمه فقط للتطوير. يمكن أن يكون التثبيت على الخادم عبر المنفذ الافتراضي مشكلة، خاصة إذا كان من الممكن تنفيذ أي كود جافا سكريبت في الطلب (على سبيل المثال، $where
كفكرة ل
هناك العديد من طرق المصادقة، ولكن أسهلها هو تعيين معرف المستخدم/كلمة المرور. استخدم هذه الفكرة أثناء التفكير في المصادقة الفاخرة بناءً على ذلك
لا تنس ربط سطح الهجوم الخاص بك بـ MongoDB
,
أو
. نظرًا لأن ملفات البيانات غير مشفرة في MongoDB القياسي، فمن المنطقي تشغيل MongoDB باستخدام
خطأ أثناء تطوير الدائرة
لا يستخدم MongoDB مخططًا. ولكن هذا لا يعني أن هذا المخطط ليست هناك حاجة. إذا كنت تريد فقط تخزين المستندات دون أي نمط ثابت، فقد يكون تخزينها سريعًا وسهلاً، ولكن استعادتها لاحقًا قد يكون صعبًا.
مقالة كلاسيكية "
لا تنسى ترتيب الفرز
قد يؤدي نسيان ترتيب الفرز إلى مزيد من الإحباط وإضاعة الوقت أكثر من أي تكوين آخر غير صحيح. بشكل افتراضي يستخدم MongoBD
إنشاء مجموعات بمستندات كبيرة
يسعد MongoDB باستضافة مستندات كبيرة يصل حجمها إلى 16 ميجا بايت في مجموعات، و
إنشاء مستندات بمصفوفات كبيرة
يمكن أن تحتوي المستندات على صفائف. من الأفضل أن يكون عدد العناصر في المصفوفة بعيدًا عن رقم مكون من أربعة أرقام. إذا تمت إضافة عناصر إلى مصفوفة بشكل متكرر، فسوف تتفوق على المستند الذي يحتوي عليها، ويجب أن يتم ذلك
لدى MongoDB شيء يسمى
قد تعتقد أنه يمكنك الاستغناء عن فهرسة المصفوفة. لسوء الحظ، قد يؤدي عدم وجود الفهارس إلى حدوث مشكلات أخرى. نظرًا لأنه يتم مسح المستندات ضوئيًا من البداية إلى النهاية، فإن البحث عن العناصر في نهاية المصفوفة سيستغرق وقتًا أطول، وسيتم حذف معظم العمليات المرتبطة بمثل هذا المستند
لا تنس أن ترتيب المراحل في التجميع مهم
في نظام قاعدة البيانات الذي يحتوي على مُحسِّن الاستعلامات، تكون الاستعلامات التي تكتبها عبارة عن تفسيرات لما تريد الحصول عليه، وليس كيفية الحصول عليه. تعمل هذه الآلية بالقياس على الطلب في المطعم: عادةً ما تقوم ببساطة بطلب طبق، ولا تعطي تعليمات مفصلة للطاهي.
في MongoDB، تقوم بإرشاد الطباخ. على سبيل المثال، تحتاج إلى التأكد من مرور البيانات reduce
في أقرب وقت ممكن في خط الأنابيب باستخدام $match
и $project
، ولا يتم الفرز إلا بعد ذلك reduce
، وأن يتم البحث بالترتيب الذي تريده بالضبط. إن وجود مُحسِّن الاستعلام الذي يلغي العمل غير الضروري، ويتسلسل الخطوات على النحو الأمثل، ويحدد أنواع الانضمام يمكن أن يفسدك. مع MongoDB، لديك المزيد من التحكم على حساب الراحة.
أدوات مثل
استخدام التسجيل السريع
لا تقم مطلقًا بتعيين خيارات الكتابة في MongoDB للحصول على سرعة عالية ولكن موثوقية منخفضة. هذا الوضع "ملف وننسى" يبدو سريعًا لأنه يتم إرجاع الأمر قبل حدوث الكتابة. إذا تعطل النظام قبل كتابة البيانات على القرص، فسيتم فقدها وسينتهي الأمر في حالة غير متناسقة. لحسن الحظ، تم تمكين التسجيل في إصدار 64 بت MongoDB.
تستخدم محركات التخزين MMAPv1 وWiredTiger التسجيل لمنع ذلك، على الرغم من أن WiredTiger يمكنه التعافي حتى آخر مرة متسقة
يضمن تسجيل اليومية أن تكون قاعدة البيانات في حالة متسقة بعد الاسترداد وتحتفظ بجميع البيانات حتى تتم كتابتها في السجل. يتم تكوين تكرار التسجيلات باستخدام المعلمة
.
للتأكد من الإدخالات، تأكد من تمكين التسجيل في ملف التكوين
، ويتوافق تكرار التسجيلات مع كمية المعلومات التي يمكنك تحمل خسارتها.
الترتيب بدون فهرس
عند البحث والتجميع، غالبًا ما تكون هناك حاجة لفرز البيانات. دعونا نأمل أن يتم ذلك في إحدى المراحل النهائية، بعد تصفية النتيجة لتقليل كمية البيانات التي يتم فرزها. وحتى في هذه الحالة، سوف تحتاج إلى الفرز
إذا لم يكن هناك فهرس مناسب، فسيقوم MongoDB بالاستغناء عنه. يوجد حد للذاكرة يبلغ 32 ميجابايت على الحجم الإجمالي لجميع المستندات الموجودة
البحث بدون دعم الفهرس
تؤدي استعلامات البحث وظيفة مشابهة لعملية JOIN في SQL. للعمل بشكل أفضل، يحتاجون إلى فهرس قيمة المفتاح المستخدم كمفتاح خارجي. وهذا ليس واضحا لأن الاستخدام لا ينعكس في explain()
. هذه المؤشرات بالإضافة إلى الفهرس المكتوب فيه explain()
والذي بدوره يستخدمه مشغلو خطوط الأنابيب $match
и $sort
، عندما يجتمعون في بداية خط الأنابيب. يمكن للفهارس الآن أن تغطي أي مرحلة
إلغاء الاشتراك في استخدام التحديثات المتعددة
طريقة
يُستخدم لتغيير جزء من مستند موجود أو المستند بأكمله، حتى الاستبدال الكامل، اعتمادًا على المعلمة التي تحددها
. الأمر غير الواضح هو أنه لن يعالج جميع المستندات الموجودة في المجموعة إلا إذا قمت بتعيين الخيار
لتحديث جميع المستندات التي تستوفي معايير الطلب.
لا تنس أهمية ترتيب المفاتيح في جدول التجزئة
في JSON، يتكون الكائن من مجموعة غير مرتبة بحجم صفر أو أكثر من أزواج الاسم/القيمة، حيث الاسم عبارة عن سلسلة والقيمة عبارة عن سلسلة أو رقم أو منطقية أو فارغة أو كائن أو صفيف.
لسوء الحظ، BSON يركز كثيرًا على الترتيب عند البحث. في MongoDB، ترتيب المفاتيح داخل الكائنات المضمنة { firstname: "Phil", surname: "factor" }
- ليس هو نفسه { { surname: "factor", firstname: "Phil" }
. أي أنه يجب عليك تخزين ترتيب أزواج الاسم/القيمة في مستنداتك إذا كنت تريد التأكد من العثور عليها.
لا تخلط بين "باطل" и "غير معرف"
قيمة "غير معرف" لم يكن صالحًا أبدًا في JSON، وفقًا لـ $null
، وهو ليس حلاً جيدًا دائمًا.
استخدام $limit()
بدون $sort()
في كثير من الأحيان، عندما تقوم بالتطوير في MongoDB، من المفيد رؤية عينة من النتيجة التي سيتم إرجاعها من استعلام أو تجميع. لهذه المهمة سوف تحتاج $limit()
، ولكن لا يجب أن يكون موجودًا في الكود النهائي إلا إذا استخدمته من قبل $sort
. تعد هذه الآلية ضرورية لأنه بخلاف ذلك لا يمكنك ضمان ترتيب النتيجة، ولن تتمكن من عرض البيانات بشكل موثوق. في الجزء العلوي من النتيجة سوف تحصل على إدخالات مختلفة اعتمادا على الفرز. للعمل بشكل موثوق، يجب أن تكون الاستعلامات والتجميعات حتمية، أي أن تنتج نفس النتائج في كل مرة يتم تنفيذها. الكود الذي يحتوي على $limit()
، لكن لا $sort
، لن تكون حتمية وقد تتسبب لاحقًا في حدوث أخطاء سيكون من الصعب تعقبها.
اختتام
الطريقة الوحيدة للشعور بخيبة الأمل من MongoDB هي مقارنتها مباشرة بنوع آخر من قواعد البيانات، مثل نظام إدارة قواعد البيانات (DBMS)، أو استخدامها بناءً على توقعات معينة. إنه مثل مقارنة البرتقالة بالشوكة. تخدم أنظمة قواعد البيانات أغراضًا محددة. من الأفضل أن تفهم هذه الاختلافات وتقدرها بنفسك. سيكون من العار الضغط على مطوري MongoDB بشأن المسار الذي أجبرهم على السير في مسار نظام إدارة قواعد البيانات. أريد أن أرى طرقًا جديدة ومثيرة للاهتمام لحل المشكلات القديمة، مثل ضمان سلامة البيانات وإنشاء أنظمة بيانات مرنة في مواجهة الفشل والهجمات الضارة.
يعد تقديم MongoDB لمعاملات ACID في الإصدار 4.0 مثالًا جيدًا على إدخال تحسينات مهمة بطريقة مبتكرة. أصبحت المعاملات متعددة المستندات والبيانات المتعددة الآن ذرية. من الممكن أيضًا ضبط الوقت اللازم للحصول على الأقفال وإنهاء المعاملات العالقة، بالإضافة إلى تغيير مستوى العزل.
اقرأ أكثر:
المصدر: www.habr.com