2016-05-03 10 views
0

Ich verwende derzeit 3.2.1 mongo driver version.Mongodb - Default Index Creation - Hintergrundkonstruktion

Use Case -

schreiben - Bulk Insert in Sammlung oder pro Zeile einfügen Lesen - Lesen Sie auf Basis von _id.

Keine zusätzlichen Indizes erforderlich, Standardindex, den mongodb erstellt auf _id Feld ist genug.

Problem - Mein Mongo-Dienst (Aufruf mongodb) nimmt zu viel CPU-Last.

1.) Erstellt Mongodb Indizes auf _id Feld im Hintergrund.

2.) Wenn nicht muss ich es Index im Hintergrund erstellen, um den Prozess zu befestigen. Wie kann ich das programmatisch machen?

Vielleicht so etwas wie,

collection.createIndex(new BasicDBObject("_id", 1),new BasicDBObject("background", true)); 

ich auf diese kam link

+0

prüfen diese https://api.mongodb.org/java/3.2/com/mongodb/DBCollection.html, kein Verfahren zur (BasicDBObject, Indexoptions) – achuth

+0

ein Index von Standard gibt es auf '_id' Feld, und Sie können es nicht ändern. Mit Bezug auf Ihren "Mongo Service" meinen Sie Ihren mongodb Service oder Ihre Anwendung? – yaoxing

+0

@yaoxing Anwendungsdienst, nicht Mongo Service. Ja Index auf "_id" ist standardmäßig, aber es läuft im Hintergrund, wenn nicht kann ich es machen Index im Hintergrund erstellen –

Antwort

0

Wenn Sie einen Index im Hintergrund ausführen, wird das Einfügen nicht schneller ausgeführt, im Gegenteil, es wird langsamer ausgeführt. Die Abfrage wird jedoch asynchron ausgeführt, sodass Ihre Anwendung in der Zwischenzeit andere Abfragen ausführen kann.

Sie können folgende Ansätze versuchen, die Leistung auf Bulk-Einsätze

  • Erstellen einer Replik zu verbessern, die auf sekundären Knoten ermöglicht liest. Dies hat Inserts, die auf dem primären Knoten ausgeführt werden, während Lesevorgänge an den sekundären Knoten gerichtet werden. Das Ausführen der Indexierung im Hintergrund hilft in diesem Fall. Es ist wichtig, in diesem Fall das Lesen veralteter Daten zu vermeiden.
  • Erstellen Sie einen neuen Index, der gut mit der Form der Daten funktioniert, die Sie einfügen.
    • Erstellen Sie mehrere Indizes mit einer Variation der Schlüssel in der Sammlung.
    • Führen Sie eine Einfügeabfrage für einen kleinen Datensatz aus. Mongo analysiert alle Indizes, die für die Sammlung verfügbar sind, und wählt diejenige aus, die die -Eigenschaft für die einzufügende Form der Daten am besten erfüllt.
    • Führen Sie db..explain ("executionStats") für die Abfrage aus, um herauszufinden, welcher der Indizes verwendet wird ( ).
    • Entfernen Sie alle anderen Indizes, da diese die Leistung Ihrer Einsätze beeinflussen.
    • Führen Sie Ihre vollständige Abfrage aus und sehen Sie, wie sie mit dem neuen Index funktioniert.
+0

Sinn machen, nette Erklärung. –

0

Wenn Sie Java-API verwenden, hier ist die Referenz für die korrekte Verwendung:

http://api.mongodb.org/java/3.0/com/mongodb/client/MongoCollection.html?_ga=1.119232521.1817714352.1461227368#createIndex-org.bson.conversions.Bson-

http://api.mongodb.org/java/3.0/com/mongodb/client/model/IndexOptions.html

Grundsätzlich müssen Sie die Hintergrundoption korrekt mit den Indexoptionen von api bereitstellen.

+0

ich benutze 3.2.1, erlaubt es mir nicht, siehe meine Bearbeitung in Frage, tue ich muss noch etwas ändern –