Разделение хостов баз данных для оптимизации в Laravel
Динамика чтения и записи
На сайтах с высокой посещаемостью, например, в электронной коммерции или социальных сетях, где одновременно выполняется множество операций чтения и записи, база данных будет узким местом.
Например, в MySQL производительность чтения может пострадать при одновременном выполнении операций записи, поскольку операции записи могут получить блокировки, которые могут задержать операции чтения, особенно если база данных интенсивно используется и количество одновременных операций велико.
Кроме того, в большинстве случаев дисковый ввод/вывод распределяется между операциями чтения и записи. Большие объёмы записи могут привести к задержке ввода/вывода, замедляя операции чтения.
Подход мастер и слейв
Чтобы решить эту проблему, можно использовать отдельные узлы баз данных для операций чтения и записи. Этого можно добиться, создав мастер и слейв экземпляры базы данных и используя репликацию для синхронизации данных между двумя базами.
Мастер используется для выполнения операций записи, а слейв — для операций чтения.
В Laravel это делается легко
Когда всё это настроено, приходит время использовать их в приложении. Laravel позволяет управлять всем этим с особой лёгкостью.
Всё, что нужно, — это настроить хосты read
и write
в файле config/database.php
следующим образом.
'mysql' => [
'read' => [
'host' => [
'192.168.1.1',
'196.168.1.2',
],
],
'write' => [
'host' => [
'196.168.1.3',
],
],
'sticky' => true,
// код закомментирован для краткости
],
Как видите, Laravel автоматически определяет операции чтения и записи и использует хосты соответствующим образом.
Необязательный параметр sticky
может быть установлен в true
, чтобы разрешить немедленное чтение записей, которые были записаны в базу данных в течение текущего цикла запроса. Это означает, что если есть запись, записанная в базу данных, её можно немедленно прочитать с хоста базы данных write
в том же цикле запроса. Она >прилипает
к узлу записи.
В заключение
Так можно использовать отдельные хосты баз данных для оптимизации операций чтения и записи в Laravel. Исходя из требований приложения, можно настроить конфигурацию соответствующим образом, например, изменить количество хостов или липкость
, и это, несомненно, повысит производительность приложения.