mysql - 使用 JSON API 响应时 Sequelize 事务失败
问题描述
我正在使用 Sequelize 事务来确保每个查询都使用最新数据。我正在使用 Express 返回 SQL 响应。
编辑:(我使用了更好的基准测试工具,我不认为我的旧问题是解决实际问题)。我对事务的理解是 Sequelize 一次运行一个事务,而不是并行运行多个事务。这里不是这样吗?如果是这样,我是否需要使用一些锁定机制?
const test_create_transaction = async (serviceID, res) => {
try {
return sequelize.transaction(async (t) => {
let serviceRoom;
// Find a service room with less than a certain number of customers
serviceRoom = await ServiceRooms.findOne({
where: {
serviceID,
numberCustomers: {
[Op.lt]: MAX_CUSTOMERS_PER_ROOM,
},
},
transaction: t,
});
// If no such room exists, create a new room
if (!serviceRoom) {
serviceRoom = await ServiceRooms.create(
{
serviceID,
},
{ transaction: t }
);
}
const testUserUID = "testUID" + Date.now().toString();
const { serviceRoomUID } = serviceRoom;
// Add the customer to that room
await ServiceRoomEnrollments.create(
{
serviceRoomUID: serviceRoomUID,
userUID: testUserUID,
serviceID: serviceID,
},
{ transaction: t }
);
// Increment the number of customers in that room
await ServiceRooms.increment("numberCustomers", {
by: 1,
transaction: t,
where: {
serviceRoomUID: serviceRoomUID,
},
});
// PROBLEM: For some reason, the very first findOne query does not use
// the up to date number of customers.
return res.send(“test”);
});
} catch (error) {
console.log("error: ", error.message);
res.end();
}
};