TypeORM วิธีตรวจสอบว่าสืบค้นประหารเสร็จแล้ว?

0

คำถาม

ฉันกำลังสร้าง nestjs องโปรแกรมที่ใช้ typeorm ต้องติดต่อกับ postgres.

ของตารางข้อมูลเรียบร้อยแล้วนี่สร้าง dynamically และข้อมูลเป็นการแทรกด้ว dynamically. นั่นคือทำไมฉันถึงใช้ดิบกับการค้นหาแทนที่จะเป็น entities.

ปัญหาคือมันมีข้อมูลบางอย่างอยู่ในตารางข้อมูลเรียบร้อยแล้วเกี่ยวข้องกันและฉันไม่สามารถแทรกข้อมูลใหม่เว้นแต่ว่าก่อนหน้าแทรกค้นได้เสร็จสิ้นแล้ว

ยังไงฉันตรวจสอบว่าสืบค้นประหารเสร็จแล้ว? นี่คือเป็นตัวอย่างของ workflow ว่าฉันประโยชน์หรอก มันได้ผลกับน้องข้อมูลแต่ล้มเหลวกับข้อมูลใหญ่(10000000 รายการและมากกว่าเดิม)

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

ที่ต้องการผลลัพธ์คือต้องมีบางอย่าเรียกกลับสำหรับ queryRunner.query เหมือนนี้ queryRunner.query('raw_sql', (err, res) => {})

มันเป็นไปได้กับ typeorm?

ขอบคุณ

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

คำตอบที่ดีที่สุด

1

ทางของคุณรหัสก็คือพรรณาการต่อรองก่อนจะเดียวที่เกิดขึ้นหลังจากที่แทงจะเสร็จ. ซึ่งหมายความว่างตรงจุดนั้นคุณยังสามารถประมวลผลใหม่ของคุณกับการค้นหา. คุณไม่จำเป็นเลยต้องการเรียกกลับเพราะคุณกำลังใช้ค async/รอคำสั่งรูปแบบการสั่งงาน.

อย่างไรก็ตามมันดูเหมือนอย่างนั้นกับตัวใหญ่กแทรบางอย่างผิดเกิดขึ้น(บางอย่าง query/การเชื่อมต่อหมดเวลาหรือเซิร์ฟเวอร์ทรัพยากรล้มเหลว). ลองดีบั๊กโปรแกรม/การพิมพ์ข้อผิดพลาดที่จะเห็นว่าจริงๆแล้วมันเกิดอะไรขึ้น

ผมขอแนะนำให้คุณพยายามที่จะแบ่งแทรกเข้าไปในหลาย batches(ของบางอย่างเหมือน 1k บันทึกตัวอย่างเช่น).

2021-11-23 16:26:07

สวัสดีค่ะ ขอบคุณสำหรับชี้ไปที่การต่อรอก่อ นั่นมันดูเหมือนกับเป็นสถานที่ที่ดีที่ฉันสามารถประมวลผลใหม่กับการค้นหา. และใช่แล้ว ฉันแยกของข้อมูลลงไปในท่อน. หลังจากการทดสอบบางอย่างฉันลงเอยกับ 50k รายการต่อชิ้นส่วนที่เป็นที่เหมาะสม. (ปกติจะคอยดูเอาไว้เจ็ตไฟร์ข้อมูลคืบหนึ่งล้านดอล)
Getsumi3

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่