InfoGrab DocsInfoGrab Docs

다중 데이터베이스

GitLab 애플리케이션 데이터베이스를 여러 데이터베이스로 분리하는 방법과 관련 개발 지침을 설명합니다.

GitLab이 더욱 확장될 수 있도록 GitLab 애플리케이션 데이터베이스를 여러 데이터베이스로 분리 했습니다. 주요 데이터베이스는 main , ci , sec 입니다. GitLab은 하나, 둘, 또는 세 개의 데이터베이스로 실행하는 것을 지원합니다. GitLab.com에서는 별도의 main , ci , sec 데이터베이스를 사용하고 있습니다. GitLab 스키마 # 서로 다른 데이터베이스 간에 허용된 패턴을 올바르게 탐지하기 위해 GitLab 애플리케이션은 데이터베이스 딕셔너리 를 구현합니다. 데이터베이스 딕셔너리는 테이블을 gitlab_schema 로 가상 분류하는 기능을 제공하며, 이는 개념적으로 PostgreSQL 스키마 와 유사합니다. CI 분리 기능을 더 잘 격리하기 위해 데이터베이스 스키마를 사용하는 방안 의 일환으로, 복잡한 마이그레이션 절차 때문에 PostgreSQL 스키마를 사용할 수 없다고 결정했습니다. 대신 애플리케이션 수준의 분류 개념을 구현했습니다. GitLab의 각 테이블에는 gitlab_schema 가 할당되어야 합니다: 스키마 설명 비고 gitlab_main Cells / Organizations 스키마 참조 gitlab_main_org Cells / Organizations 스키마 참조 gitlab_main_cell_setting Cells / Organizations 스키마 참조 gitlab_main_cell_local Cells / Organizations 스키마 참조 gitlab_ci ci: 데이터베이스에 저장되는 모든 CI 테이블 (예: ci_pipelines, ci_builds) gitlab_ci_cell_local Cells / Organizations 스키마 참조 gitlab_geo geo: 데이터베이스에 저장되는 모든 Geo 테이블 (예: project_registry, secondary_usage_data) gitlab_internal Rails 및 PostgreSQL의 모든 내부 테이블 (예: ar_internal_metadata, schema_migrations, pg_*) gitlab_pm 패키지 메타데이터를 저장하는 모든 테이블 gitlab_main의 별칭으로, gitlab_sec로 교체 예정 gitlab_sec sec: 데이터베이스에 저장될 모든 보안 및 취약점 기능 테이블 분리 작업 진행 중 gitlab_shared 사용 중단됨, gitlab_shared_cell_local 또는 gitlab_shared_org 참조 gitlab_shared_cell_local Cells / Organizations 스키마 참조 gitlab_shared_org Cells / Organizations 스키마 참조 추가로 분리되는 데이터베이스와 함께 더 많은 스키마가 도입될 예정입니다. 스키마 사용은 사용할 기본 클래스를 강제합니다: ApplicationRecord — gitlab_main_org 용 Ci::ApplicationRecord — gitlab_ci 용 Geo::TrackingBase —