Ответ 1
База данных отправляет полный набор результатов за один раз. Курсор/итератор находится в драйвере на стороне клиента.
С большинством драйверов для большинства реляционных баз данных по умолчанию и предпочтительный способ доступа к результатам - использовать курсор или итератор.
Я предполагаю, что база данных делает что-то вроде:
Когда драйвер базы данных получает вызов для получения следующего результата, он передает этот указатель в базу данных, что дает следующий результат.
Однако я не уверен, что это действительно правильно. Одна вещь, которая претит меня, заключается в том, что если клиент базы данных и сервер базы данных находятся на разных узлах и обмениваются данными через сеть, не так ли это медленно? Использует ли он такой ленивый подход? Имеет смысл не возвращать все данные, но есть ли какой-то средний путь, который требуется?
База данных отправляет полный набор результатов за один раз. Курсор/итератор находится в драйвере на стороне клиента.
Курсор - это перемещение или указатель, указывающий позицию. Англоговорители использовали термин с этим значением с XVI века для самых разных подвижных или мобильных маркеров положения. описание википедии
Предполагается вызвать изображение курсора в текстовом редакторе. Это (в некоторых контекстах) место, где указатель (курсор) находится в данном наборе данных. Строка (т.е. Строка) возвращается с помощью cursor.fetchone(), и курсор продвигается к началу следующей строки/строки.
Курсор абстрагирует, сколько строк в настоящий момент буферизуется клиентом базы данных. Когда курсор приближается к концу буфера, базовая структура будет получать больше контента. Обычно значения по умолчанию являются хорошим предположением о хорошем компромиссе между распределением памяти, задержкой в сети и другими факторами.
Это вопрос оптимизации. Карты Google обеспечивают хорошее сравнение. Пользователь может перемещаться, и кажется, что вся карта страны была загружена клиенту, но на самом деле она загружает соседние панели прямо перед тем, как они вам понадобятся.
Когда клиент базы данных выполняет эту буферизацию, он избавляет программиста от необходимости думать об этом до того, как потребуется оптимизация.