업무를 하면서 데이터베이스 설계시에는 고려하지 않았던 문제가 데이터 베이스 의 크기가 매우 커졌을때 발생했습니다.
필요한 데이터를 Select 쿼리를 실행시키면 수행시간이 너무 오래걸려 웹 시각화 쪽에서 문제가 생겼습니다.
그래서 데이터베이스의 크기가 매우 커졌을 경우 어떻게 처리해야 하는지에 대해 알아보겠습니다.
하둡의 맵리듀스(MapReduce)같은 대용량 데이터를 처리하기 위한 분산 처리 모델을 이용한다.
데이터베이스 테이블의 로우 수가 매우 많아졌을 때 유용하게 사용될 수 있습니다. 맵리듀스는 크게 두 단계, 즉 '맵(Map)' 단계와 '리듀스(Reduce)' 단계로 나뉩니다. 각 단계는 분산된 여러 노드에서 동시에 실행될 수 있어, 대규모 데이터 세트를 효율적으로 처리할 수 있습니다.
맵(Map) 단계: 입력 데이터를 키-값 쌍으로 변환하고, 각 데이터 조각을 처리하여 중간 키-값 쌍을 생성합니다. 이 작업은 데이터를 분산 저장하는 클러스터의 여러 노드에서 병렬로 수행됩니다.
리듀스(Reduce) 단계: 맵 단계에서 생성된 중간 키-값 쌍을 키별로 그룹화하고, 각 키에 대한 값을 합칩니다. 이 과정에서 최종 결과를 생성하는데, 이것은 집계, 요약 또는 필터링 작업을 포함할 수 있습니다.
데이터를 빠르게 조회할 수 있도록 인덱스를 만듭니다. 적절한 인덱스는 쿼리 성능을 크게 향상시킬수 있습니다. 하지만 너무 많은 인덱스는 삽입, 수정, 삭제 작업의 성능을 저하시킬 수 있으므로 주의해야 합니다.
데이터베이스 테이블을 더 작고 관리하기 쉬운 단위로 분할합니다.
데이터베이스를 정규화하여 중복을 줄이고 데이터 무결성을 유지합니다. , 특정 쿼리 성능을 향상시키기 위해 데이터를 일부러 비정규화 할 수도 있습니다.
데이터베이스를 수평으로 분항하여 다른 데이터베이스 서버에 분산하는 방법입니다. 각 샤드는 데이터베이스의 일부를 담당므로 , 쿼리를 병령로 처리할 수 있어 성능이 향상됩니다.
자주 접근하는 데이터나 계산 결과를 캐시에 저장하여, 데이터베이스 접근 횟수를 줄입니다. 이 방법은 읽기 성능을 크게 향상시킬수 있습니다.
쿼리 성능을 분석하고 최적화하여 실행 시간을 줄이빈다. 실행 계획을 확인하고, 필요없는 조인을 제거하며, 적절한 필터링을 사용하는게 중요합니다.