GitLab'ın Postgres Şema Tasarımı Üzerine Notlarım (2022)
(shekhargulati.com)GitLab Postgres Şema Tasarımı Üzerine Notlarım
- GitLab'in Postgres şemasını inceleyerek, kendi tasarladığınız şemayla karşılaştırmak ve GitLab'in şema tanımından iyi uygulama örnekleri öğrenmek istedim.
- GitLab, açık kaynaklı bir DevOps platformudur ve GitHub'a bir alternatiftir; kendi başına barındırma imkanı sunar.
Doğru Birincil Anahtar Türü Kullanmak
- Veritabanı küçükken fark edilmese de, büyüyünce birincil anahtarlar depolama alanını, yazma hızını ve okuma hızını etkiler.
- GitLab, 573 tablodan 380'inde
bigserialbirincil anahtar türünü, 170'ındaserial4türünü, kalan 23'ünde ise bileşik birincil anahtarları kullanır.
İç ve Dış Kimliklerin Kullanımı
- Birincil anahtarları dış dünyaya açmamak iyi bir uygulamadır.
- GitLab,
issues,ci_pipelines,deploymentsveepicsgibi tablolarda hem dahili kimlik (id) hem de harici kimlik (iid) kullanır.
text Veri Tipi ve CHECK Kısıtlama Kullanımı
- GitLab şeması hem
character varying(n)hem detexttürlerini kullanır, ancaktexttürünü daha sık kullanır. texttürünün bir uzunluk kısıtlaması yoktur; uzunluk kısıtlamasıCHECKkullanılarak tanımlanır.
Adlandırma Kuralları
- Tüm tablolar çoğul adlandırılır ve ad alanı sağlamak için modül önekleri kullanılır.
- Tablo ve sütun adları
snake_casekurallarını takip eder.
Zaman Damgalarında Saat Diliminin Kullanımı
- GitLab hem
timestamp with timezonehem detimestamp without timezonetürlerini kullanır. - Sistem işlemleri için
timestamp without timezone, kullanıcı işlemleri içintimestamp with timezonekullanılır.
Yabancı Anahtar Kısıtları
- GitLab, çoğu tabloda yabancı anahtar kısıtları kullanır; ancak
audit_events,abuse_reports,web_hooks_logs,spam_logsgibi bazı tablolarda kullanılmaz.
Büyük Tablolar için Bölümleme
- GitLab, sorgu performansını artırmak için boyutu büyüyebilecek tabloları bölümlemeye tabi tutar.
Trigramlar ve LIKE Aramayı Desteklemek için gin_trgm_ops Kullanımı
- GitLab, verimli arama yapmak için GIN (Generalized Inverted Index) dizinini kullanır.
jsonb Kullanımı
- GitLab şeması, birçok tabloda
jsonbveri türünü kullanır.
Diğer İpuçları
- Değiştirilebilir tablolarda
updated_atgibi denetim alanları kullanılır; değiştirilemeyen günlük tablolarında ise kullanılmaz. - Enumlar, alan tüketimini azaltmak için
character varyingyerinesmallintolarak depolanır.
GN⁺'in Yorumu:
- GitLab'in şema tasarımı, veritabanı tasarımı hakkında önemli içgörüler sunar ve özellikle büyük ölçekli sistemler için şema optimizasyonu konusunda kritik dersler içerir.
- GitLab'in açık kaynak olması, bu şema tasarım kararlarının diğer geliştiricilere kendi projelerinde uygulayabilecekleri pratik örnekler sunmasını sağlar.
- GitLab şemasından öğrenilebilecek en önemli nokta, veri türü seçimi, dizinleme stratejisi, bölümleme ve yabancı anahtar kısıtlarının kullanımı gibi veritabanı performansı ile bakımını doğrudan etkileyen unsurların dikkatlice değerlendirilmesi gerektiğidir.
1 yorum
Hacker News yorumları
Ikarakterinin amacını merak edip bunun veritabanı ile ilgili bir seçim olduğunu anladığını ifade ediyor.