Если приложение однопользовательское и никакого поиска по данным не надо - база данных не нужна.
Если у вас сайт, рассчитанный на одновременную работу более, чем одного человека, то без базы данных не обойтись. Простейшее изменение данных, выполняемое на БД одной атомарной командой, в случае файлов потребует блокировки файла, а значит ожидания его освобождения остальными пользователями.
P.S.
Ок, пусть будет блог. Комментировать посты в нём можно будет? Тогда надо как-то эти комментарии записывать. Лайки ставить или карму править - это тоже запись данных. Даже простейший счётчик просмотров это уже изменение данных. Вот на примере такого счётчика обычно и поясняют необходимость атомарности и блокировок. Представьте, что два человека одновременно открыли пост блога и скрипты увеличивают счётчики прочтения, старое значение 99.
Скрипт 1: прочитать файл "счётчики"
Скрипт 2: прочитать файл "счётчики"
Скрипт 1: найти в файле счётчик поста, получили 99
Скрипт 2: найти в файле счётчик поста, получили 99
Скрипт 1: увеличить счётчик поста, получили 100
Скрипт 2: увеличить счётчик поста, получили 100
Скрипт 1: записать файл "счётчики"
Скрипт 2: записать файл "счётчики"
То есть вместо ожидаемых 101 в счётчике всего 100. Значит перед изменением любых данных необходимо заблокировать файл на запись, считать из него актуальные данные, внести изменения, записать файл, разблокировать его. Ну а поскольку это json, то считывать и записывать файл каждый раз придётся целиком. Если при изменении данных меняется связь с данными в других файлах, то во избежание нарушения целостности блокировать придётся все связанные файлы.
Ну и поиск по данным, скажем десять самых читаемых постов. В файловом варианте вам придётся считать весь json, и отсортировать его, тогда как в БД при правильной расстановке индексов это действие выполняется в один запрос с линейным получением первых десяти записей по индексу.