【问题标题】:DBMS Transactions: where are they stored?DBMS 事务:它们存储在哪里?
【发布时间】:2023-01-21 12:19:19
【问题描述】:

我正在使用 sequelize,并使用事务,但我必须每晚进行大量插入,我担心如果这些插入/更改存储在内存中直到事务被提交并且可能使服务器崩溃并丢失所有内容。 或者,如果这些更改由 DBMS 存储和处理(在这种情况下,我使用的是 aurora/postgresql),那么我什么都不用担心

帮助!

我正在使用 express 4,sequelize 5,这可能会在 cronJob 上运行 这是我的结构的抽象示例

const db = require('../database/models')

class Controller {
    async test (req, res) {
        let transaction = await db.sequelize.transaction()
        try {
            await this.storeData(req.body, transaction)
            await transaction.commit()
            res.status(200)
        } catch (error) {
            if (transaction) await transaction.rollback()
            res.status(400)
        }
    }

    async storeDate (params, transaction = null) {
        // Calculation of the data to insert
        var records = []
        await Promise.all(records.map(async item => {
                await db.MyModel.create(item, { transaction })
            }
        ))
    }


【问题讨论】:

  • 我不能代表 Sequelize,但 Postgres 事务并不会真正消耗内存。插入 1000 行的事务并不比插入 10000000 行的事务更昂贵。唯一的例外是延迟约束,如果所有行都使用单个语句插入,则可能是语句级触发器。

标签: database postgresql transactions sequelize.js


【解决方案1】:

Sequelize 中的事务功能只是对数据库事务的包装,当然,事务性 DBMS 具有事务日志并将所有正在进行的事务操作存储在那里。
一种极端情况是,如果您真的想获取太多对象并将它们全部插入一个操作中,那么我建议将大量行分成较小的批次。

【讨论】:

    猜你喜欢
    • 2010-11-19
    • 1970-01-01
    • 2012-04-07
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多