Catatan Saya tentang Desain Skema Postgres GitLab (2022)
(shekhargulati.com)Catatan Saya tentang Desain Skema Postgres GitLab
- Dengan mempelajari skema Postgres GitLab, saya ingin membandingkannya dengan skema yang saya rancang sendiri dan mempelajari praktik terbaik dari definisi skema GitLab.
- GitLab adalah platform DevOps open source, alternatif GitHub, dan dapat di-host sendiri.
Penggunaan Tipe Kunci Utama yang Tepat
- Saat database masih kecil, hal ini tidak terlalu terlihat, tetapi seiring pertumbuhan, kunci utama memengaruhi penggunaan ruang penyimpanan, kecepatan tulis, dan kecepatan baca.
- Dari 573 tabel, GitLab menggunakan tipe kunci utama
bigserialpada 380 tabel,serial4pada 170 tabel, dan 23 sisanya menggunakan kunci utama komposit.
Penggunaan ID Internal dan Eksternal
- Praktik yang baik adalah tidak mengekspos kunci utama ke dunia luar.
- GitLab menggunakan baik
id(ID internal) maupuniid(ID eksternal) pada tabel sepertiissues,ci_pipelines,deployments, danepics.
Penggunaan tipe data text dan Constraint CHECK
- Skema GitLab menggunakan
character varying(n)dantext, tetapi lebih sering menggunakan tipetext. - Tipe
texttidak memiliki batasan panjang, dan batasan panjangnya didefinisikan dengan menggunakanCHECK.
Konvensi Penamaan
- Semua tabel menggunakan bentuk jamak dan memberi ruang nama dengan menggunakan awalan nama modul.
- Nama tabel dan kolom mengikuti aturan snake_case.
Penggunaan Zona Waktu pada Timestamp
- GitLab menggunakan
timestamp with timezonedantimestamp without timezone. - Untuk pekerjaan sistem, GitLab menggunakan
timestamp without timezone, dan untuk pekerjaan pengguna menggunakantimestamp with timezone.
Constraint Kunci Asing
- GitLab menggunakan constraint kunci asing pada sebagian besar tabel, tetapi pada beberapa tabel seperti
audit_events,abuse_reports,web_hooks_logs, danspam_logs, GitLab tidak menggunakannya.
Partisi pada Tabel Besar
- GitLab melakukan partisi pada tabel-tabel yang dapat membengkak agar performa query meningkat.
Dukungan Kasus Penggunaan Pencarian LIKE dengan Trigram dan gin_trgm_ops
- GitLab menggunakan indeks GIN (Generalized Inverted Index) untuk melakukan pencarian yang efisien.
Penggunaan jsonb
- Skema GitLab menggunakan tipe data
jsonbdi beberapa tabel.
Tip Lainnya
- Tabel yang dapat diperbarui menggunakan field audit seperti
updated_at, sedangkan pada tabel log yang tidak dapat diperbarui field tersebut tidak digunakan. - Enum disimpan sebagai
smallintalih-alihcharacter varyinguntuk menghemat ruang.
Pendapat GN⁺:
- Desain skema GitLab memberikan wawasan mendalam tentang desain basis data dan memuat pelajaran penting tentang optimasi skema untuk sistem berskala besar.
- Karena GitLab bersifat open source, keputusan desain skema semacam ini memberi contoh praktis yang dapat diadopsi pengembang lain untuk proyek mereka.
- Hal yang bisa dipelajari dari skema GitLab adalah bahwa pemilihan tipe data, strategi pengindeksan, partisi, dan penggunaan constraint kunci asing sangat memengaruhi kinerja dan pemeliharaan basis data sehingga perlu dipertimbangkan dengan cermat.
1 komentar
Komentar Hacker News