|
Cursores y Buffers
Básicamente, un cursor es un
conjunto de punteros a las filas
devueltas por una consulta, la
mayoría, son como un conjunto de
resultados, excepto por que los
datos reales generalmente
permanecen en el servidor.
Un buffer es un depósito RAM en
el lado del cliente donde se
guardan los datos del conjunto
de resultados de manera temporal
hasta que pueden llevarse a otro
lugar para su almacenamiento.
Las columnas de datos de una o
varias filas se dice que son
miembros del cursor si la
cláusula WHERE de la consulta
las incluye. Esta columnas,
combinadas en filas lógicas se
convierten en filas miembro del
conjunto de resultados.
Por ejemplo:
SELECT
Nombre, Genero
FROM
Animales
WHERE
Edad < 10
Cuando se ejecuta esta consulta,
el motor cliente empieza
inmediatamente a seleccionar
miembros para el conjunto de
resultados. En este caso son
todos los animales menores de
diez años.
Si no es necesaria una
ordenación, el SGDB pasa las
primeras filas de este conjunto
de resultados de vuelta a la
estación de trabajo nada más
capturarlas y después detiene el
procesamiento hasta que la
estación recupera las filas
capturadas, una vez recuperadas
el gestor de datos pasa más
filas y así sucesivamente.
Debido a este proceso, si otros
usuarios están actualizando la
base de datos, hay posibilidades
que se añada otra fila que
cumpla las condiciones del
conjunto de resultados; en este
caso la fila añadida pasa a ser
miembro del conjunto y es
recuperada por la estación de
trabajo. También existe la
posibilidad de la eliminación o
modificación de una fila, en
estos casos, si la fila no ha
sido enviada a la estación de
trabajo o no se envía o se envía
modificada; pero siempre cabe la
posibilidad de que la estación
de trabajo haya leído una fila
que ya no existe o que haya sido
modificada por otro usuario.
Estas actualizaciones no se
incluirán en el conjunto de
resultados si la estación de
trabajo ha comenzado a procesar
los resultados.
El proceso de relleno del cursor
finaliza cuando el gestor de
datos ha determinado cual es la
última fila del conjunto de
resultados y se considera
completamente relleno cuando la
estación de trabajo ha capturado
la última fila, en este momento
cuando se conoce el número de
filas que componen el cursor.
Por este motivo los métodos o
propiedades que informan del
número de filas devueltas o
afectadas no son reales hasta
que el cursos no se rellenado
completamente.
Ubicación de los cursores
Como ya se ha comentado un
cursor es un conjunto de
punteros a un conjunto de
resultados. Estos punteros
pueden estar ubicados en el
servidor o en la estación de
trabajo, originando dos tipos de
cursores, los cursores del lado
del cliente y los cursores del
lado del servidor. Pero no todos
los gestores de datos permiten
crear cursores en el lado del
servidor, sólo se pueden crear
con aquellos gestores que tengan
comportamiento cliente /
servidor.
Las ventajas e inconvenientes de
cada tipo de cursor es muy
variable y depende siempre de la
explotación que se desee hacer
de los datos, de la topología de
la red y de los equipos
empleados. En general los
cursores en el lado del servidor
reducen los tiempos de acceso a
los datos y mejoran el
desplazamiento por el conjunto
de resultados, si embargo
consumen más cantidad de
recursos de servidor y de red.
Tipos de cursores
Conjuntos de resultados sin
cursor
Con un conjunto de resultados
sin cursor las filas de datos
pasan al frontal para su
procesamiento. Este el sistema
más rápido para llevar los datos
desde el servidor al cliente,
pero no ofrece los beneficios
del cursor, por que, si bien
algunos son actualizables, a
menudo no lo son y hay que
controlar el proceso desde el
frontal para controlar las
modificaciones.
Cursores desplazables
Uno de los aspectos más costosos
de la administración de los
cursores es dar soporte a la
capacidad de desplazamiento.
Esta capacidad significa que,
una vez ejecutada una consulta,
un cursor desplazable permite la
colocación en cualquier fila del
conjunto de resultados. Estos
métodos de reubicación son
costosos en el sentido que
consumen recursos del sistema.
Para aumentar el rendimiento se
aconseja limitar los cursores y
seleccionar los no desplazables.
Cursores de sólo avance
Este tipo de cursor sólo permite
utilizar los métodos para
desplazarse avanzando por las
filas del conjunto de
resultados, no permiten el
retroceso por las mismas. En
este caso el gestor de datos
enviará las filas del conjunto
de resultados tan rápido como le
sea posible.
Cursores estáticos
Un cursor estático proporciona
la capacidad de direccionamiento
por todo el conjunto de
resultados generando una copia
en la estación de trabajo de las
filas devueltas, todos los
trabajos realizados sobre este
conjunto de resultados afectará
únicamente a la copia local. Por
su naturaleza este cursor
necesita de un espacio de
almacenamiento en el cliente.
Este cursor no es la mejor
opción para datos que cambian
constantemente, pero para tablas
de búsqueda cuyos valores no es
probable que cambien, este
cursor tiene mucho sentido.
Cursores de conjunto de claves
Un cursor de conjunto de claves,
u hoja de respuesta dinámica,
almacena un conjunto de claves,
básicamente un conjunto de
punteros, y permite volver a
capturar una fila seleccionada
de acuerdo con la información
específica de la fila almacenada
en dichas claves. Estos cursores
necesitan espacio de
almacenamiento independiente
para los datos de cada una de
las claves que lo componen.
Cualquier cambio o modificación
sobre una fila del conjunto de
resultados por parte de
cualquier usuario es reflejado
en cualquier estación de trabajo
al leer la información de dicha
fila.
Cursores dinámicos
Al igual que en los dos casos
anteriores, un cursor dinámico
almacena un bloque de claves.
Sin embargo, con este tipo de
cursor, la consulta que se ha
utilizado para generar el
conjunto de resultados se vuelve
a ejecutar constantemente
siempre que se hace referencia
al cursor. Debido a esta
actividad repetida, los cursores
dinámicos consumen gran cantidad
de recursos, pero poseen la gran
ventaja que jamás cierran la
pertenencia o no pertenencia de
las filas al conjunto de
resultados. En los dos casos
anteriores una vez rellenado el
cursor no se admite la inclusión
o exclusión de filas.
Cursores de sólo lectura
Todos los tipos de cursores
citados admiten la posibilidad
de sólo lectura, en este caso
ninguna de las filas del
conjunto de resultados pueden
ser modificadas por la estación
de trabajo. Este cursor es muy
útil para la generación de
consultas o informes en donde se
sabe que ningún dato será
modificado. Poseen la ventaja y
el inconveniente de no generar
bloqueos sobre las filas
consultadas, de tal forma que
cualquier usuario puede editar
las filas contenidas en este
cursor.
Tipos de buffers
Buffers de una única fila
Un buffer de una única fila no
es en realidad un cursor, aunque
aquí se apliquen las mismas
reglas de pertenencia que se
aplican a un cursor de conjunto
de claves de sólo avance. Con un
buffer de una única fila sólo es
posible examinar los datos de la
fila del conjunto de resultados.
Las filas anteriores no están
disponibles y la fila actual no
estará accesible después de
pasar a la siguiente fila del
conjunto de resultados.
Buffers de n filas
Un buffer de n filas amplía el
ámbito y la capacidad de
desplazamiento del buffer de una
única fila. En este caso, a la
estación de trabajo se le expone
un número determinado de filas
del conjunto de resultados y a
la aplicación se le permite que
se desplace libremente por esas
filas.
Autor: Claudio Casares
http://personal.lobocom.es/claudio/
Gentileza:
novedades@webtaller.com
paginadigital |