Node.js + MongoDB: أداء المعاملات

"في بعض الأحيان ندفع أكثر مقابل ما نحصل عليه مجانًا." - أ. أينشتاين


قدم MongoDB 4+ مؤخرًا دعمًا للمعاملات متعددة المستندات.



ونظرًا لأن مشروعنا انتقل للتو إلى الإصدار 4.2 ، فقد نشأت أسئلة بشكل طبيعي:



  • ماذا سيحدث للأداء؟
  • إلى أي مدى ستتباطأ العملية؟
  • هل نحن على استعداد للتضحية بالسرعة من أجل (على الأقل بعض) الدقة؟


عند دراسة التوثيق والإنترنت ، زادت الأسئلة فقط:



  • هل ستتباطأ جميع العمليات بسبب المعاملات؟
  • ما مدى تباطؤ مجموعة العمليات؟


دعنا نحاول معرفة ذلك.



لكي تدعي على الأقل بعض النصيب الضئيل من الحقيقة ، عليك أن تعمل قليلاً.



لتسهيل الإدراك ، سأقسم التنفيذ إلى 3 خطوات:



  1. اختيار الأداة
  2. وصف مجموعات العمليات والحصول على النتائج
  3. تحليل النتائج


الآن حول كل خطوة على حدة.



اختيار الأدوات:



  1. اختبار MongoDB (نسخة متماثلة مع الحد الأدنى من عدد عمليات mongod) ومحرك لها: mongodb-memory-server ، mongodb مطلوبة .
  2. لسهولة قياس الوقت ، اخترت وحدة "ميكروثانية"
  3. : ttest, stdlib.


وصف مجموعات العمليات والحصول على النتائج:



ننفذ كل (من العمليات الرئيسية) عمليات منفصلة ، insertOne ، updateOne ، deleteOne ، findOne ، insertMany * updateMany * deleteMany * find * ومجموعاتها insertOne + updateOne + deleteOne، insertOne + updateOne + deleteOne + findOne، insertMany * + updateMany * + deleteMany * insertMany * + updateMany * + deleteMany * + find * with وبدون استخدام المعاملات.



قياس الوقت لإكمال كل عملية.



على سبيل المثال - insertMany + updateMany + deleteMany مع وبدون معاملة











سيتم تكرار كل عملية / قياس 300 مرة (للتحليل سنستخدم 100 نتيجة "في المنتصف" ، أي من 101 إلى 200) ** - دعنا نسميها "microiteration" (من خلال تكرار العمليات الفردية أو التوليفات).



الآن ، وبتغيير التسلسل باستمرار ، سنقوم بتنفيذ 100 "microiterations" (1 "macroiteration" = العدد الإجمالي لـ "microiterations" * 300) *

* تم اختيار الرقم 300 بشكل تجريبي تمامًا

** لمزيد من المعلومات الكاملة حول التنفيذ ، أدعوك لزيارة مستودع github (الرابط أدناه في النص)



تحليل النتائج:



نتيجة لجميع التكرارات ، تلقينا 20000 قياس لكل عملية ومجموعة من العمليات (10000 باستخدام معاملة ، 10000 - بدون) في شكل مصفوفات.







بعد ذلك ، نحتاج إلى إجراء بعض الحسابات.



نتائج المحاصيل التي تقع خارج العينة بوضوح







تعني







حساب الانحراف المعياري







تحديد وجود فروق ذات دلالة إحصائية بين العينات باستخدام ttest (تأكيد أو دحض الفرضية الصفرية)







باستخدام الرسوم البيانية البسيطة ، نقوم بتصور النتائج. على سبيل المثال ، لنأخذ مجموعة insertMany + updateMany + deleteMany و insertOne بشكل منفصل (سيتم عرض جميع النتائج الأخرى بتنسيق نصي في قسم الاستنتاجات). ونتيجة لذلك ، تحتوي ملفات html المُنشأة على رسم بياني يتوافق اسمه مع اسم عملية أو مجموعة من العمليات (التكرارات غير المتعلقة بالمعاملات موضحة باللون الفيروزي ، والمعاملات باللون البرتقالي). "ذو دلالة إحصائية" (صواب / خطأ) يوضح ما إذا كان هناك أي فرق ذي دلالة إحصائية على الإطلاق. كل شيء آخر هو قيم مطلقة ونسبية بالميكروثانية والنسبة المئوية على التوالي.











الاستنتاجات:



  1. : insertMany + updateMany + deleteMany ( )
  2. ( 7%): updateMany, find, insertOne + updateOne + deleteOne + findOne, insertMany + updateMany + deleteMany + find
  3. , (91%): updateOne, deleteMany, findOne
  4. ( 197% 792%): insertOne, insertMany, deleteOne, insertOne + updateOne + deleteOne


لمزيد من المعلومات والقدرة على اختبار النتائج عن طريق تشغيل البرامج النصية بنفسك ، قم بزيارة جيثب .



شكرا للقراءة.



لا تتردد في التعليق ، ونأمل أن يكون لدينا مناقشة جيدة.



بدلاً من ذلك ، يمكنك تشغيل كل شيء بنفسك والحصول على النتائج الخاصة بك. وسيتم تبريد لمقارنتها



روابط مفيدة:

medium.com/cashpositive/the-hitchhikers-guide-to-mongodb-transactions-with-mongoose-5bf8a6e22033

blog.yugabyte.com/are-mongodb-acid-transactions-ready-for-high-

Performance -applications medium.com/@Alibaba_Cloud/multi-document-transactions-on-mongodb-4-0-eebd662ac237

www.mongodb.com/blog/post/mongodb-multi-document-acid-transactions-general-availability

docs.mongodb.com/manual/core/write-operations-atomicity

www.dbta.com/Columns/MongoDB-Matters/Limitations-in-MongoDB-Transactions-127057.aspx

dzone.com/articles/multi-document-transactions-on-mongodb-40

www.dbta.com/Columns/MongoDB-Matters/MongoDB-Transactions-In-Depth-125890.aspx

www.codementor.io/@christkv/mongodb-transactions-vs-two-phase-commit-u6blq7465

docs.mongodb.com/manual/core/read-isolation-consistency-recency

mathworld.wolfram.com/Outlier.html

support.minitab.com/en-us/minitab-express/1/help-and-how-to/basic-statistics/inference/how-to/two-samples/2-sample-t/interpret-the-results/key-results



All Articles