Velocizzare l'inserimento di dati nel database sql

di il
1 risposte

Velocizzare l'inserimento di dati nel database sql

Sto testando la velocità di scrittura nel database sql ma noto a malincuore che è lentissima. La colpa è di java, del tipo di database oppure del sistema che utilizzo?
L’unica cosa positiva è che l’utilizzo di memoria è davvero ridotto. Le librerie apache poi per xlsx sono molto più veloci nel spostare il contenuto di una matrice in un file fisico, mi sembra strano che un database sia tecnologicamente inferiore.
Vi posto l’esempio con la speranza che mi diciate che il mio algoritmo sia migliorabile. Se avete un pc di ultima generazione fate girare il software e ditemi quanti secondi impiega il vostro pc per scrivere su file i valori della matrice sopra.
Un'ultima domanda: ho visto che esistono diversi database online, sono tutti lenti come l’sql?
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestLetturaScritturaDatabase {

	public static void main(String[] args) throws ClassNotFoundException,
			SQLException {
		double tempoPRINCIPALE = System.nanoTime();
		double tempo = System.nanoTime();
		int i;
		int j;
		int k;
		int CAMPI = 100;
		int RECORD = 100_000;
		Double[][] MATRICE = new Double[RECORD][CAMPI];
		for (j = 0; j < RECORD; j++) {
			for (k = 0; k < CAMPI; k++) {
				MATRICE[j][k] = (double) (j - k);
			}
		}
		double parziale1 = System.nanoTime() - tempo;
		tempo = System.nanoTime();
		Class.forName("org.sqlite.JDBC").getInterfaces();
		String nome = "jdbc:sqlite:TestLetturaScritturaDatabase.sqlite";
		Connection conn = DriverManager.getConnection(nome);
		Statement stat = conn.createStatement();
		stat.executeUpdate("DROP TABLE IF EXISTS matrice");
		String TABELLA = "CREATE TABLE matrice (id INTEGER PRIMARY KEY AUTOINCREMENT";
		for (i = 0; i < CAMPI; i++) {
			TABELLA = TABELLA + ", '" + i + "' REAL";
		}
		TABELLA = TABELLA + ")";
		String Inserisci = "INSERT INTO matrice ('";
		stat.executeUpdate(TABELLA);
		for (j = 0; j < RECORD; j++) {
			for (k = 0; k < CAMPI; k++) {
				if (k < CAMPI - 1) {
					Inserisci = Inserisci + k + "', '";
				} else {
					Inserisci = Inserisci + k + "') VALUES ('";
				}
			}
			for (k = 0; k < CAMPI; k++) {
				if (k < CAMPI - 1) {
					Inserisci = Inserisci + MATRICE[j][k] + "', '";
				} else {
					Inserisci = Inserisci + MATRICE[j][k] + "')";
				}
			}
			stat.executeUpdate(Inserisci);
			Inserisci = "INSERT INTO matrice ('";
		}
		System.out.println("Database creato con successo!");
		conn.close();
		stat.close();
		double parziale2 = System.nanoTime() - tempo;
		double totale = System.nanoTime() - tempoPRINCIPALE;
		System.out.println("Tempo creazione matrice: " + parziale1 / 1000000000
				+ " secondi");
		System.out.println("Copia valori nel database: " + parziale2
				/ 1000000000 + " secondi");
		System.out.println("Tempo totale di elaborazione: " + totale
				/ 1000000000 + " secondi");
	}
}


1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte