Spec-Zone .ru
спецификации, руководства, описания, API

15.7.4.1. Последовательность Сценариев прокси Во время Инжекции Запроса

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

Архитектура MySQL Proxy
  1. Когда клиент представляет один запрос прокси, read_query() функция в пределах прокси инициирована. Функция добавляет запрос к очереди запроса.

  2. Однажды манипулирование read_query() завершился, запросы представляются, последовательно, к серверу MySQL.

  3. Сервер MySQL возвращает следствия каждого запроса, одного набора результатов для каждого представленного запроса. read_query_result() функция инициирована для каждого набора результатов, и каждый вызов может решить который набор результатов возвратиться к клиенту

Например, можно поставить дополнительные запросы в очередь в глобальную очередь запроса, чтобы быть обработанными сервером. Это может использоваться, чтобы добавить статистическую информацию, добавляя запросы прежде и после исходного запроса, изменяя исходный запрос:

SELECT * FROM City;

В последовательность запросов:

SELECT NOW();SELECT * FROM City;SELECT NOW();

Можно также изменить исходный оператор; например, чтобы добавить EXPLAIN к каждому оператору, выполняемому, чтобы получить информацию о том, как оператор был обработан, снова изменяя наш исходный SQL-оператор во многие операторы:

SELECT * FROM City;EXPLAIN SELECT * FROM City;

В обоих из этих примеров клиент получил бы больше наборов результатов чем ожидаемый. Независимо от того, как Вы управляете входящим запросом и возвращенным результатом, число запросов, возвращенных прокси, должно соответствовать число исходных запросов, отправленных клиентом.

Вы могли скорректировать клиент, чтобы обработать многократные наборы результатов, отправленные прокси, но в большинстве случаев Вы будете хотеть, чтобы существование прокси осталось прозрачным. Гарантировать, что число соответствия запросов и наборов результатов, можно использовать MySQL Proxy read_query_result() извлечь дополнительную информацию о наборе результатов и возвратить только набор результатов клиент, который первоначально требуют назад клиенту. Можно достигнуть этого, давая каждый запрос, который Вы добавляете к запросу, ставят уникальный ID в очередь, затем отфильтровывают запросы, которые не соответствуют исходный ID запроса, обрабатывая их с read_query_result().