TypeORM ako zistiť, či vykonanie dotazu hotové?

0

Otázka

Som budovania nestjs aplikácie, ktorá používa typeorm komunikovať s postgres.

Môj tabuľky sú vytvárané dynamicky, a údaje sa vkladajú aj dynamicky. To je dôvod, prečo som sa použiť suroviny dotaz namiesto subjektov.

Problém je, že niektoré údaje v tabuľkách sú prepojené a nemôžem vložiť nové údaje, pokiaľ predchádzajúce vložiť dopyt bol ukončený.

Ako môžem skontrolovať, ak vykonanie dotazu hotové? Tu je príklad pracovného postupu, ktoré používam. To funguje s malými údaje, ale zlyhá s big data (10 000 000 záznamov a viac)

export class Test {
    constructor(
        private readonly connection: Connection;
    ) {}

    public async insertData(table1, table2, arr1, arr2) {
        await insertInto(table1, arr1);
        //I want second insertInto() to be executed after I get confirmation from database that insertInto() from above is finished
        await insertInto(table2, arr2);
    }

    private async insertInto(table, data) {
        const queryRunner = this.connection.createQueryRunner();
        await queryRunner.connect();
        await queryRunner.startTransaction();

        const preparedData = [];
        
        //prepare data to be inserted as raw query
        //...

        try {
            await queryRunner.query(`INSERT IGNORE INTO "${table}" VALUES ${preparedData}`);
            await queryRunner.commitTransaction();
        } catch (e) {
            await queryRunner.rollbackTransaction();
            throw new InternalServerErrorException(e, Error while executing custom query. Rollback transaction.)
        } finally {
            await queryRunner.release();
        }
    }
}

Požadovaný výsledok je, že niektoré žiadosti o spätný pre queryRunner.query ako to queryRunner.query('raw_sql', (err, res) => {})

Je možné s typeorm?

Vďaka

nestjs node.js-typeorm postgresql sql
2021-11-23 15:59:14
1

Najlepšiu odpoveď

1

Spôsob, váš kód je napísaný, transakcie zaviazať sa môže stať iba po vložiť končí. Čo znamená, že v tomto bode môžete tiež spustiť svoj nový dotaz. Nemusíte nevyhnutne žiadosť o spätný hovor, pretože používate async/čakajú syntax.

Zdá sa však, že s veľmi veľkým vložky, niečo zlé sa deje (nejaký dotaz/connection timeout, alebo server zdroj zlyhania). Skúste ladenie/tlačové chyby, aby videli, čo sa naozaj stalo.

Navrhujem, aby ste sa pokúste rozdeliť vložiť do viacerých šarží (niečo podobné, ako 1k sa záznamy, napríklad).

2021-11-23 16:26:07

Ahoj. Vďaka za upozornenie na transakciu dopustiť. To znie skutočne ako dobré miesto, kde by som mohol vykonať nový dotaz. A áno. Som rozrazila údajov do kúsky. Po niekoľko testov, skončil som s 50 príspevky za kus byť optimálne. (zvyčajne prichádzajúce dáta je viac ako jeden milión)
Getsumi3

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................