슬라이딩 리스트 파티셔닝
슬라이딩 리스트 파티셔닝에 대해 설명합니다.
설명 # 슬라이딩 리스트 파티셔닝 전략은 순차적인 숫자 파티션을 생성하고 해당 수명 주기를 자동으로 관리하는 동적 파티셔닝 접근 방식입니다. 다른 파티셔닝 전략과 달리, 슬라이딩 리스트 파티셔닝은 단순히 증가하는 정수를 파티션 키로 사용하고 새 파티션을 만들 시점과 이전 파티션을 삭제할 시점을 결정하는 커스텀 로직을 제공합니다. 이 전략은 데이터가 처리되었거나 더 이상 필요하지 않은 후(예: 'X'일 이후 또는 크기가 'X' 바이트 초과) 이전 파티션을 안전하게 제거할 수 있는 롤링 윈도우 데이터를 유지해야 하는 테이블에 특히 유용합니다. 워크플로우 # 파티션 관리를 위한 모델 등록 # Gitlab.com 에서 파티션은 애플리케이션 시작 시 생성되지 않으며, 하루에 여러 번 실행되는 _PartitionManagementWorker_에 의해 생성됩니다. 슬라이딩 리스트 파티셔닝을 사용하는 모델은 PartitionManagementWorker가 처리할 수 있도록 Gitlab::Database::Partitioning.register_models 에도 추가해야 합니다. 파티셔닝 블록 정의 # PartitionManager 는 next_partition_if 와 detach_partition_if 를 사용하여 missing_partitions 와 extra_partitions 를 각각 결정합니다. 새 파티션을 추가할 시점과 이전 파티션을 삭제할 시점을 동적으로 결정할 수 있도록 블록을 정의합니다. Note 파티셔닝 블록 내에서 사용되는 필터 조건에 적절한 인덱스가 사용되고 있는지 확인하세요. 예시: class LooseForeignKeys::DeletedRecord < Gitlab::Database::SharedModel include PartitionedTable PARTITION_DURATION = 1 .day partitioned_by :partition , strategy: :sliding_list , next_partition_if: ->(active_partition) do oldest_record_in_partition = LooseForeignKeys : :DeletedRecord .select( :id , :created_at ) .for_partition(active_partition.value) .order( :id ) .limit( 1 ) .take oldest_record_in_partition.present? && oldest_record_in_partition.created_at < PARTITION_DURATION .ago end , detach_partition_if: ->(partition) do ! LooseForeignKeys : :DeletedRecord .for_partition(partition.value) .status_pending .exists? end end 이렇게 하면: 새 파티션이 매일 생성됩니다. 이전 파티션은 모든 레코드가 처리된 후에만 제거됩니다. 시스
