MinZeroMax
@MinZeroMax

Что лучше вытаскивать данные из БД(sqlite) или хранить в неких переменных?

Вопрос в следующем: Я разрабатываю дс бота. Он будет находится на нескольких серверах и у него будет БД sqlite, в ней будет таблица, её атрибуты (guild_id, channel_id). по guild_id перебирать каналы и потом в event on_message в if делать условия, если есть из данных каналов - выполнять логику, или же создать некий global лист, массив, список, словарь хз, что лучше(перешёл на python из семейства си(С, C++, C#). Подскажите, как лучше для оптимизации процессов, и где можно на будущие брать полезную информацию о python.
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
fenrir1121
@fenrir1121 Куратор тега discord.py
Начни с документации
Что лучше вытаскивать данные из БД(sqlite) или хранить в неких переменных?
Если данные критичные и недопустима их потеря - хранить в БД, если допустимо их потерять из-за ошибок, отключений и прочего - хранить в переменных. Если и то и то, накапливать какое-то количество данных и скидывать в БД сразу батчем по таймеру или по достижению определенного размера.

async def on_message(self, message: Message): ...
on_message это событие, которое срабатывает на каждое сообщение, каждого пользователя. На среднего размера боте с несколькими сотнями серверов в активное вечернее время оно может дергаться тысячи раз в секунду, как сами думаете, насколько адекватно в таком событии ходить в базу? Насколько часто меняются каналы, чтобы каждый раз их доставать из БД? Знаешь ли условия, при которых данные в базе меняются и их нужно повторно перечитать?

guild_id = message.guild.id
Как думаете, что лежит в guild, если боту пишут в личные сообщения?

Либо включайте голову и думайте почему вы делаете то или иное действие: нужны ли вам данные на чтение или на запись, могут ли они одновременно измениться, обрабатываются ли корнер кейсы и прочее или пишите как пишется, оптимизацией займетесь если дойдете до того, что она понадобится.

Подскажите, как лучше для оптимизации процессов, и где можно на будущие брать полезную информацию о python.
Читать книги, слушать подкасты, ходить на конференции.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
MinZeroMax
@MinZeroMax Автор вопроса
Временно сделал так:
@commands.Cog.listener()
    async def on_message(self, message: Message):
        if message.author == self.bot.user:
            return
        
        guild_id = message.guild.id
        text_channels = db_functions.get_text_channels(guild_id)
        image_channels = db_functions.get_image_channels(guild_id)
       
        if message.channel.id in text_channels:
            await message.channel.send("Вы крутой наверное")
        elif message.channel.id in image_channels:
            if not message.attachments:
                await message.delete()
                return
            await message.channel.send("Вы сюда кидать Арти")
Ответ написан
Ваш ответ на вопрос

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

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