Datenbank (CouchDB / SQLite / SQL Server)¶
DiKAS unterstützt drei Datenbank-Provider. Der Provider wird in appsettings.json
(Database.Provider) oder per Umgebungsvariablen konfiguriert — der Code ist identisch,
alle Funktionen stehen mit jedem Provider zur Verfügung.
| Provider | Einsatz |
|---|---|
| CouchDb (Standard) | Server-/Cloud-Betrieb, Multi-Tenant, Replikation |
| Sqlite | Einzelplatz, Android-App, Demo/Entwicklung |
| SqlServer | Bestehende Microsoft-Infrastruktur |
Konfiguration¶
{
"Database": { "Provider": "CouchDb" },
"CouchDb": {
"ServerUrl": "http://localhost:5984",
"DatabasePrefix": "dikas",
"MainDatabase": "main"
}
}
Umgebungsvariablen überschreiben die Datei — praktisch für Docker und Tests:
| Variable | Bedeutung |
|---|---|
Database__Provider |
CouchDb, Sqlite oder SqlServer |
COUCHDB_URL |
Server-URL, z.B. http://192.168.1.10:5984 |
COUCHDB_USER / COUCHDB_PASSWORD |
Zugangsdaten |
COUCHDB_PREFIX |
Datenbank-Präfix (je Installation/Mandant eindeutig) |
Beim ersten Start legt DiKAS die Datenbanken ({prefix}_maindb, {prefix}_gastrocurrent),
das Design-Dokument mit allen Views und — auf leerer Datenbank — die Demo-Daten
automatisch an.
Demo-Daten und Historie¶
- Auto-Seed: Eine leere Datenbank (SQLite oder CouchDB) wird beim Start mit Demo-Stammdaten gefüllt (Artikel, Personal, Tische, Kunden).
- Historie generieren (für Tests/Auswertungen):
erzeugt realistische Belege, Schichten und Tagesabschlüsse für die angegebene Anzahl Tage (Bulk-Schreibrate ≈ 760 Dokumente/s). Beleg-/Schicht-/Abschluss-Nummern werden fortgeschrieben, laufender Betrieb schließt nahtlos an.
Performance (CouchDB)¶
Die wichtigsten Stellschrauben aus dem Lasttest mit 2 Jahren Historie (34.500 Belege):
- Datums-Range statt Full-Scan: Alle Berichte und operativen Abfragen laden Belege
über die View
bybizdate_docs(Geschäftstags-Bereich). Kurze Zeiträume sind damit unabhängig von der Datenbankgröße schnell. - Vorverdichtete Tagesumsätze: Die Map/Reduce-View
revenue_dailysummiert Brutto/Steuer/Beleganzahl je Tag direkt in CouchDB. Der EndpointGET /api/v1/reports/daily-aggregate?startDate=…&endDate=…liefert 2 Jahre Tagesumsätze in ~0,1 s — ideal für Dashboards. - Slow-Query-Log: View-Zugriffe über 1 s erscheinen als Warning im Log (View, Zeilenzahl, Dauer, URL) und zeigen teure Abfragen sofort an.
- Wartung: Nach großen Datenimporten
_compactund_view_cleanupeinplanen — die Dokument-Views halten eine Kopie der Belege im Index (Speicher gegen Tempo).
Cloud-Synchronisation¶
Lokale Installationen können mit der zentralen Cloud-CouchDB synchronisieren. Die
Verbindung wird beim Serverstart automatisch aus der Lizenz (systemlic) aufgelöst:
Benutzer = SyncLink (lowercase), Passwort = SyncLink, Remote-Datenbank =
{DatabaseName}_{db}. Eine manuell gefüllte Sync-Sektion in appsettings.json
übersteuert die Lizenz. Verwaltung und Status: Admin → Einstellungen → System →
Cloud-Sync (Support-Login).
| Modus | Mechanismus |
|---|---|
| CouchDb (lokal) | Native CouchDB-Replikation: kontinuierliche Push+Pull-Einträge in _replicator für {prefix}_maindb und {prefix}_gastrocurrent (ID-Muster {prefix}_{db}_push / _pull) |
| Sqlite / SqlServer | Eigener Sync-Service: Push/Pull ausgewählter Dokumenttypen im Intervall (Konflikte: Last-Write-Wins) |
| Cloud Multi-Tenant | Keine Synchronisation — Geräte arbeiten direkt auf der zentralen Datenbank |
Beim Einrichten der nativen Replikation werden veraltete _replicator-Einträge
entfernt, die auf dieselben Datenbanken zeigen, aber nicht mehr der aktuellen
Konfiguration entsprechen (z.B. nach Wechsel von SyncLink oder Datenbank-Name).
Fehlt der SyncLink in der Lizenz, werden die eigenen Einträge gelöscht — die
Replikation ist dann deaktiviert. Der Job-Status (_scheduler/docs) wird auf der
Cloud-Sync-Seite angezeigt; bei Verbindungsfehlern versucht der Server die
Einrichtung alle 5 Minuten erneut.
SQLite-Hinweise¶
- Datenbankdatei:
Dikas.Api.Web/dikas.db(im Content-Root, unabhängig vom Arbeitsverzeichnis). - Schema-Migrationen laufen beim Start automatisch (EF Core).
- Für den Umzug zu CouchDB: Backup erstellen und in eine CouchDB-Installation zurückspielen (siehe Backup & Restore).