Abbiamo un cliente che vuole una grande quantità di dati in formato XML. L'Xml è più o meno così:
Employee
|- Emp Criminal History
|- Emp Address
|- Address history
|- Emp Partner
|- Partner history
Questa è una struttura eccessivamente semplificata e la struttura attuale è qualche altro livello annidato. La solita dimensione dei file con xml per un anno è di circa 100 MB
Con il sistema arcaico che abbiamo installato, il tomcat (server web) e il database (oracle) vivono su server diversi. La procedura in oracle prende una data da / a data e sputa un clob che si forma usando l'API di Oracle per creare xml. Ad esempio:
XMLSERIALIZE (
XMLELEMENT(
XMLCONCAT(
XMLAGG(
Per scrivere questi dati su disco sul server oracle è attivo, richiede molto tempo. Con l'architettura a cui sono legato, ho bisogno di una classe java per effettuare una chiamata a questo proc e quindi dal clob restituito da questo proc, analizzare ogni riga in modo che possa semplicemente scriverlo in un file xml. Ho eseguito un report per 6 mesi e conteneva circa 5 milioni di righe di xml che impiegavano circa 7 ore per essere eseguito (solo per scrivere dati sul disco sul server Oracle). L'ho eseguito durante la notte tramite una classe java e stamattina ho avuto un
java.lang.OutOfMemoryError: Java heap space
Mi manca ovviamente qualcosa.
Quali sono le cose che potrei seguire per ottenere il mio tempo di esecuzione a livelli ragionevoli, date le prestazioni ottimali delle query? Non ho idea dei benchmark per Oracle API - presumo dal momento che sono in giro da un po ', l'xml api non è un problema.
Java: 1.5. Oracle: 11.2