В моем приложении (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