시간 감쇠 데이터
데이터베이스 확장성 패턴 중 시간 감쇠(time-decay) 데이터의 특성과 GitLab 개발에서의 모범 사례를 설명합니다.
이 문서는 데이터베이스 확장성 워킹 그룹 에서 도입된 *시간 감쇠 패턴(time-decay pattern)*을 설명합니다. 시간 감쇠 데이터의 특성을 살펴보고, 이 맥락에서 GitLab 개발 시 고려해야 할 모범 사례를 제안합니다. 일부 데이터셋은 강한 시간 감쇠 효과의 영향을 받습니다. 즉, 최신 데이터가 오래된 데이터보다 훨씬 더 자주 접근됩니다. 시간 감쇠의 또 다른 측면은, 시간이 지남에 따라 일부 유형의 데이터는 점점 덜 중요해진다는 것입니다. 이는 극단적인 경우에 오래된 데이터를 내구성이 낮은(가용성이 낮은) 스토리지로 이동하거나 심지어 삭제할 수 있음을 의미합니다. 이러한 효과는 일반적으로 제품 또는 애플리케이션의 의미론(semantics)과 연관됩니다. 오래된 데이터에 얼마나 자주 접근하는지, 그리고 오래된 데이터가 사용자나 애플리케이션에 얼마나 유용하거나 필요한지에 따라 정도가 달라질 수 있습니다. 먼저 데이터에 있어서 시간과 관련된 고유한 편향이 없는 엔티티를 생각해 봅시다. 사용자나 프로젝트의 레코드는 생성 시점과 무관하게 동일하게 중요하고 자주 접근될 수 있습니다. 사용자의 id 나 created_at 을 사용하는 것만으로는 관련 레코드가 얼마나 자주 접근되거나 업데이트되는지 예측할 수 없습니다. 반면에, 극단적인 시간 감쇠 효과를 가진 데이터셋의 좋은 예는 사용자 행동을 기록하는 이벤트와 같은 로그 및 시계열 데이터입니다. 이러한 유형의 데이터는 대부분 며칠 또는 몇 주 후에 비즈니스적 용도가 없어지며, 데이터 분석 관점에서도 빠르게 덜 중요해집니다. 어느 시점에 실질적인 가치가 없어질 때까지 애플리케이션의 현재 상태와 점점 더 관련이 없어지는 스냅샷을 나타냅니다. 두 극단의 중간에는, 보존하고 싶은 유용한 정보를 가진 데이터셋이 있지만, 생성 후 초기(짧은) 기간이 지나면 오래된 레코드에 거의 접근하지 않게 됩니다. 시간 감쇠 데이터의 특성 # 우리가 관심을 갖는 데이터셋은 다음과 같은 특성을 보입니다: 데이터셋의 크기 : 상당히 큰 규모입니다. 접근 방법 : 데이터셋에 접근하는 대다수의 쿼리를 시간 관련 차원 또는 시간 감쇠 효과를 가진 범주형 차원으로 필터링할 수 있습니다. 불변성 : 시간 감쇠 상태가 변하지 않습니다. 보존 : 오래된 데이터를 유지할 것인지 여부, 또는 오래된 데이터가 애플리케이션을 통해 사용자에게 계속 접근 가능해야 하는지 여부입니다. 데이터셋의 크기 # 강한 시간 감쇠 효과를 보이는 다양한 크기의 데이터셋이 있을 수 있지만, 이 블루프린트의 맥락에서는 상당히 큰 데이터셋 을 가진 엔티티에 집중하려 합니다. 소규모 데이터셋은 데이터베이스 관련 리소스 사용에 크게 기여하지 않으며, 쿼리에 상당한 성능 저하를 일으키지도 않습니다. 반면, 약 5천만 건 이상의 레코드 또는 100 GB 이상의 크기를 가진 대규모 데이터셋은 정말 작은 데이터 부분집합에 지속적으로 접근하는 데 상당한 오버헤드를 추가합니다. 이러한 경우, 시간 감쇠 효과를 활용하여 활발하게 접근되는 데이터셋을 줄이고자 합니다. 데이터