【发布时间】: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