Может ли сломаться бот, если использовать csv файлы в качестве БД?
Я разрабатываю телеграм-бота на asyncio (асинхронный фреймворк). Мне нужно хранить разные данные о пользователях.
Я не умею работать с базами данных, поэтому просто пишу данные в csv файл, примерно так:
Функция "установить_поле": прочитать весь файл, изменить нужную запись в памяти, полностью переписать файл на диск.
Я опасаюсь ситуации, что, так как библиотека asyncio асинхронная, 2 пользователя одновременно нажмут на кнопки, прилетит 2 запроса в мою "базу данных" , они помешают друг другу и случится что-то плохое (исчезнет БД, криво запишутся поля в файле и т.д.).
Приложение планируется не слишком нагруженное, десятки-сотни пользователей в день.
Серьезны ли мои опасения и нужно ли переходить на нормальную БД? Если да, то какая есть подходящая простая для этих целей?
> Я не умею работать с базами данных, поэтому просто пишу данные в csv файл, примерно так:
Что ж там сложного, для простых задач всего пару запросов надо знать. SQlite в python двумя строчками подключается, все данные храняться в одном файле и не надо никакой mysql сервер устанавливать.
Посмотри пару уроков на youtube и прекрати мучаться.
> , 2 пользователя одновременно нажмут на кнопки, прилетит 2 запроса в мою "базу данных"
Скорее всего второй запрос вывалиться с ошибкой т.к. файл будет заблокирован первым запросом.
Порекоиендую вместо тяжелых баз данных поставить keydb (форк redis).
Эту базу данных можно воспринимать как хеш-таблицу ключ-значение. Работать очень просто, не сложнее, чем с csv, а даже легче. Есть асинхронный драйвер для asyncio.
ничего не будет и ничего не произойдет, так как в питоне есть защита для таких историй под названием GIL
И по факту асинхронность в питоне синхронная и фактически в один момент времени будет выполняться ровно одна операция.