PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Inserimento di massa di SQLAlchemy Core lento

Sono rimasto deluso quando ho visto che questo non aveva una risposta ... Mi sono imbattuto nello stesso identico problema l'altro giorno:cercavo di inserire in blocco circa milioni di righe in un'istanza RDS Postgres usando CORE. Ci sono volute ore .

Come soluzione alternativa, ho finito per scrivere il mio script di inserimento in blocco che ha generato lo stesso sql grezzo:

bulk_insert_str = []
for entry in entry_list:
    val_str = "('{}', '{}', ...)".format(entry["column1"], entry["column2"], ...)
    bulk_insert_str.append(val_str)

engine.execute(
    """
    INSERT INTO my_table (column1, column2 ...)
    VALUES {}
    """.format(",".join(bulk_insert_str))
)

Anche se brutto, questo mi ha dato le prestazioni di cui avevamo bisogno (~500.000 righe/minuto)

Hai trovato una soluzione basata su CORE? In caso contrario, spero che questo aiuti!

AGGIORNAMENTO:ho finito per spostare il mio vecchio script in un'istanza EC2 di riserva che non stavamo utilizzando, il che ha effettivamente risolto il problema delle prestazioni lente. Non sono sicuro di quale sia la tua configurazione, ma a quanto pare c'è un sovraccarico di rete nella comunicazione con RDS da una connessione esterna (non AWS).