سؤال

من الاختبار الذي أجريته، حصلت على حوالي 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

تأكد من أنك تقوم بتخزين الأسماء المختصرة بشكل صحيح وتسمح لك بإطار الوصول إلى البيانات برفع تعيين هذه الأسماء إلى أسماء أكثر معقولية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top