내 앱(React + Spring Boot + Oracle)에서 대규모 데이터 세트를 처리하면 처리 시간이 답답할 정도로 느려졌습니다. 정확성이나 완전성을 저하하지 않으면서 성능을 가속화할 수 있는 솔루션이 필요했습니다.
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 조각에서:
프런트엔드에서는 병렬 처리를 사용하여 각 파티션을 효율적으로 가져올 수 있습니다.
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); } }
이 코드에서는:
데이터 집약적인 애플리케이션의 성능을 향상시키려는 경우 이 방법을 시도해 보십시오. 이는 쿼리를 더 이상 수행하지 않고 더 효과적으로 수행할 수 있는 스마트하고 효과적인 방법입니다.
동시 요청을 처리할 때 데이터베이스 연결에 대한 수요가 커질 수 있습니다. 이렇게 연결을 과도하게 활용하면 데이터베이스에 부담을 주어 잠재적으로 성능 병목 현상이 발생할 수 있습니다. 데이터베이스의 응답성을 유지하고 효율적으로 수행하려면 동시 요청 수를 모니터링하고 관리하는 것이 중요합니다.
위 내용은 느린 SQL 쿼리? 이 기술로 앱 성능을 향상시키세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!