데이터베이스 레코드의 의미 있는 버전 관리
데이터베이스 레코드의 의미 있는 버전 관리는 필터링 및 정렬에 복잡성을 도입합니다. 데이터베이스는 의미 있는 버전을 기본적으로 이해하지 못하기 때문에 데이터베이스의 별도 열에 버전 컴포넌트를 추출하는 것이 필요합니다. 이 프로세스를 보다 쉽게 만들기 위해 SemanticVersionable 모듈이 도입되었습니다.
설정 지침
SemanticVersionable을 사용하려면 먼저 데이터베이스 마이그레이션을 만들어야 합니다. 이를 위해 테이블에 필요한 열을 추가하는 것이 필요합니다. 필요한 열은 semver_major
, semver_minor
, semver_patch
, 그리고 semver_prerelease
입니다. 버전에 v
접두어를 추가하려면 semver_prefixed
열을 포함하면 됩니다. 예를 들어, 다음과 같이 보일 것입니다:
class AddVersionPartsToModelVersions < Gitlab::Database::Migration[2.2]
enable_lock_retries!
milestone '16.9'
def up
add_column :ml_model_versions, :semver_major, :integer
add_column :ml_model_versions, :semver_minor, :integer
add_column :ml_model_versions, :semver_patch, :integer
add_column :ml_model_versions, :semver_prerelease, :text
add_column :ml_model_versions, :semver_prefixed, :boolean, default: false
end
def down
remove_column :ml_model_versions, :semver_major, :integer
remove_column :ml_model_versions, :semver_minor, :integer
remove_column :ml_model_versions, :semver_patch, :integer
remove_column :ml_model_versions, :semver_prerelease, :text
remove_column :ml_model_versions, :semver_prefixed, :boolean
end
end
데이터베이스에 열이 추가되면 해당 모듈을 모델에 포함시켜 모듈을 활성화할 수 있습니다. 예를 들어:
module Ml
class ModelVersion < ApplicationRecord
include SemanticVersionable
...
end
end
이 모듈은 기본적으로 의미 있는 버전을 유효성 검사하도록 구성되어 있습니다.
정렬
이 관련은 의미 있는 버전으로 정렬하기 위해 두 가지 스코프를 제공합니다:
scope :order_by_semantic_version_desc, -> { order(semver_major: :desc, semver_minor: :desc, semver_patch: :desc)}
scope :order_by_semantic_version_asc, -> { order(semver_major: :asc, semver_minor: :asc, semver_patch: :asc)}
필터링 및 검색
미정