"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 느린 SQL 쿼리? 이 기술로 앱 성능을 향상시키세요

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

2024-11-06에 게시됨
검색:125

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 기능을 사용하여 쿼리 결과를 더 작은 부분으로 나눕니다.
  • 병렬 처리: 동시 작업을 처리하는 앱의 기능을 활용하여 이러한 작은 쿼리를 병렬로 실행합니다.

데이터가 많은 애플리케이션의 성능을 향상시키고 싶다면 이 방법을 사용해 보세요. 쿼리를 더 오래 수행하지 않고 더 효과적으로 수행할 수 있는 스마트하고 효과적인 방법입니다.

중요한 고려사항

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

릴리스 선언문 이 기사는 https://dev.to/ritesh_rungta_e849b30e0b6/slow-sql-queries-boost-your-apps-performance-with-this-technique-3gnp?1에서 복제됩니다. 침해가 있는 경우에는 Study_golang@163으로 문의하세요. .com에서 삭제하세요
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3