Dieses Projekt implementiert verschiedene MongoDB Datenbankoperationen als Teil der M165 Kursanforderungen.
- Python 3.x
- MongoDB Server läuft auf
192.168.1.157:27017
- Python Bibliotheken (siehe requirements.txt)
pip install -r requirements.txt
# Umgebungsvariable setzen und Anwendungen starten
# Oder manuell Umgebungsvariable setzen
export MONGODB_URI='mongodb://192.168.1.157:27017/'
# Command Prompt
setup.bat
# PowerShell
.\setup.ps1
# Oder manuell (CMD)
set MONGODB_URI=mongodb://192.168.1.157:27017/
Siehe auch: WINDOWS_SETUP.md für detaillierte Windows-Anweisungen.
ODM (Object Document Mapping) ist eine Programmiertechnik, die eine Brücke zwischen Dokumentendatenbanken (wie MongoDB) und objektorientierten Programmiersprachen (wie Python) schlägt.
- Daten-Mapping: Konvertiert zwischen Datenbankdokumenten und Programmobjekten
- Schema-Validierung: Stellt Datenintegrität und -struktur sicher
- Query-Abstraktion: Bietet objektorientierte Methoden zur Datenbankabfrage
- Beziehungsmanagement: Verwaltet Beziehungen zwischen verschiedenen Dokumenttypen
- Typkonvertierung: Konvertiert automatisch Datentypen zwischen Datenbank und Anwendung
Beliebte Python ODMs für MongoDB sind Mongoengine und Beanie.
Das database_explorer.py
Skript bietet eine interaktive Kommandozeilen-Schnittstelle zum Durchsuchen von MongoDB Datenbanken, Collections und Dokumenten.
- Listet alle verfügbaren Datenbanken auf
- Durchsucht Collections innerhalb ausgewählter Datenbanken
- Zeigt Dokument-IDs innerhalb von Collections an
- Zeigt vollständigen Dokumentinhalt an
- Behandelt Navigation und Fehlerfälle
- Benutzerfreundliche Oberfläche mit ordentlicher Fehlerbehandlung
python database_explorer.py
- Datenbanken → Datenbank nach Namen auswählen
- Collections → Collection nach Namen auswählen
- Dokumente → Dokument nach ID auswählen
- Inhalt → Dokumentdetails anzeigen, beliebige Taste für Rückkehr
Das restaurant_crud.py
Skript implementiert umfassende CRUD (Create, Read, Update, Delete) Operationen für Restaurantdaten.
- Zeigt alle eindeutigen Stadtbezirke ohne Duplikate an
- Verwendet MongoDB's
distinct()
Methode für effiziente Abfragen
- Zeigt die top 3 Restaurants mit den höchsten Durchschnittsbewertungen
- Verwendet MongoDB Aggregation Pipeline mit
$unwind
,$group
und$sort
- Findet das Restaurant, das "Le Perigord" geografisch am nächsten liegt
- Verwendet MongoDB's
$geoNear
Operator für standortbasierte Abfragen
- Suche nach Restaurantname und/oder Küchentyp
- Teilweise Übereinstimmung mit Regex-Mustern
- Optionale Suchkriterien (leere Felder werden ignoriert)
- Groß-/Kleinschreibung wird ignoriert
- Neue Bewertungen zu Restaurants hinzufügen
- Integration mit Suchergebnissen für einfache Bewertung
- Speichert Bewertungen mit aktuellem Zeitstempel
- Validiert Eingabedaten
python restaurant_crud.py
Das environment_demo.py
Skript demonstriert die sichere Handhabung von Datenbank-Anmeldedaten mit Umgebungsvariablen.
- PATH Variable lesen: Demonstriert das Lesen und Parsen der PATH Umgebungsvariable
- MongoDB URI Sicherheit: Zeigt sichere Connection-String Handhabung
- Best Practices: Erklärt Sicherheitsprinzipien für Anmeldedatenmanagement
- Niemals Anmeldedaten hardcoden im Quellcode
- Umgebungsvariablen verwenden für sensible Daten
- Konfigurationsmanagement für Produktionsumgebungen
- Versionskontrolle Sicherheit (.env zu .gitignore hinzufügen)
# Umgebungsvariable setzen
export MONGODB_URI='mongodb://192.168.1.157:27017/'
# Umgebungsvariablen Funktionalität testen
python environment_demo.py
Zu ~/.bashrc
oder ~/.zshrc
hinzufügen:
export MONGODB_URI='mongodb://192.168.1.157:27017/'
Das Power Monitoring System verfolgt CPU und RAM Nutzung und speichert die Daten in MongoDB zur Analyse.
Die Power
Klasse speichert Systemstatistiken mit diesen Attributen:
- CPU Nutzung: CPU Prozent Auslastung
- RAM Total: Gesamter Systemspeicher in Bytes
- RAM Verwendet: Verwendeter Speicher in Bytes
- Zeitstempel: Wann die Messung gemacht wurde
Konstruktor Verhalten:
- Wenn keine Parameter gegeben → automatisch aktuelle Systemstatistiken messen
- Wenn Parameter gegeben → gegebene Werte verwenden
- Zeitstempel automatisch auf aktuelle Zeit gesetzt wenn nicht gegeben
Das power_monitor.py
Skript bietet kontinuierliche Systemüberwachung:
- Echtzeit Überwachung: Sammelt Statistiken jede Sekunde
- Datenbank Speicherung: Speichert Messungen automatisch in MongoDB
- Log Management: Hält maximal 10.000 Logs (entfernt automatisch die ältesten)
- System Information: Zeigt CPU Kerne, RAM Kapazität an
- Datenbank Statistiken: Zeigt Überwachungshistorie
python power_monitor.py
Das power_grapher.py
Skript erstellt interaktive Grafiken mit matplotlib:
- Aktuelle Aktivität: Letzte 1-4 Stunden detaillierte Überwachung
- Zusammenfassungsstatistiken: Tages-/Wochenübersicht mit Durchschnittswerten
- Dashboard Ansicht: Umfassende Leistungsübersicht
- Benutzerdefinierter Zeitbereich: Benutzerdefinierte Zeiträume
- Export Optionen: Grafiken als PNG Dateien speichern
- Timeline Plots: CPU und RAM Nutzung über Zeit
- Verteilungshistogramme: Nutzungsmuster Analyse
- Gestapelte Flächendiagramme: Speicherzuteilung Visualisierung
- Dual-Achsen Plots: CPU vs RAM Vergleich
- Statistische Zusammenfassungen: Mittelwert, Maximum, Minimum, Standardabweichung
python power_grapher.py
- Interaktives Menü: Visualisierungstyp wählen
- Mehrere Zeitskalen: Stunden, Tage, Wochen
- Professioneller Stil: Saubere, lesbare Grafiken
- Statistische Analyse: Automatische Berechnung von Metriken
- Export Fähigkeit: Grafiken für Berichte speichern
Das joke_dao.py
Skript demonstriert das Data Access Object (DAO) Pattern für Witz-Management.
- text: Text des Witzes
- category: Liste von Kategorien (z.B. ["Wortspiel", "Geister"])
- author: Verfasser des Witzes
- insert: Neuen Witz hinzufügen
- get_category: Alle Witze einer Kategorie abrufen
- delete: Witz anhand ID löschen
- update: Witz bearbeiten (erweiterte Funktionalität)
python joke_dao.py
Das gridfs_demo.py
Skript implementiert MongoDB GridFS für Datei-Management und Fotoalbum-Funktionalität.
- Datei Speicherung: Files in MongoDB GridFS speichern
- Wiederherstellung: Gespeicherte Files extrahieren
- Metadaten: Zusätzliche Informationen zu Files
- Collection Struktur: fs.files und fs.chunks Collections
- Album Management: Fotos nach Alben organisieren
- Metadaten Support: Album-Zugehörigkeit und Beschreibungen
- Batch Download: Ganze Alben herunterladen
- Album Auflistung: Verfügbare Alben anzeigen
- Rohdaten: Base64 BSON Binary Format
- Chunks: Große Files werden automatisch aufgeteilt
- Verbindung: files_id verknüpft fs.files mit fs.chunks
python gridfs_demo.py
Das polygon_visualizer.py
Skript erstellt grafische Darstellungen von MongoDB neighborhood Polygonen mit Pillow.
- Einzelne Polygone: Spezifische Neighborhoods visualisieren
- Alle Polygone: Komplette neighborhood Übersicht
- Koordinaten Normalisierung: Automatische Skalierung für Bildgröße
- Pillow Integration: Professionelle Grafik-Erstellung
- Koordinaten: GeoJSON Polygon-Daten aus neighborhoods Collection
- Normalisierung: Skalierung auf Bildschirmauflösung
- Farbcodierung: Verschiedene Farben pro Polygon
- Export: PNG Dateien für weitere Verwendung
python polygon_visualizer.py
Das jukebox.py
Skript implementiert ein vollständiges Musikverwaltungs- und Abspielsystem.
- name: Titel des Songs (erforderlich)
- artist: Interpret (erforderlich)
- album: Album (optional)
- genre: Musikgenre (optional)
- year: Erscheinungsjahr (optional)
- Song hinzufügen: Neue Musikstücke in Datenbank speichern
- Song bearbeiten: Bestehende Songs modifizieren
- Song löschen: Songs aus Datenbank entfernen
- Volltext-Suche: Nach allen Attributen suchen
- Intelligente Suche: Groß-/Kleinschreibung ignorieren, Teilübereinstimmungen
- Kombinierte Suche: Mehrere Suchkriterien gleichzeitig
- Playlist Management: Songs in Abspielliste hinzufügen
- FIFO Wiedergabe: Songs in Reihenfolge abspielen
- Zufallswiedergabe: Wenn Playlist leer, zufälligen Song spielen
- Case-insensitive: "beatles" findet "The Beatles"
- Teilstring: "Wall" findet "Another Brick in the Wall"
- Multi-Parameter: Artist="Beatles" + Name="Back" findet "Get Back"
python jukebox.py
Anwendung | Zweck | Hauptfunktionen |
---|---|---|
database_explorer.py |
Datenbank Browser | DB/Collections/Dokumente navigieren |
restaurant_crud.py |
Restaurant Operationen | Suche, Bewertungen, geografische Abfragen |
environment_demo.py |
Sicherheits Demo | Umgebungsvariablen, PATH lesen |
power_monitor.py |
System Überwachung | CPU/RAM Verfolgung, automatische Protokollierung |
power_grapher.py |
Datenvisualisierung | Interaktive Grafiken, Statistiken |
joke_dao.py |
DAO Pattern Demo | Witz-Management mit CRUD Operationen |
gridfs_demo.py |
File Storage | GridFS, Fotoalbum, Metadaten |
polygon_visualizer.py |
Geografische Visualisierung | Neighborhood Polygone, Pillow Grafiken |
jukebox.py |
Musik Management | Song-Verwaltung, Playlist, Player |
m165_adrian/
├── app.py # Ursprünglicher MongoDB Verbindungstest
├── database_explorer.py # Datenbank Browser Anwendung
├── restaurant_crud.py # Restaurant CRUD Operationen
├── environment_demo.py # Umgebungsvariablen Demonstration
├── power_monitor.py # System Überwachungsanwendung
├── power_grapher.py # Graph Visualisierungsanwendung
├── joke_dao.py # DAO Pattern für Witz-Management
├── gridfs_demo.py # GridFS File Storage und Fotoalbum
├── polygon_visualizer.py # Geografische Polygon Visualisierung
├── jukebox.py # Musik Management und Player System
├── demo.py # Setup Test und Demonstration
├── setup.sh # Schnelles Setup Skript
├── requirements.txt # Python Abhängigkeiten (inkl. Pillow)
├── README.md # Diese Dokumentation
└── oop_basic/ # Objektorientierte Beispiele
├── app.py # Buchverwaltung mit MongoDB
├── buch.py # Buch Klassendefinition
└── uuid.py # UUID Hilfsfunktionen
connection_string = "mongodb://192.168.1.157:27017/" # ❌ Hardcoded
connection_string = os.getenv('MONGODB_URI', 'default_fallback') # ✅ Environment variable
- Database: Container for collections (like
restaurants
,system_monitoring
) - Collection: Group of documents (like
restaurants
collection,power_stats
) - Document: Individual record in BSON format (like a restaurant entry, power measurement)
- Find: Basic document retrieval
- Distinct: Get unique values
- Aggregation: Complex data processing pipelines
- Geospatial: Location-based queries
- Regex: Pattern matching for text search
- Indexing: Performance optimization for timestamps
- Create: Insert new documents (power stats, ratings)
- Read: Query and retrieve documents (search, browse)
- Update: Modify existing documents (add ratings)
- Delete: Remove documents (log cleanup)
- Automatic Cleanup: Maintains 10,000 log limit
- Indexed Queries: Timestamp indexing for fast retrieval
- Batch Operations: Efficient bulk insertions
- Memory Management: Optimized data structures
- Data Sampling: Intelligent data point selection
- Lazy Loading: Load data only when needed
- Caching: Reuse calculated statistics
- Progressive Rendering: Handle large datasets
Run the comprehensive test suite:
# Test all components
python demo.py
# Test environment variables
python environment_demo.py
# Quick setup and test
./setup.sh
Alle Anwendungen sind bewusst maximal einfach gehalten:
- Minimaler Code: Nur essenzielle Funktionalität
- Direkte Verbindungen: Keine komplexe Fehlerbehandlung
- Einfache Menüs: Reduzierte Optionen
- Klare Struktur: Verständliche, kurze Funktionen
- Deutsche Benutzeroberfläche: Für bessere Verständlichkeit
- Power Grapher: Von 7 auf 4 Menüoptionen reduziert
- Power Monitor: Vereinfachte Datenbankstatistiken
- Environment Demo: Kompakte Umgebungsvariablen-Demonstration
- Demo Script: Essenzielle Tests ohne komplexe Validierung
- OOP Beispiele: Minimale Buchverwaltung mit direkter MongoDB-Interaktion
# Production environment variables
export MONGODB_URI='mongodb://username:password@production-server:27017/database'
export MONITORING_INTERVAL=60 # Seconds between measurements
export MAX_LOGS=50000 # Maximum log entries
- ✅ Environment variables for credentials
- ✅ Input validation and sanitization
- ✅ Error handling without information leakage
- ✅ Connection pooling for performance
- ✅ Logging for audit trails
- ✅ Rate limiting for API endpoints