Способствуют ли СУБД экономии ресурса жесткого диска по сравнению с хранением (небольшого количества) данных в json-файлах?
=============================================================================================================================

 Если мы храним небольшой словарь в файле settings.json, то загрузив его в память и изменив одно из значений в нем, для сохранения изменений мы должны перезаписать весь файл целиком. Если мы имеем таблицу settings в базе данных и меняем одну строку в ней, физически перезапишется только эта строка или вся эта таблица? при использовании:  

1.1) sqlite  

1.2) Postgresql 

>  мы должны перезаписать весь файл целиком

 Если смотреть с этой стороны, то да, что JSON, что XML - абсолютно дурацкие форматы, когда речь идет о хранении данных в процессе их обработки - стоит поменять одно поле, и нужно переписывать весь хвост файла, так как все записи имеют переменную длину.  

  

С другой стороны, СУБД хранят свои данные в так называемых *страницах*, размер которых, как правило, кратен размеру кластера на жестком диске. Следовательно, изменение одной записи приведет только к перезаписи группы страниц, относящейся к этой записи, но не к перезаписи всей БД.  

  

Однако, с практической точки зрения, важно смотреть не на износ, а на быстродействие. СУБД, например, хранит числа в двоичном представлении, в то время как JSON, XML и прочая требуют преобразования чисел в строки и наоборот при каждой записи и чтении, что естественно, создает дополнительные тормоза и обогрев атмосферы.  

  

Проектировать ПО с учетом возможного износа накопителей данных - это уже попытка учесть эффекты третьего порядка (первый порядок - ПО работает с ошибками, второй порядок - работает правильно но медленно, третий - работает быстро и правильно, но создает косвенные затраты на оборудование), что имеет мало практического смысла.  

  

То есть да, хранить данные в СУБД оптимальнее и быстрее. Еще там есть схема данных, которая проследит за их целостностью, а также функционал фильтрации и агрегации, которые не придется писать заново. 

> Если мы имеем таблицу settings в базе данных и меняем одну строку в ней, физически перезапишется только эта строка или вся эта таблица?

  

Перепишется блок некоторого размера. Он может быть больше, чем занимают данные в строке, но в любом случае существенно меньше размера всего файла. 

 Все зависит от размера этого файла, и главное, нужны ли вам атомарные транзакции (это нужно для многопользовательского доступа на запись и чтение), так как при их использовании накладные расходы на запись в базе данных ЗНАЧИТЕЛЬНО увеличиваются, и возможно до 4-8килобайт (1 экстент файловой системы) эффективнее хранить и перезаписывать файл в чистом виде без базы данных (правда придется следить за блокировками самому).  

  

Если у вас только чтение - то без каких либо вариантов работа со своим файлом (не обязательно json, интереснее хранить в виде php кода, чтобы сохранить данные в этом виде пользуйтесь var\_dump/var\_export, это самый быстрый и эффективный по загрузке процессора). даже сотня килобайт в своем файле может оказаться эффективнее хранения словарей в базе данных, тем более он отлично будет закеширован на уровне OS.  

  

Неудобство хранения словарей в файле - это не единообразный метод работы с данными, если часть данных у вас в БД а часть в файлах, вам придется поддерживать оба способа а не только один. 

>  изменив одно из значений в нем, для сохранения изменений мы должны перезаписать весь файл целиком.

С файлами работает файловая система, и именно она определяет что именно и где будет перезаписано при изменении данных.  

Если вы отредактировали одно значение - изменившиеся данные запишутся в другое место.  

Объем записи данных будет несколько больше того что вы отредактировали - это зависит от размера кластера.  

  

>  Если мы имеем таблицу settings в базе данных и меняем одну строку в ней, физически перезапишется только эта строка или вся эта таблица?

Перезапишется только эта строка.  

Остальные строки останутся неизменными.   

Даже если вы удалите строку - она просто помечается на удаление, но строки что за ней никак не сдвинутся и не перезапишутся 

 С учётом того что гарантии на диски нынче три года то вопрос не имеет смысла. Тот и тот случай не успеет выработать ресурс сервера