Spec-Zone .ru
спецификации, руководства, описания, API
|
Следующее число дает пример того, как прокси мог бы использоваться, вводя запросы в очередь запроса. Поскольку прокси находится между клиентом и сервером MySQL, что прокси отправляет серверу, и информация, которую прокси в конечном счете возвращает клиенту, не должна соответствовать или коррелировать. Как только клиент соединился с прокси, последовательность, показанная в следующей схеме, происходит для каждого отдельного запроса, отправленного клиентом.
Когда клиент представляет один запрос прокси, read_query()
функция в пределах прокси инициирована. Функция добавляет
запрос к очереди запроса.
Однажды манипулирование read_query()
завершился,
запросы представляются, последовательно, к серверу MySQL.
Сервер 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()
.