2017-07-19 1 views
0
while(resultSet.next()){  
    for (int c = 1; c <= metaData.getColumnCount(); c++){  
     String columnName = metaData.getColumnName(c);  
     Object value = resultSet.getString(columnName);  
     record.put(columnName, value);  
    }  
} 

über while-Schleife läuft für 5 Millionen mal mit keiner der Spalten. Gibt es den besten Weg, einen effizienten Weg zu implementieren?Verarbeitung ResultSet von 5 Millionen Datensätze zu JSON-Objekt zur Vermeidung von Leistungsproblemen

+5

Wie wäre es, ändern Sie Ihr Design nicht zu laufen ** 5 Millionen mal mit keiner der Spalten **? : D –

+0

Gibt es einen anderen Weg als nur Schleifen mit While-Schleife und Forloop ..? wie das komplette resultset direkt in JSONObject umzuwandeln ..? – Shree

+0

Sie haben viele Optionen wie, Server Side Caching, holen nur Bedürfnisse vom Server, schreiben gespeicherte Prozeduren, fügen Sie weitere Filter von Client-Seite, um die Abfragen einzuschränken etc. einfach in der abstrakten Ansicht suchen und versuchen, einen Weg zu finden. –

Antwort

0

Sie sollten es wahrscheinlich mit Pagination anstatt einen großen json Brocken zurück in der Antwort zu tun. Es erhöht nicht nur die Speicher-/CPU-Auslastung, sondern es verursacht auch viel Netzwerkverkehr. Plus-Performance-Probleme in Front-End bei der Verarbeitung und Wiedergabe einer so großen Reaktion.

In pagination, würden Sie wahrscheinlich zuerst n Datensätze zusammen mit Metadaten (d. H. Gesamtanzahl der Datensätze, Gesamtzahl der Seiten, aktuelle Seite usw.) zurückgeben. Wenn Sie Spring verwenden, werfen Sie einen Blick auf this Seitenumbruch Beispiel.

Bei DB-Schicht können Sie es abhängig vom Datenbanktyp implementieren (z. B. für MySQL, können Sie LIMIT verwenden). This SO Antwort erklärt, wie man eine Seitenumbruch in MySQL.

+0

gibt es eine andere Möglichkeit als Paginierung für diese ..? – Shree

+0

Sie könnten die Daten in Bytes streamen, anstatt auf die Erstellung des gesamten 'json'-Objekts zu warten. Aber es ist wenig kompliziert und erfordert eine Änderung in einer Art, wie Front-End die Daten abfragt. –

Verwandte Themen