Я хочу, чтобы PHP буферизовал мои результаты MySQL на стороне клиента И я хочу немедленно начать использовать результаты

Действительно ли небуферизованные запросы MySQL вообще не используют PHP-буферизацию? И действительно ли буферизованные запросы буферизируют весь набор результатов до того, как PHP получит доступ к данным?

Из того, что я прочитал о буферизованных запросах MySQL, это не то, что я хочу, потому что я хочу начать работать с результатами прямо сейчас, и мне не нужно ждать, пока все результаты будут буферизованы, прежде чем я начну. Но из того, что я читал о небуферизованных запросах, это тоже не то, что я хочу, потому что я хочу, чтобы он буферизировал результаты на клиенте, чтобы MySQL не задерживался дольше, чем нужно, я просто не Я не хочу ждать, пока результаты будут полностью буферизованы, прежде чем я смогу начать работу с результатами. Так что помогите мне понять.

Действительно ли буферизованные запросы в MySQL / PHP буферизируют весь набор результатов, прежде чем PHP разрешат начать использовать результаты? И действительно ли небуферизованные запросы вообще не используют буферизацию, чтобы сервер MySQL постоянно ждал, пока PHP запросит следующий результат, прежде чем он будет отправлен клиенту? Если это правда, почему нет способа начать использовать результаты немедленно и при этом по-прежнему буферизировать результаты, чтобы снять нагрузку с MySQL?

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

Так я правильно понимаю? Там нет способа сделать то, что я хочу здесь? Нет способа справиться с этим на практике?

-2

Решение

Я хочу, чтобы он буферизировал результаты на клиенте, чтобы MySQL не задерживался дольше, чем нужно

MySQL вполне способен обрабатывать одновременные соединения — и действительно, одновременные операции с этими одновременными соединениями. То есть, в значительной степени, один из основных raisons d’être СУБД.

Чтобы предотвратить конфликты, когда одновременные операции воздействуют на одни и те же базовые данные, MySQL время от времени «блокирует» части базы данных для исключительного использования одного соединения; однако, как только он начнет передавать результаты клиенту, все блокировки, которые были получены для выполнения этого оператора, будут уже сняты. Таким образом MySQL будет никогда быть «задержанным» клиентом, который не сразу загружает весь набор результатов в буфер.

Итак, к вашим конкретным вопросам:

  1. Действительно ли буферизованные запросы в MySQL / PHP буферизируют весь набор результатов, прежде чем PHP разрешат начать использовать результаты?

    Да.

  2. И действительно ли небуферизованные запросы вообще не используют буферизацию, чтобы сервер MySQL постоянно ждал, пока PHP запросит следующий результат, прежде чем он будет отправлен клиенту?

    Довольно много. Клиентская библиотека MySQL (в C) будет выполнять немного буферизация, но только для того, чтобы эффективно выполнять сетевые операции.

  3. Если это правда, почему нет способа начать использовать результаты немедленно и при этом по-прежнему буферизировать результаты, чтобы снять нагрузку с MySQL?

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

1

Другие решения

Других решений пока нет …