Meine Notizen zum GitLab-Postgres-Schema-Design
(shekhargulati.com)Meine Notizen zum GitLab-Postgres-Schema-Design
- Indem ich mir das Postgres-Schema von GitLab anschaue, kann ich es mit meinem eigenen Schema vergleichen und Best Practices aus GitLabs Schemadefinition ableiten.
- GitLab ist eine Open-Source-DevOps-Plattform, eine Alternative zu GitHub, die selbst gehostet werden kann.
Richtige Verwendung von Primärschlüsseltypen
- Wenn eine Datenbank klein ist, fällt das kaum auf, mit dem Wachstum wirken sich Primärschlüssel jedoch auf Speicherplatz, Schreibgeschwindigkeit und Lesegeschwindigkeit aus.
- Von 573 Tabellen verwendet GitLab
bigserialals Primärschlüsseltyp in 380 Tabellen,serial4in 170, und die übrigen 23 nutzen zusammengesetzte Primärschlüssel.
Verwendung interner und externer IDs
- Es ist eine gute Praxis, Primärschlüssel nicht nach außen hin offenzulegen.
- GitLab verwendet in Tabellen wie
issues,ci_pipelines,deploymentsundepicssowohl interne IDs (id) als auch externe IDs (iid).
Verwendung von text-Datentypen und CHECK-Einschränkungen
- Das GitLab-Schema verwendet sowohl
character varying(n)als auchtext, wobei estexthäufiger nutzt. - Der Datentyp
texthat keine Längenbeschränkung; GitLab definiert die Längenbeschränkung stattdessen mitCHECK.
Namenskonventionen
- Alle Tabellen sind im Plural benannt und nutzen Modulnamenpräfixe, um Namespaces bereitzustellen.
- Tabellen- und Spaltennamen folgen der
snake_case-Konvention.
Zeitzonennutzung bei Timestamps
- GitLab verwendet sowohl
timestamp with timezoneals auchtimestamp without timezone. - Für Systemvorgänge wird
timestamp without timezoneverwendet, für Benutzeraktivitätentimestamp with timezone.
Fremdschlüssel-Constraints
- GitLab nutzt Fremdschlüssel-Constraints in den meisten Tabellen, in einigen wie
audit_events,abuse_reports,web_hooks_logsundspam_logsjedoch nicht.
Partitionierung großer Tabellen
- GitLab partitioniert Tabellen, die im Laufe der Zeit groß werden können, um die Abfrageleistung zu verbessern.
Unterstützung von LIKE-Suchfällen mit Trigrammen und gin_trgm_ops
- GitLab nutzt GIN(Generalized Inverted Index)-Indizes, um eine effiziente Suche bereitzustellen.
Einsatz von jsonb
- Das GitLab-Schema verwendet den Datentyp
jsonbin mehreren Tabellen.
Weitere Tipps
- Änderbare Tabellen haben Audit-Felder wie
updated_at, unveränderliche Log-Tabellen dagegen nicht. - Enums werden als
smallintstattcharacter varyinggespeichert, um Platz zu sparen.
GN⁺-Meinung:
- Das GitLab-Schema-Design liefert Einblicke in die Datenbankgestaltung und beinhaltet wichtige Lehren, insbesondere zur Schema-Optimierung für Großsysteme.
- Da GitLab Open Source ist, liefern solche Schema-Entscheidungen praktische Beispiele, die andere Entwickler in ihren eigenen Projekten übernehmen können.
- Was man aus dem GitLab-Schema lernen kann, ist, dass Datentypauswahl, Indexierungsstrategie, Partitionierung und der Einsatz von Fremdschlüssel-Constraints zu Aspekten beitragen, die die Datenbankleistung und Wartbarkeit maßgeblich beeinflussen.
1 Kommentare
Hacker News Kommentare
Iin diesen CI-Variablen und versteht es dann als eine datenbankbezogene Designentscheidung.