Классическая история. Написана первая серьёзная программа — консольный список задач. Добавил задачу, она появилась в списке. Работает прекрасно, пока не закрыл терминал.
Закрыл, открыл заново — список пустой. Как будто ничего и не было.
Первое, что приходит в голову почти всем — сохранять список в файл перед выходом, а при старте читать обратно.
JSON-файл, читаешь — пишешь, несложно. И это действительно работает, пока список открыт из одного места.А вот если запустить ту же программу в двух терминалах одновременно — один из них благополучно затирает то, что успел дописать второй. Оба читают файл целиком, оба пишут файл целиком, кто последний сохранил — тот и прав.
Вот тут и становится понятно, зачем вообще нужны базы данных. Не потому что файл это «неправильно», а потому что файл не умеет того, что нужно почти любому реальному проекту: пускать к данным сразу несколько программ без того, чтобы они друг друга затирали, находить одну нужную запись без перечитывания всего файла, гарантировать, что два связанных изменения либо оба применились, либо не применилось ни одно.
Файлами эту проблему можно латать довольно долго, но рано или поздно упираешься в одну и ту же стену 👴