Я заметил, что на таких сайтах, как Stack Overflow и Reddit, они могут перевести весь сайт в режим «только для чтения», например. во время обслуживания.
У меня вопрос, какая архитектура нужна, чтобы это произошло? Происходит ли это на уровне базы данных, то есть какая-то команда для «блокировки» записи в базу данных? Это довольно широкий вопрос, поэтому, чтобы сузить его, я заинтересован в реализации:
Заблокирована ли сама база данных или нет, мы не можем определить.
Но я бы сказал, что это маловероятно, тем более что вам все равно придется изменить поведение внешнего интерфейса, чтобы избежать множества сообщений об ошибках.
Вместо этого всем интерфейсам (внешним интерфейсам и API-интерфейсам, если они есть) предписывается заблокировать, предположительно, через переменную конфигурации, и затем они не будут выполнять никаких операций записи в базу данных и, возможно, даже будут использовать локальный кэш вместо чтения из базы данных.
У меня нет инсайдерской информации о StackOverflow, но я не могу придумать, как это могло бы работать должным образом.
Что касается вашей «реализации»:
На уровне MySQL вы не должны ничего делать, тем более что вам, вероятно, нужно изменить некоторые вещи в базе данных во время обслуживания.
В PHP вы можете сделать что-то подобное для API или всех целевых страниц GET / POST:
if(!$config['readonly'])
{
$db->query('UPDATE `someTable` SET `whatever` = "whocares"');
}
и то же самое для переднего конца:
$template->renderViewButton();
if(!$config['readonly'])
{
$template->renderUpdateButton();
$template->renderLikeButton();
}
Просто скрыть все элементы, которые меняют вещи в базе данных, и не забывай ограничить приемные страницы, так как любой, кто обладает знаниями в области разработки, может создать свой собственный HTTP-запрос и, возможно, может сломать ваш сайт, если вы не защитите его (добавление по той же причине readonly
в HTML <input>
не достаточно).
Других решений пока нет …