Frage

Aus meinem Test erhalte ich ungefähr 500 Einfügungen, 200 Abfragen, 400 Aktualisierungen pro Sekunde.Ich frage mich, was ich optimieren kann, um diese Zahlen zu erhöhen.

Ich habe gelesen, dass andere in ihren Tests Tausende oder sogar Zehntausende von Einfügungen erreichen können, was weitaus besser ist als mein Test.Ich frage mich, ob mir etwas Grundlegendes fehlt?

Also, hier sind die Fakten :

  • Ich verwende eine Win 32-Bit-Mongodb v2.0.3 mit Standardkonfiguration
  • Java-Treiber (2.7.3) mit Spring Mongo, (ich erzwinge fsync nicht)
  • Eine Kombination aus Einfügung und atomaren Aktualisierungen wie Push, Pull, inc, dez, Satz,
  • Und wiederhole das alles 500k mal.
  • Ziel ist es, Benutzeraktionen wie Einfügen und Aktualisieren zu simulieren
  • Es sind keine spezifischen Indizes definiert, aber ich denke, standardmäßig wird es immer den eindeutigen Index für die ID geben?
  • Die Java-App, die in der Eclipse-IDE ausgeführt wird, wird auf demselben Computer wie der Mongod-Server ausgeführt
  • H / W-Spezifikation :kern i5, Speicher 4 GB, thinkpad edge
  • Ich stelle fest, dass der Java-Prozess ungefähr 280 MB benötigt und in dieser Anzahl im Verlauf der Schleife stabil ist

Die Startzeit ist :2012-03-08 21:50:16

Und ich überwache mit Mongostat und nach Erreichen der Zeit von 22:05:10, ich beende meine unvollendete Bewerbung ..und hier ist die letzte Ausgabe des Mongostaten

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

Und dann habe ich meine Insertionsnummer überprüft :

> db.myCollection.find().size();
90575

Und dies ist ein Beispiel für mein eingefügtes Dokument, das dabei auch aktualisiert wird usw.)

> 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"
        }
}

Und hier ist mein DB-Status :

> 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
}

Auch eine andere Frage aus Neugier ..gemessen an meiner Hauptsammlungsgröße mit ungefähr 90 KB Datensätzen und anderen nicht wesentlichen Sammlungen, die nicht groß sein sollten, ist es in diesem Fall sinnvoll, ungefähr 1 TB Dateigröße zu haben?Kann ich irgendetwas tun, um meine Dateigröße zu reduzieren?

Bitte teilen Sie Ihre Gedanken.

War es hilfreich?

Lösung

Sie scheinen viele Fehler auf dem zu bekommen mongostat.Irgendeine Idee warum?

Eine Kombination aus Einfügung und atomaren Aktualisierungen wie Push, pull, inc, dec, set

Wie geben Sie diese Updates heraus?Von _id?

Ich habe gelesen, dass andere in ihren Tests Tausende oder sogar Zehntausende von Einfügungen erreichen können, was weitaus besser ist als mein Test.Ich frage mich, ob mir etwas Grundlegendes fehlt?

GEM mongostat sie haben nur 3 Verbindungen aktiv und Ihre Sperre% beträgt nur etwa 10%.

  • Sind Sie Multi-Threading Ihre Eingaben?
  • Ruinieren Sie das alles auf demselben Computer?
  • Wie ist System IO?
  • Machst du WriteConcern.Safe?

Dies sind alles Überlegungen, die sich auf Ihren Durchsatz auswirken könnten.

ist es in diesem Fall sinnvoll, etwa 1 TB Dateigröße zu haben?

Basis auf Ihrem db.stats(), haben Sie nur etwa 600 MB Festplatte in Gebrauch.

"storageSize" : 610770944 // = 610,770,944

Ihre durchschnittliche Objektgröße beträgt 622 Byte, aber Sie haben 815.197 Objekte, nicht die 90 KB Dokumente, die Sie angeblich haben.

Kann ich irgendetwas tun, um meine Dateigröße zu reduzieren?

Ja, reduzieren Sie die Größe der Schlüssel in Ihren JSON-Dokumenten.Beispielsweise:

"something1" : "my class is cool !"  => ~28 bytes
"s1": "my class is cool !"           => ~20 bytes

Stellen Sie sicher, dass Sie die verkürzten Namen korrekt speichern, und lassen Sie Ihr Datenzugriffsframework die Zuordnung dieser zu vernünftigeren Namen aufheben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top