TypeORM sorgu yürütmesinin tamamlanıp tamamlanmadığını nasıl kontrol edebilirim?

0

Soru

Postgres ile iletişim kurmak için typeorm kullanan bir nestjs uygulaması oluşturuyorum.

Tablolarım dinamik olarak oluşturulur ve veriler de dinamik olarak eklenir. Bu yüzden varlıklar yerine raw sorgusu kullanıyorum.

Sorun şu ki, tablolardaki bazı veriler birbiriyle ilişkili ve önceki ekleme sorgusu tamamlanmadıkça yeni veri ekleyemiyorum.

Sorgu yürütmesinin tamamlanıp tamamlanmadığını nasıl kontrol edebilirim? İşte kullandığım iş akışına bir örnek. Küçük verilerle çalışır, ancak büyük verilerle başarısız olur (10 000 000 girişleri ve daha fazlası)

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();
        }
    }
}

İstenen sonuç için bazı geri arama sahip olmaktır queryRunner.query bunun gibi queryRunner.query('raw_sql', (err, res) => {})

Typeorm ile mümkün mü?

Teşekkürler

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

En iyi cevabı

1

Kodunuzu yazıldığı şekilde, işlem tamamlama yalnızca ekleme tamamlandıktan sonra gerçekleşir. Bu, bu noktada yeni sorgunuzu da yürütebileceğiniz anlamına gelir. Async/await sözdizimini kullandığınız için mutlaka bir geri aramaya ihtiyacınız yoktur.

Ancak, çok büyük ekler ile yanlış bir şey oluyor gibi görünüyor (bir tür sorgu/bağlantı zaman aşımı veya sunucu kaynağı başarısız). Gerçekte ne olduğunu görmek için hata ayıklamayı/yazdırmayı deneyin.

Eklentiyi birden çok gruba ayırmayı denemenizi öneririm (örneğin 1k kayıtları gibi bir şey).

2021-11-23 16:26:07

Merhaba. İşlem taahhüdüne işaret ettiğiniz için teşekkürler. Bu aslında yeni bir sorgu yürütebileceğim iyi bir yer gibi geliyor. Ve evet. Verilerimi parçalara ayırdım. Bazı testlerden sonra, optimal olmak için parça başına 50k girişle sonuçlandım. (genellikle gelen veriler bir milyondan fazladır)
Getsumi3

Diğer dillerde

Bu sayfa diğer dillerde

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