데이터 일관성
MongoDB는 애플리케이션을 최적화하기 위해 데이터를 정규화하거나 복제할 수 있는 유연성을 제공합니다. 스키마에서 데이터를 복제하는 경우, 여러 컬렉션에서 복제된 데이터를 일관되게 유지할 방법을 결정해야 합니다. 일부 애플리케이션은 중복된 데이터를 즉시 일관되게 만들어야 하는 반면, 다른 애플리케이션은 오래된 데이터 읽기를 용인할 수 있습니다.
사용 사례
다음과 같이 애플리케이션에서 데이터 일관성을 적용하는 방법에는 여러 가지가 있습니다.
메서드 | 설명 | 성능에 미치는 영향 | 사용 사례 |
---|---|---|---|
여러 컬렉션에 대한 업데이트는 단일 원자 조작으로 이루어집니다. | 읽기 경합으로 인해 잠재적으로 높음 | 애플리케이션은 항상 최신 데이터를 반환해야 하며 읽기 작업이 많은 기간 동안 성능 저하를 견딜 수 있어야 합니다. | |
단일 컬렉션에 관련 데이터를 포함하도록 애플리케이션 스키마를 수정합니다. | 낮음에서 보통, 문서 크기와 인덱스에 따라 다름 | 애플리케이션은 항상 관련 데이터를 동시에 읽고 업데이트합니다. 이 솔루션은 스키마를 간소화하고 $lookup 작업의 필요성을 방지합니다. | |
한 컬렉션에서 업데이트가 발생하면 트리거가 자동으로 다른 컬렉션을 업데이트합니다. | 낮음~보통(트리거된 이벤트 처리가 지연될 가능성 있음) | 사용자의 애플리케이션은 약간 오래된 데이터 읽기를 허용할 수 있습니다. 업데이트 직후 트리거가 두 번째 컬렉션 업데이트를 완료하기 전에 쿼리를 실행하면 사용자가 오래된 데이터를 볼 수 있습니다. |
데이터 일관성을 적용하는 가장 좋은 방법은 애플리케이션에 따라 다릅니다. 각 접근 방식의 이점 및 구현에 대한 자세한 내용은 해당 설명서 페이지를 참조합니다.
작업
애플리케이션에서 데이터 일관성을 적용하려면 다음 페이지를 참조하세요.
세부 정보
다음 요소는 데이터 일관성을 적용하는 방법에 영향을 줄 수 있습니다.
데이터 부실
애플리케이션이 최신 데이터를 반환하는 것이 얼마나 중요한지 생각해 보세요. 일부 애플리케이션은 사용자에게 영향을 주지 않으면서 몇 분 또는 몇 시간이 지난 데이터를 반환할 수 있습니다.
예를 들어, 전자 상거래 애플리케이션에서 사용자는 항목이 사용 가능한지 여부를 즉시 알아야 합니다. 이 정보는 자주 업데이트해야 하는 경우에도 가능한 한 일관성 있게 유지하는 것이 이상적입니다.
반면, 분석 쿼리는 일반적으로 약간 오래된 데이터를 읽을 것으로 예상됩니다. 분석 데이터를 완전히 일관되게 유지하는 것은 중요하지 않습니다.
오래된 데이터에 대한 애플리케이션의 허용 범위는 데이터 일관성을 가장 잘 유지하는 방법에 영향을 미칩니다. 여러 컬렉션에서 데이터를 자주 업데이트하면 사용자가 오래된 데이터를 읽을 위험이 줄어듭니다. 그러나 자주 업데이트하면 애플리케이션 성능에 부정적인 영향을 미칠 수 있습니다. 데이터 일관성을 적용할 때는 사용자의 요구와 성능에 미치는 영향의 균형을 맞춰야 합니다.
참조 무결성
참조 무결성은 객체가 삭제되면 해당 개체에 대한 모든 참조도 삭제되도록 보장합니다.
예를 들어 애플리케이션에는 products
컬렉션과 products
컬렉션에 대한 참조를 포함하는 warehouse
컬렉션이 있습니다. products
컬렉션에서 제품을 삭제하면 warehouse
컬렉션의 해당 참조도 삭제되어야 합니다.
스키마에서 참조 무결성이 필요한 경우 애플리케이션에 로직을 통합하여 참고를 일관되게 유지하세요. 존재하지 않는 참조를 쿼리하려고 할 때 최소한 애플리케이션 로직에서는 오류가 발생하지 않아야 합니다.