느린 SQL 쿼리? 이 기술로 앱 성능을 향상시키세요

DDD
풀어 주다: 2024-09-25 06:30:32
원래의
288명이 탐색했습니다.

Slow SQL Queries? Boost Your App

도전

내 앱(React + Spring Boot + Oracle)에서 대규모 데이터 세트를 처리하면 처리 시간이 답답할 정도로 느려졌습니다. 정확성이나 완전성을 저하하지 않으면서 성능을 가속화할 수 있는 솔루션이 필요했습니다.

솔루션: NTILE + 병렬 처리

NTILE은 결과 집합을 '타일'이라고 알려진 대략 동일한 크기의 특정 개수의 청크로 분할하도록 설계된 강력한 SQL 창 함수입니다. 각 행에는 순서가 지정된 세트에서의 위치에 따라 파티션 번호가 할당됩니다.

NTILE을 사용하여 쿼리 결과를 관리 가능한 청크로 분할하고 이러한 파티션을 병렬로 처리했습니다. 이 접근 방식을 통해 데이터를 동시에 가져오고 처리할 수 있어 대기 시간이 크게 단축되었습니다.

이를 구현하는 방법에 대한 실제 예는 다음과 같습니다.

WITH PartitionedSales AS (
    SELECT 
        sales_id,
        sales_amount,
        sales_date,
        NTILE(2) OVER (ORDER BY sales_id) AS partition_number -- Assigns a partition number (1 or 2) to each row
    FROM 
        sales
    WHERE 
        sales_date BETWEEN '2023-01-01' AND '2023-12-31'
)
SELECT * 
FROM PartitionedSales
WHERE partition_number = :partitionNumber -- Replace :partitionNumber with the actual partition number (1 or 2)

로그인 후 복사

위의 SQL 조각에서:

  • NTILE(2)은 데이터를 sales_id를 기준으로 정렬되는 두 개의 동일한 덩어리로 나눕니다.
  • 해당 파티션에서 데이터를 가져오려면 :partitionNumber를 1 또는 2로 바꾸세요.

프런트엔드에서는 병렬 처리를 사용하여 각 파티션을 효율적으로 가져올 수 있습니다.

async function fetchPartition(partitionNumber) {
    const response = await fetch('/api/sales?partition=' + partitionNumber});
    return response.json();
}

async function fetchData() {
    try {
        const [partition1, partition2] = await Promise.all([
            fetchPartition(1), // Fetch the first partition
            fetchPartition(2)  // Fetch the second partition
        ]);

        // Combine and process results
        const combinedResults = [...partition1, ...partition2];
        processResults(combinedResults);
    } catch (error) {
        console.error('Error fetching data:', error);
    }
}

로그인 후 복사

이 코드에서는:

  • fetchPartition은 특정 파티션에 대한 데이터를 검색합니다.
  • fetchData는 두 가져오기 작업을 병렬로 실행하고 결합된 결과를 처리합니다.

당신도 할 수 있는 방법

  • 과중한 쿼리 식별: 앱 속도를 저하시키는 쿼리를 찾습니다.
  • NTILE 적용: NTILE 기능을 사용하여 쿼리 결과를 더 작은 부분으로 나눕니다.
  • 병렬 처리: 동시 작업을 처리하는 앱의 기능을 활용하여 이러한 소규모 쿼리를 병렬로 실행합니다.

데이터 집약적인 애플리케이션의 성능을 향상시키려는 경우 이 방법을 시도해 보십시오. 이는 쿼리를 더 이상 수행하지 않고 더 효과적으로 수행할 수 있는 스마트하고 효과적인 방법입니다.

중요한 고려사항

동시 요청을 처리할 때 데이터베이스 연결에 대한 수요가 커질 수 있습니다. 이렇게 연결을 과도하게 활용하면 데이터베이스에 부담을 주어 잠재적으로 성능 병목 현상이 발생할 수 있습니다. 데이터베이스의 응답성을 유지하고 효율적으로 수행하려면 동시 요청 수를 모니터링하고 관리하는 것이 중요합니다.

위 내용은 느린 SQL 쿼리? 이 기술로 앱 성능을 향상시키세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!