it-swarm.com.de

MongoDB-Limitspeicher

Ich verwende Mongo zum Speichern von Protokolldateien. Sowohl mongoDB als auch mysql laufen auf derselben Maschine. Die Virtualisierung von mongo env ist keine Option. Ich fürchte, ich werde bald auf Probleme mit der Perfektion stoßen, da die Protokolltabelle sehr schnell wächst. Gibt es eine Möglichkeit, den residenten Speicher für Mongo zu begrenzen, damit nicht der gesamte verfügbare Speicher belegt wird und der Mysql-Server übermäßig verlangsamt wird?

DB-Rechner: Debian 'Lenny' 5

Andere Lösungen (bitte kommentieren):

  • Da wir alle historischen Daten benötigen, können wir keine begrenzten Sammlungen verwenden, aber ich erwäge auch, ein cron-Skript zu verwenden, das alte Daten speichert und löscht

  • Sollte ich auch kleinere Schlüssel in Betracht ziehen, wie in anderen Foren vorgeschlagen?

19
Vlad Zloteanu

Hey Vlad, Sie haben hier ein paar einfache Strategien bezüglich der Protokolle.

Das erste, was Sie wissen sollten, ist, dass Mongo im Allgemeinen viele aufeinanderfolgende Inserts ohne viel RAM verarbeiten kann. Der Grund dafür ist einfach: Sie fügen nur aktuelle Informationen ein oder aktualisieren diese. Die Indexgröße wächst also, aber die Daten werden ständig ausgelagert.

Anders ausgedrückt, Sie können die Verwendung von RAM in zwei Hauptbereiche aufteilen: Index und Daten.

Wenn Sie eine typische Protokollierung ausführen, wird der Datenteil ständig gelöscht, sodass nur der Index wirklich im RAM bleibt.

Das zweite, was Sie wissen sollten, ist, dass Sie das Indexproblem verringern können, indem Sie Protokolle in kleinere Buckets setzen. Denk darüber so. Wenn Sie alle Protokolle in einer Sammlung mit Datumsstempel sammeln (nennen Sie sie logs20101206), können Sie auch die Größe des Index im RAM steuern.

Wenn Sie über Tage hinweg rollen, wird der alte Index von RAM gelöscht und es wird nicht mehr darauf zugegriffen, so dass er einfach wegfällt.

aber ich überlege auch, ein cron-script zu verwenden, das alte daten ablädt und löscht

Diese Protokollierungsmethode nach Tagen hilft auch, alte Daten zu löschen. In drei Monaten, wenn Sie mit den Daten fertig sind, erledigen Sie einfach db.logs20101206.drop() und die Sammlung wird sofort gelöscht. Beachten Sie, dass Sie keinen Speicherplatz freigeben (der Speicherplatz ist bereits vorbelegt). Neue Daten füllen jedoch den leeren Platz aus.

Sollte ich auch kleinere Schlüssel in Betracht ziehen, wie in anderen Foren vorgeschlagen?

Ja.

Tatsächlich habe ich es in meine Datenobjekte eingebaut. Ich greife also mit logs.action oder logs->action auf Daten zu, aber darunter werden die Daten tatsächlich in logs.a gespeichert. Es ist wirklich einfach, mehr Platz für "Felder" als für "Werte" aufzuwenden. Es lohnt sich also, die "Felder" zu verkleinern und an anderer Stelle zu abstrahieren.

13
Gates VP

Bei der Version 3.2+, die die WiredTiger-Engine verwendet, ist die Option --wiredTigerCacheSizeGB für die Frage relevant. Sie können es einstellen, wenn Sie wissen, was Sie genau tun. Ich weiß nicht, ob es am besten ist, lese einfach aus dem Dokument und erhebe es hier.

1
pu.guan

Unter Windows scheint es möglich zu sein, die Speichermenge zu steuern, die MongoDB verwendet, siehe dieses Tutorial bei Captain Codeman:

MongoDB-Speicherverbrauch unter Windows ohne Virtualisierung begrenzen

0
Kdeveloper