Как хранить только n записей в базе данных sequelize? - PullRequest
0 голосов
/ 28 сентября 2018

Я создаю приложение чата.

Я храню сообщения в БД.Но я не хочу хранить бесконечные чаты, только последние, скажем, 100 сообщений.

Как я могу ограничить, чтобы хранить только 100 сообщений, а если появляются новые, удаляют старые?

Запускаю ли я запрос для каждого сообщения чата?

Должен ли я добавлять фоновые задачи в фоновом режиме, который выполняет SQL-запрос для каждого пользователя?

Есть ли в базе данных что-то встроенное?

Могу ли я добавить какие-нибудь индексы?

Как это делается на производстве?

1 Ответ

0 голосов
/ 28 сентября 2018

Наилучший вариант с продолжением , должен использовать КРЮЧКИ , afterCreate(instance, options)

const Chat = sequelize.define('chat', {
    username: DataTypes.STRING,
    ... // Other fields
}, {
  hooks: {
    afterCreate: (chat, options) => {
        // check the total records and perform your operation based on that
        // if its greater than 100 then remove it
    }
  }
});

Убедитесь, что вы используете Chat.create(); или метод sequlize для вставки данных, а не необработанный запрос, иначе хуки не будут работать


Другой хороший вариант - установить cron , ежечасно или ежедневно, который может проверить общее количество сообщений за соответствующее время и затем выполнить действие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...