„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Langsame SQL-Abfragen? Steigern Sie die Leistung Ihrer App mit dieser Technik

Langsame SQL-Abfragen? Steigern Sie die Leistung Ihrer App mit dieser Technik

Veröffentlicht am 06.11.2024
Durchsuche:159

Slow SQL Queries? Boost Your App

Die Herausforderung

In meiner App (React Spring Boot Oracle) führte der Umgang mit großen Datenmengen zu einer frustrierend langsamen Verarbeitungszeit. Ich brauchte eine Lösung, um die Leistung zu beschleunigen, ohne Kompromisse bei der Genauigkeit oder Vollständigkeit einzugehen.

Die Lösung: NTILE-Parallelverarbeitung

NTILE ist eine leistungsstarke SQL-Fensterfunktion, die dazu dient, eine Ergebnismenge in eine bestimmte Anzahl ungefähr gleich großer Blöcke, sogenannte „Kacheln“, zu unterteilen. Jeder Zeile wird basierend auf ihrer Position in der geordneten Menge eine Partitionsnummer zugewiesen.

Durch die Verwendung von NTILE habe ich die Abfrageergebnisse in überschaubare Blöcke aufgeteilt und diese Partitionen parallel verarbeitet. Dieser Ansatz ermöglichte es mir, Daten gleichzeitig abzurufen und zu verarbeiten, wodurch die Wartezeiten erheblich verkürzt wurden.

Hier ist ein praktisches Beispiel, wie man das umsetzt:

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)

Im obigen SQL-Snippet:

  • NTILE(2) teilt die Daten in zwei gleiche Teile auf, die basierend auf sales_id sortiert werden.
  • Ersetzen Sie :partitionNumber durch 1 oder 2, um Daten von der entsprechenden Partition abzurufen.

Im Frontend können Sie die Parallelverarbeitung verwenden, um jede Partition effizient abzurufen:

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);
    }
}

In diesem Code:

  • fetchPartition ruft Daten für eine bestimmte Partition ab.
  • fetchData führt beide Abrufvorgänge parallel aus und verarbeitet die kombinierten Ergebnisse.

Wie auch Sie es schaffen können

  • Identifizieren Sie die schwerwiegenden Abfragen: Finden Sie die Abfragen, die Ihre App verlangsamen.
  • NTILE anwenden: Verwenden Sie die NTILE-Funktion, um die Abfrageergebnisse in kleinere Teile zu unterteilen.
  • Parallelverarbeitung: Führen Sie diese kleineren Abfragen parallel aus und nutzen Sie so die Fähigkeit Ihrer App, gleichzeitige Aufgaben zu verarbeiten.

Wenn Sie die Leistung Ihrer datenintensiven Anwendungen steigern möchten, probieren Sie diese Methode aus. Dies ist eine intelligente und effektive Möglichkeit, Ihre Anfragen nicht länger, sondern intensiver bearbeiten zu lassen.

Wichtige Überlegung

Bei der Verarbeitung gleichzeitiger Anfragen kann der Bedarf an Datenbankverbindungen erheblich werden. Diese starke Auslastung der Verbindungen kann Ihre Datenbank belasten und möglicherweise zu Leistungsengpässen führen. Es ist wichtig, die Anzahl gleichzeitiger Anfragen zu überwachen und zu verwalten, um sicherzustellen, dass Ihre Datenbank reaktionsfähig bleibt und effizient arbeitet.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/ritesh_rungta_e849b30e0b6/slow-sql-queries-boost-your-apps-performance-with-this-technique-3gnp?1 Bei Verstößen wenden Sie sich bitte an Study_golang@163 .com, um es zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3