내 앱(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); } }
이 코드에서:
데이터가 많은 애플리케이션의 성능을 향상시키고 싶다면 이 방법을 사용해 보세요. 쿼리를 더 오래 수행하지 않고 더 효과적으로 수행할 수 있는 스마트하고 효과적인 방법입니다.
동시 요청을 처리할 때 데이터베이스 연결에 대한 수요가 커질 수 있습니다. 이렇게 연결을 과도하게 활용하면 데이터베이스에 부담을 주어 잠재적으로 성능 병목 현상이 발생할 수 있습니다. 데이터베이스의 응답성을 유지하고 효율적으로 수행하려면 동시 요청 수를 모니터링하고 관리하는 것이 중요합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3