«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Медленные SQL-запросы? Повысьте производительность вашего приложения с помощью этого метода

Медленные SQL-запросы? Повысьте производительность вашего приложения с помощью этого метода

Опубликовано 6 ноября 2024 г.
Просматривать:815

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