MongoDB

Installation

Installation

Installation auf Debian 12

Beschreibung:

Eine MongoDB auf Debian 12 installieren

Instalaltion:

Vorrausetzungen installieren

apt install gnupg2

Nun die Mongo repo einrichten
Schlüssel eintragen

wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | gpg --dearmor | tee /usr/share/keyrings/mongodb-org-5.0-archive-keyring.gpg >/dev/null

Sources list erweitern

echo "deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-org-5.0-archive-keyring.gpg] https://repo.mongodb.org/apt/debian buster/mongodb-org/5.0 main" | tee /etc/apt/sources.list.d/mongodb-org-5.0.list

apt aktualisieren

apt update

MongoDB installieren

apt-get install -y mongodb-org

Nun noch die Mongodb Starten

systemctl start mongod

und wenn gewünscht gleich einstellen das diese beim Systemstart mit läuft

systemctl enable mongod


 

Scripte

Scripte

Datenbank, Tabelle, Datensätze erstellen, löschen , Datenbank kompirmieren

Beschreibung:

Wir erstellen drei Scripte zum verwalten einer Testdatenbank. Diese scripte können auch als Vorlage um Progragrammtechnisch die Datenbank mit Daten zu füllen.
Das letzte script db_free_space.py, kann überall benutzt werden um die Datenbankgröße zu optimieren.


Allerdings sollte das Script ausgeführt wrerden wenn keiner drin arbeitet. Währenddessen sind Schreibzugriffe blockiert.
Sollte man wissen!

Dazu muss python3 und die python mongo erweiterung installiert sein

apt install python3 python3-pymongo


Inhalt create_db.sh

#!/bin/bash

# Datenbank und Sammlung erstellen
mongosh <<EOF
use meineTestDatenbank
db.createCollection("testTabelle")
EOF

echo "Datenbank und Testtabelle erstellt."

Ausgabe:

MongoDB shell version v5.0.25
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("559ca2a0-399c-412a-9ad9-5120ff4be092") }
MongoDB server version: 5.0.25
================
switched to db meineTestDatenbank
{ "ok" : 1 }
bye
Datenbank und Testtabelle erstellt.


Inhalt fill_data.sh

Python script, mit der Anzahl der Dokumente spielen um die richtige Beleggröße zu bekommen.
Dieses Script schreibt ungefähr 400 kb dazu.

from pymongo import MongoClient, InsertOne
import random

# MongoDB-Client konfigurieren
client = MongoClient('localhost', 27017)

# Datenbank und Sammlung auswählen
db = client['meineTestDatenbank']
collection = db['testTabelle']

# Anzahl der Dokumente, die eingefügt werden sollen
num_docs = 10000

# Liste für Bulk-Insert-Operationen vorbereiten
operations = []

for i in range(num_docs):
    doc = {
        "name": f"Testname {i}",
        "beschreibung": f"Dies ist eine Testbeschreibung mit einer zufälligen Zahl: {random.randint(1, 10000)}",
        "nummer": i
    }
    # Füge die InsertOne-Operation zur Liste hinzu
    operations.append(InsertOne(doc))

    # Führe Bulk-Insert in Chargen aus, um Speicherprobleme zu vermeiden
    if len(operations) == 1000:
        collection.bulk_write(operations)
        operations.clear()  # Liste nach dem Bulk-Insert leeren
        print(f"{i+1} Dokumente eingefügt...")

# Restliche Dokumente einfügen
if operations:
    collection.bulk_write(operations)
    print(f"Die letzten {len(operations)} Dokumente wurden eingefügt.")

print(f"Es wurden insgesamt {num_docs} Dokumente zur 'testTabelle' in 'meineTestDatenbank' hinzugefügt.")

Speicher nach dem einfügen (das script wurde schon mehrmals laufen gelassen deshalb 2 MB Größe)

test> show databases
admin                40.00 KiB
config              108.00 KiB
local                40.00 KiB
meineTestDatenbank    2.74 MiB

Löschen aller eintrage delete_all.py

from pymongo import MongoClient

# MongoDB-Client konfigurieren
client = MongoClient('localhost', 27017)

# Datenbank und Sammlung auswählen
db = client['meineTestDatenbank']
collection = db['testTabelle']

# Alle Dokumente aus der Sammlung entfernen
result = collection.delete_many({})

# Ergebnis ausgeben
print(f"Anzahl der entfernten Dokumente: {result.deleted_count}")

Speicher nach dem löschen

test> show databases
admin                40.00 KiB
config              108.00 KiB
local                40.00 KiB
meineTestDatenbank    2.13 MiB

Speicherplatz freigeben

db_free_space.py

Inhalt

from pymongo import MongoClient

# Konfiguration
db_name = 'meineTestDatenbank'
collection_name = 'testTabelle'

# MongoDB-Client initialisieren
client = MongoClient('localhost', 27017)

# Zugriff auf die Datenbank und Sammlung
db = client[db_name]

# Führe den Compact-Befehl aus
try:
    print(f"Starte Compact-Vorgang für die Sammlung '{collection_name}' in der Datenbank '{db_name}'...")
    result = db.command({'compact': collection_name})
    print("Compact-Vorgang abgeschlossen.")
    print(result)
except Exception as e:
    print(f"Ein Fehler ist aufgetreten: {e}")

# Schließe die Verbindung
client.close()

Speicher nach dem Compacten:

test> show databases
admin               64.00 KiB
config              96.00 KiB
local               64.00 KiB
meineTestDatenbank  24.00 KiB
test>