Zum Inhalt
v26.3

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):
dotnet run --project Dikas.Api.Web -- --seed-history 730

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_daily summiert Brutto/Steuer/Beleganzahl je Tag direkt in CouchDB. Der Endpoint GET /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 _compact und _view_cleanup einplanen — 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).