Datenbanksystem
Datenbanksystem
Abschnitt betitelt „Datenbanksystem“SQL-Datenbankverbindungs-Pooling und Konfiguration. Unterstützt PostgreSQL, MySQL und SQLite.
Entry-Typen
Abschnitt betitelt „Entry-Typen“| Kind | Beschreibung |
|---|---|
db.sql.postgres | PostgreSQL-Datenbank |
db.sql.mysql | MySQL-Datenbank |
db.sql.sqlite | SQLite-Datenbank |
Konfiguration
Abschnitt betitelt „Konfiguration“Standard-Datenbanken (PostgreSQL, MySQL)
Abschnitt betitelt „Standard-Datenbanken (PostgreSQL, MySQL)“version: "1.0"namespace: app.data
entries: - name: main_db kind: db.sql.postgres host: "localhost" port: 5432 database: "myapp" username: "dbuser" password: "dbpass" pool: max_open: 25 max_idle: 5 max_lifetime: "1h" options: sslmode: "disable" lifecycle: auto_start: true - name: cache_db kind: db.sql.sqlite file: "/var/data/cache.db" # :memory: für In-Memory verwenden pool: max_open: 1 max_idle: 1 max_lifetime: "1h" options: cache: "shared" lifecycle: auto_start: trueVerbindungsfelder
Abschnitt betitelt „Verbindungsfelder“Standard-Datenbankfelder
Abschnitt betitelt „Standard-Datenbankfelder“| Feld | Typ | Beschreibung |
|---|---|---|
host | string | Datenbank-Host-Adresse |
port | int | Datenbank-Portnummer |
database | string | Datenbankname |
username | string | Datenbankbenutzer |
password | string | Datenbankpasswort |
pool | object | Connection-Pool-Einstellungen |
options | map | Datenbankspezifische Optionen |
lifecycle | object | Lebenszyklus-Konfiguration |
SQLite-Felder
Abschnitt betitelt „SQLite-Felder“| Feld | Typ | Beschreibung |
|---|---|---|
file | string | Datenbankdateipfad oder :memory: |
pool | object | Connection-Pool-Einstellungen |
options | map | SQLite-spezifische Optionen |
lifecycle | object | Lebenszyklus-Konfiguration |
Umgebungsvariablen-Felder
Abschnitt betitelt „Umgebungsvariablen-Felder“Verwenden Sie das Suffix _env um Werte aus Umgebungsvariablen oder env.variable-Einträgen zu laden:
| Feld | Beschreibung |
|---|---|
host_env | Host aus Umgebungsvariable |
port_env | Port aus Umgebungsvariable |
database_env | Datenbankname aus Umgebung |
username_env | Benutzername aus Umgebung |
password_env | Passwort aus Umgebung |
- name: prod_db kind: db.sql.postgres host_env: "DB_HOST" port_env: "DB_PORT" database_env: "DB_NAME" username_env: "DB_USER" password_env: "app.secrets:db_password" # Referenz auf env.variable-Eintragenv.variable-Einträge für Anmeldedaten. Siehe Umgebung für sicheres Geheimnis-Management.
Connection-Pool
Abschnitt betitelt „Connection-Pool“Konfigurieren Sie das Connection-Pooling-Verhalten. Pool-Einstellungen werden auf Gos database/sql Connection-Pool abgebildet.
| Feld | Typ | Standard | Beschreibung |
|---|---|---|---|
max_open | int | 0 | Maximale offene Verbindungen (0 = unbegrenzt) |
max_idle | int | 0 | Maximale untätige Verbindungen (0 = unbegrenzt) |
max_lifetime | duration | 1h | Maximale Verbindungslebensdauer |
pool: max_open: 25 # Gleichzeitige Verbindungen begrenzen max_idle: 5 # 5 Verbindungen bereithalten max_lifetime: "30m" # Verbindungen alle 30 Minuten recycelnmax_idle kleiner oder gleich max_open. Verbindungen, die max_lifetime überschreiten, werden geschlossen und ersetzt, was bei der Wiederherstellung von veralteten Verbindungen hilft.
DSN-Formate
Abschnitt betitelt „DSN-Formate“Jeder Datenbanktyp konstruiert einen DSN aus der Konfiguration:
PostgreSQL {id=“dsn-postgresql”}
Abschnitt betitelt „PostgreSQL {id=“dsn-postgresql”}“postgres://username:password@host:port/database?sslmode=disableMySQL {id=“dsn-mysql”}
Abschnitt betitelt „MySQL {id=“dsn-mysql”}“username:password@tcp(host:port)/database?charset=utf8mb4SQLite {id=“dsn-sqlite”}
Abschnitt betitelt „SQLite {id=“dsn-sqlite”}“file:/path/to/database.db?cache=shared:memory:?mode=memoryDatenbankoptionen
Abschnitt betitelt „Datenbankoptionen“Häufige datenbankspezifische Optionen:
PostgreSQL {id=“options-postgresql”}
Abschnitt betitelt „PostgreSQL {id=“options-postgresql”}“options: sslmode: "require" # disable, require, verify-ca, verify-full connect_timeout: "10" # Verbindungs-Timeout in Sekunden application_name: "myapp"MySQL {id=“options-mysql”}
Abschnitt betitelt „MySQL {id=“options-mysql”}“options: charset: "utf8mb4" parseTime: "true" # Zeitwerte zu time.Time parsen loc: "Local" # ZeitzoneSQLite {id=“options-sqlite”}
Abschnitt betitelt „SQLite {id=“options-sqlite”}“options: cache: "shared" # shared, private mode: "rwc" # ro, rw, rwc, memory _journal_mode: "WAL" # DELETE, TRUNCATE, PERSIST, MEMORY, WAL, OFFBeispiele
Abschnitt betitelt „Beispiele“PostgreSQL mit SSL
Abschnitt betitelt „PostgreSQL mit SSL“- name: secure_postgres kind: db.sql.postgres host: "db.example.com" port: 5432 database: "production" username: "app_user" password: "${DB_PASSWORD}" pool: max_open: 50 max_idle: 10 max_lifetime: "1h" options: sslmode: "verify-full" sslcert: "/certs/client.crt" sslkey: "/certs/client.key" sslrootcert: "/certs/ca.crt" lifecycle: auto_start: trueMySQL Read Replica
Abschnitt betitelt „MySQL Read Replica“- name: mysql_replica kind: db.sql.mysql host: "replica.db.example.com" port: 3306 database: "app" username: "readonly" password_env: "REPLICA_PASSWORD" pool: max_open: 20 max_idle: 5 max_lifetime: "30m" options: charset: "utf8mb4" parseTime: "true" readTimeout: "30s"SQLite In-Memory
Abschnitt betitelt „SQLite In-Memory“- name: test_db kind: db.sql.sqlite file: ":memory:" pool: max_open: 1 max_idle: 1 options: cache: "shared" mode: "memory"Mehrere Datenbanken Setup
Abschnitt betitelt „Mehrere Datenbanken Setup“entries: # Primäre Datenbank - name: users_db kind: db.sql.postgres host_env: "USERS_DB_HOST" port: 5432 database: "users" username_env: "USERS_DB_USER" password_env: "USERS_DB_PASSWORD" lifecycle: auto_start: true
# Analytics-Datenbank - name: analytics_db kind: db.sql.mysql host_env: "ANALYTICS_DB_HOST" port: 3306 database: "analytics" username_env: "ANALYTICS_DB_USER" password_env: "ANALYTICS_DB_PASSWORD" lifecycle: auto_start: true
# Lokaler Cache - name: cache kind: db.sql.sqlite file: "/var/cache/app.db" lifecycle: auto_start: trueLaufzeitregistrierung
Abschnitt betitelt „Laufzeitregistrierung“Datenbanken können zur Laufzeit mit dem Registry-Modul registriert werden, was dynamische Datenbankkonfiguration basierend auf Anwendungszustand oder externer Konfiguration ermöglicht.
Lua-API
Abschnitt betitelt „Lua-API“Siehe SQL-Modul für die Datenbankoperationen-API.