【发布时间】:2021-07-19 06:48:41
【问题描述】:
我的设置是 sequelize.js 与 node.js 和 express.js。我有一个名为“房间”的模型。这个模型有一些 n:m 关联。由于我根据关联数据过滤了我的数据,因此每次获取所有房间时,我都必须包含所有关联。
Room.findAll({
where: whereCondition,
include: ['purposes', 'prices', 'furnishing', 'technic', 'floor']
}).then(data => {
res.send(data);
});
如何设置关联的示例:
// room <-> technic m:n
db.room.belongsToMany(db.technic, {
as: "technic",
through: "room_technic",
foreignKey: "roomId",
otherKey: "technicId"
});
db.technic.belongsToMany(db.room, {
as: "rooms",
through: "room_technic",
foreignKey: "technicId",
otherKey: "roomId"
});
这会导致一个大查询。我找到了一个很老的答案,关于一个大查询的内存问题:https://stackoverflow.com/a/23081751/2834550 建议是将查询拆分为多个。
所以,我在理论上问如何拆分它?
这仍然是克服内存性能不佳的最佳方法吗?
谢谢, 卢克
【问题讨论】:
-
我猜你说的是cpu周期?还有往返时间?这对记忆有什么影响。你有几个房间?
-
@iwaduarte 这个应用程序托管在 heroku 上,指标告诉我,它超过了 512MB 内存限制。我只有大约 90 个房间,但是运行这个查询会得到一个包含 19200 个条目的结果。
-
问题是。 1)你需要这些包括的所有属性吗? 2)你需要它们吗? 3)在我看来,其他东西可能会影响性能你在heroku环境中的设置是什么?您使用的是哪个数据库?获取查询需要多长时间?
-
@iwaduarte 感谢您的回复。那么问题是,我需要所有属性进行过滤。为了向用户显示房间,起初不需要它们。因此,我将查询拆分为小的查询,每个查询都返回过滤后的房间,然后我返回所有具有这些 ID 的房间。不知道这是否“好”,但性能明显更好!我想我可以忍受它。
-
@iwaduarte 3) 你们到底是怎么设置的?我正在使用 postgresql 数据库。
标签: node.js express sequelize.js out-of-memory