كيفية تسريع اختبار mongodb الخاص بي؟
-
09-12-2019 - |
سؤال
من الاختبار الذي أجريته، حصلت على حوالي 500 إدراج و200 استفسار و400 تحديث في الثانية.وأتساءل عما يمكنني تعديله لزيادة هذه الأرقام.
لقد قرأت أن الآخرين يمكنهم تحقيق آلاف أو حتى عشرات الآلاف من الإدخالات في اختباراتهم، وهو أفضل بكثير من الاختبار الذي أجريته.أتساءل عما إذا كنت أفتقد شيئًا أساسيًا؟
حتى هنا هي الحقائق :
- أنا أستخدم الإصدار 32 بت من mongodb v2.0.3 مع التكوين الافتراضي
- برنامج تشغيل Java (2.7.3) مع Spring mongo، (لا أقوم بإجبار fsync)
- القيام بمجموعة من الإدراج والتحديثات الذرية مثل Push ، Pull ، Inc ، Dec ، Set ،
- وكرر كل هذا لمدة 500 ألف مرة.
- الهدف من ذلك هو محاكاة إجراءات المستخدم مثل الإدراج والتحديثات
- لم يتم تحديد فهارس محددة، ولكن أعتقد أنه سيكون هناك دائمًا فهرس فريد في المعرف افتراضيًا؟
- يعمل تطبيق Java الذي يعمل في Eclipse IDE على نفس الجهاز مثل خادم mongod
- مواصفات الارتفاع/الارتفاع:كور i5، ذاكرة 4 جيجابايت، ثينك باد إيدج
- لاحظت أن عملية جافا تستغرق حوالي 280 ميجابايت وهي مستقرة في هذا الرقم أثناء الحلقة
وقت البدء هو :2012/03/08 21:50:16
وأنا أراقب استخدام مونغوستات، وبعد الوصول إلى وقت 22:05:10
, ، أنهي طلبي غير المكتمل ..وهنا الناتج الأخير من mongostat
insert query update delete getmore command flushes mapped vsize res faults locked % idx miss % qr|qw ar|aw netIn netOut conn time
499 200 400 0 0 100 0 1023m 1.06g 581m 145 8.5 0 0|0 0|0 645k 97k 3 22:05:01
503 201 403 0 0 102 0 1023m 1.06g 582m 154 10.7 0 0|0 0|1 651k 98k 3 22:05:02
520 208 415 0 0 105 0 1023m 1.06g 582m 176 11.1 0 0|0 0|0 671k 101k 3 22:05:03
504 202 403 0 0 102 0 1023m 1.06g 582m 167 7.2 0 0|0 0|0 651k 98k 3 22:05:04
524 209 419 0 0 106 0 1023m 1.06g 582m 147 8.3 0 0|0 0|0 675k 102k 3 22:05:05
534 213 428 0 0 107 0 1023m 1.06g 583m 176 7.4 0 0|0 0|0 690k 103k 3 22:05:06
531 213 424 0 0 108 0 1023m 1.06g 584m 160 4.9 0 0|0 0|0 685k 104k 3 22:05:07
533 213 427 0 0 107 0 1023m 1.06g 584m 164 6.9 0 0|0 0|0 689k 103k 3 22:05:08
518 208 414 0 0 105 0 1023m 1.06g 585m 158 7.3 0 0|0 0|0 669k 101k 3 22:05:09
521 208 417 0 0 105 0 1023m 1.06g 585m 154 4.7 0 0|0 0|0 673k 101k 3 22:05:10
ثم قمت بالتحقق من رقم الإدراج الخاص بي:
> db.myCollection.find().size();
90575
وهذا مثال على المستند الذي تم إدراجه، والذي يتم تحديثه أيضًا وما إلى ذلك في هذه العملية
> db.myCollection.findOne().pretty();
{
"_id" : "b146189a-56a4-4035-8245-c4bd6dc2bd22",
"something1" : "my class is cool !",
"something2" : {
"value" : "this is a statement blah blah",
"name" : "myStatement"
},
"something3" : {
"size" : {
"value" : 0,
"name" : "size"
},
"value" : [
"6810cb0c-fa3e-4ca9-8a27-8432f2d1e828",
"a8276d05-a796-4c43-bc74-edc06d074099"
],
"name" : "myids"
},
"something4" : {
"myattr" : {
"value" : "something",
"name" : "name"
},
"attr" : {
"content" : {
"value" : "another another body body content content",
"name" : "content"
},
"contentId" : "b146189a-56a4-4035-8245-c4bd6dc2bd22",
"name" : "something"
},
"subsubchildchild" : {
"size" : {
"value" : 0,
"name" : "size"
},
"value" : [ ],
"name" : "subBodies"
},
"myId" : "b146189a-56a4-4035-8245-c4bd6dc2bd22",
"name" : "hiccups"
},
"something5" : {
"value" : false,
"name" : "hahaha"
},
"something6" : {
"name" : "okay this is just a test"
},
"something7" : {
"value" : false,
"name" : "remove me !"
},
"something8" : {
"size" : {
"value" : 0,
"name" : "size"
},
"value" : [ ],
"name" : "guess what"
},
"something9" : {
"size" : {
"value" : 0,
"name" : "anotherSize"
},
"value" : [ ],
"name" : "tarantula"
},
"something10" : {
"value" : 8,
"name" : "my exam score"
},
"something11" : {
"size" : {
"value" : 0,
"name" : "justAnotherSize"
},
"value" : [ ],
"name" : "myReference"
},
"something12" : {
"size" : {
"value" : 0,
"name" : "size"
},
"value" : [ ],
"name" : "myOtherReference"
},
"something13" : {
"value" : "8b78fff0-50f5-4992-9972-89f9d944fee7",
"name" : "user"
},
"something14" : {
"dateTime" : "2012-03-08 21:50:17.480000000"
},
"something15" : {
"value" : false,
"name" : "lovely"
}
}
وهنا إحصائيات قاعدة البيانات الخاصة بي:
> db.stats();
{
"db" : "qa",
"collections" : 7,
"objects" : 815197,
"avgObjSize" : 622.2093211824872,
"dataSize" : 507223172,
"storageSize" : 610770944,
"numExtents" : 57,
"indexes" : 5,
"indexSize" : 64197952,
"fileSize" : 1056702464,
"nsSizeMB" : 16,
"ok" : 1
}
سؤال آخر أيضا من باب الفضول..انطلاقًا من حجم مجموعتي الرئيسية، التي تحتوي على حوالي 90 ألف سجل، والمجموعات الأخرى غير الجوهرية التي لا ينبغي أن تكون كبيرة الحجم، هل من المعقول أن يكون حجم الملف حوالي 1 تيرابايت في هذه الحالة؟هل هناك أي شيء يمكنني فعله للمساعدة في تقليل حجم الملف؟
يرجى مشاركة أفكارك.
المحلول
يبدو أنك تحصل على الكثير من الأخطاء في mongostat
.أي فكرة لماذا؟
القيام بمزيج من عمليات الإدراج والتحديثات الذرية مثل Push و pull و inc و dec و set
كيف يتم إصدار هذه التحديثات؟بواسطة _id
?
لقد قرأت أن الآخرين يمكنهم تحقيق آلاف أو حتى عشرات الآلاف من الإدخالات في اختباراتهم، وهو أفضل بكثير من الاختبار الذي أجريته.أتساءل عما إذا كنت أفتقد شيئًا أساسيًا؟
وفق mongostat
لديك فقط 3 اتصالات نشطة ونسبة القفل الخاصة بك تبلغ حوالي 10% فقط.
- هل أنت متعدد الخيوط المدخلات الخاصة بك؟
- هل تدمر كل هذا على نفس الكمبيوتر؟
- كيف هو نظام الإدخال والإخراج؟
- انت تفعل
WriteConcern.Safe
?
هذه كلها اعتبارات يمكن أن تؤثر على إنتاجيتك.
هل من المعقول أن يكون حجم الملف حوالي 1 تيرابايت في هذه الحالة؟
قاعدة على الخاص db.stats()
, ، لديك فقط حوالي 600 ميجابايت من القرص قيد الاستخدام.
"storageSize" : 610770944 // = 610,770,944
يبلغ متوسط حجم الكائن لديك 622 بايت، ولكن لديك 815,197 كائنًا، وليس 90 ألف مستند تدعي امتلاكها.
هل هناك أي شيء يمكنني فعله للمساعدة في تقليل حجم الملف؟
نعم، قم بتقليل حجم المفاتيح في مستندات JSON الخاصة بك.على سبيل المثال:
"something1" : "my class is cool !" => ~28 bytes
"s1": "my class is cool !" => ~20 bytes
تأكد من أنك تقوم بتخزين الأسماء المختصرة بشكل صحيح وتسمح لك بإطار الوصول إلى البيانات برفع تعيين هذه الأسماء إلى أسماء أكثر معقولية.