Минусы использования JSON-файлов вместо базы данных
Я бы хотел точнее углубиться в эту тему и понять - плохо ли хранение всей информации напрямую в json-файлах на hdd.
Знаю, что многие используют sqlite3 - возможно, что она проще в реализации. Но какие еще есть подводные камни?
Ответы (2 шт):
У каждого подхода есть свои плюсы и минусы. Опишу то, чего нет у другого подхода.
JSON: это текстовый файл, так что это просто.
- легко можно из любого текстового редактора изменить данные
- не надо писать дополнительный код для соединения с бд и запросам к ней
- легко можено передать файл другому человеку, а тот без труда начнёт с ним работать
- не надо извращаться с хранением массивов/словарей, структуры данных есть по умолчанию
SQLite: это одно из полноценных субд, которые появились, когда людям стало не хватать текстовых файликов.
- данные структурированы
- если у вас несколько гигабайт данных, то считать пару значений будет во много раз быстрее, чем с .json.
- дозалить и измененить также во много раз быстрее (не надо считывать и записывать каждый раз весь файл, только пару байтов)
- встроенные проверки на типы данных
Если вам надо просто записать сколько-то данных и хранить их как архив, то json может показать себя с лучшей стороны, но если вам вести какой-то учёт этих данных и активно работать с ними, то добро пожаловать в мир sqlite.
Еще важное отличие - это поддержка транзакций в БД.
Может показаться, что вам это не важно, т.к. вы транзакции, возможно, не используете. Но тут есть одно важное и неочевидное следствие и различие в работе с файлами и БД.
В БД после выполнения успешной фиксации операций изменения (commit) вы можете быть уверены, что данные сохранены. При работе с файлами это не так.
Программа может сохранить данные в файл, закрыть его и сообщить пользователю, что операция завершилась успешно. Но если в этот момент произойдет программный или аппаратный сбой (например, ошибка в драйвере, которая приводит к перезагрузке ОС или выключение питания на компьютере без ИБП), то есть немалая вероятность, что данные еще не успели из дискового кеша ОС сохраниться на диск.
После перезагрузки данные могут быть утеряны. И при работе с файлами это нужно учитывать. БД так устроены, что они заботятся о том, чтоб после commit данные гарантированно были сохранены.