Задать вопрос

Sequelize. Из-за чего потребляется так много памяти?

Есть модель отзывов - Reviews. При просмотре одного отзыва иклюдится несколько моделей:
var getLikedEntity = function(row_id, user) {
    return {
        include: [
            {model: InfoOrders},
            {model: Manager, as: 'Manager'},
            {model: Manager, as: 'Author'},
            {model: Manager, as: 'Members', include: [
                {model: Files, as: 'photo'}
            ]},
            {model: Statuses},
            {model: Brands, include: [
                {model: Files, as: 'logo'},
                {model: Sources, include: [
                    {model: Communications}
                ]}
            ]},
            {model: Sources},
            {model: Communications},
            {model: Classifiers, include: [
                {model: Classifiers, as: 'Parent', include: [
                    {model: Manager, as: 'Experts', include: [
                        {model: Files, as: 'photo'}
                    ]}
                ]},
                {
                    model: Reasons, paranoid: false,
                    where: {ReviewId: row_id},
                    required: false,
                    include:[
                        {
                            model: Classifiers,
                            as: 'ChangedClassifier',
                            attributes: ['id','name','rating'],
                            include: [
                                {model: Classifiers, as: 'Parent'}
                            ]
                        }
                    ]
                }
            ]},
            {model: Institutions},
            {model: ClassifiersTextTemplates, include: [
                {model:Classifiers, attributes: ['id', 'name']}
            ]},
            {model: Comments, include: [
                AnswerIdentyfireText,
                Communications,
                {model: CommentSms, as: 'Sms'},
                {model: Manager,
                    include: [
                        {model: Files, as: 'photo'}
                    ]
                },
                {model:Comments, as: 'Childs',
                    include: [
                        Communications,
                        Manager
                    ]},
                {model: CommentGift, as:'Gift'}
            ]},
            {
                model: ColorsUserReview,
                required: false,
                where: {
                    UserId: user.id
                },
                attributes: ['ColorId'],
                include: [{
                    model: Colors,
                    required: false,
                    attributes: ['color']
                }]
            },
            {model: Files}
        ]
    }
};


В самом конце есть инклюд модели файлов. Вот в нем как раз и проблема - без него отзыв загружается за 0,5-0,8 сек., с ним - больше 4сек., и при этом приложение потребляет +~200мб памяти. Бывает вообще начинает съедать всю память, после чего сервер его убивает.
Вот модель отзывов:
module.exports = function(sequelize, DataTypes) {
    return sequelize.define('Reviews', {

        description: DataTypes.TEXT,
        rating: DataTypes.INTEGER,
        added_date: DataTypes.DATE,
        added_time: DataTypes.TIME

    }, {
        classMethods: {
            associate: function(models) {

                //associations
                models.Reviews.belongsTo(models.Brands);
                models.Reviews.belongsTo(models.Institutions);
                models.Reviews.belongsTo(models.Sources);
                models.Reviews.belongsTo(models.Communications);
                models.Reviews.belongsTo(models.Users, {as: 'Manager'});
                models.Reviews.belongsTo(models.Users, {as: 'Author'});
                models.Reviews.belongsToMany(models.Files, { through: 'review_files'});
                models.Reviews.belongsToMany(models.Users, { as: 'Members', through: 'review_members'});
                models.Reviews.belongsToMany(models.Classifiers, { through: 'review_classifiers'});
                models.Reviews.belongsToMany(models.ClassifiersTextTemplates, { through: 'review_classifiers_text_tempates'});
                models.Reviews.hasMany(models.Comments, { foreignKey: 'ReviewId', hooks:true });
                models.Reviews.hasMany(models.ClassifiersTextTemplates, { foreignKey: 'ReviewId', hooks:true });
                models.Reviews.hasMany(models.Reasons, { foreignKey: 'ReviewId', hooks:true });
                models.Reviews.belongsToMany(models.Statuses, {through: 'reviews_statuses'});
                models.Reviews.hasOne(models.ColorsUserReview, { foreignKey: 'ReviewId', hooks:true });
            }
        }
    });
};


а вот модель файлов:
module.exports = function(sequelize, DataTypes) {
    return sequelize.define('Files', {
        file: DataTypes.STRING,
        name: DataTypes.STRING
    }, {
        classMethods: {
            associate: function(models) { }
        }
    });
};
  • Вопрос задан
  • 405 просмотров
Подписаться 4 Сложный Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы