flacastrexy
@flacastrexy

Можно ли использовать словарь вместо полноценной базы данных?

Всем привет. Делаю телеграм-бота на python для регистрации и записи клиентов(да и не особо это важно), так же есть еще один бот, игровой. База данных в игровом боте сделана с помощью словаря, а сохраняет его библиотека Json, в файл .json, так же и получает из него бд обратно в словарь.
Вопрос в том, что может пойти не так, если использовать такой метод, мне он удобен. А разбираться с SQL просто нет пока времени, да и не особо хочется, пробовал sqlite3, очень сложные запросы, на чистом sql, хотя мне надо то всего хранить даты, и проверять заняты ли они, а если заняты, то хранить там информацию о клиенте(еще один словарь). В общем есть ли тут смысл ставить именно какую-то БД по типу sqlite3, MySql, или можно обойтись словарем? Просто есть опасения, что его со временем очень сильно раздует, и не будет ли это тяжело для json? Планирую удалять старые дни и т.д., но все же, хочу спросить, у знающих людей, можно ли так сделать. Заранее спасибо
  • Вопрос задан
  • 321 просмотр
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Смотря какой контент в json файле лежит. Если он маленький, а проект это просто небольшой пет проект, то и файлом обойтись можно. Тем более, если работа не подразумевает большое кол-во обращений.

что может пойти не так

1. Блокировка файла. Во время чтения файл блокируется и недоступен для других потоков. В принципе, если размер файла маленький, а кол-во обращений небольшое, то шанс того, что два потока попытаются получить доступ к файлу одновременно очень и очень мал, практически невозможен я бы сказал. Если использовать тот же sqlite3 - то нужно знать, что он так же блокирует доступ, во время работы.
2. Потеря данных. Если прочитать файл, скопировать контент из него в какую-то переменную, затем другой поток сделает то же самое. Первый поток добавит клиента X в json и дампнет его в файл. Второй поток добавит клиента Y и дампнет его в файл, при этом, учитывая то, что во втором потоке старый контент (до добавления клиента X), при дампе в файле уже не будет никакого клиента X, только Y.

Если учиться работать с базами данных, лучше выбрать нормальную, вроде postgresql, тогда никаких проблем не будет. sqlite3 - несерьезный вариант, что-то между обычным тектовиком и базой данных
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы