La Web del Programador: Comunidad de Programadores
 
    Pregunta:  12285 - MANEJO DE CONCURRENCIA EN ARRAYS.
Autor:  Giancarlo Gallardo Ospinal
deseo crear un objeto que implemente un arreglo de 300 posiciones. Este objeto se carga al iniciar el servidor con una lista de titulos desde la base de datos. La idea es no tener que ejecutar una consulta a la base de datos sino levantar la informacion desde el arreglo. sin embargo imagino que podria existir un problema de concurrencia si dos clientes de web desean cargar en el mismo instante desde el arreglo. Es esto posible de implementar?

gracias!

  Respuesta:  Mauricio Solano Gutiérrez
Yo creo que una de las mejores opciones que hay para lo que quieres hacer es el utilizar recordsets desconectados de la base de datos. Si lo que te preocupa es el mantener permanentemente un hilo de conexión y por ende contribuir a saturar al servidor o a la conexión, puedes utilizar un recordset con la consulta que necesitas de la siguiente manera:

Set Rs = New ADODB.Recordset
Rs.CursorLocation = adUseClient
Rs.CursorType = adOpenStatic
Rs.LockType = adLockOptimistic
Rs.Open <sentencia SQL>, <objeto conexión de la BD>

Al hacer esto creas un recordset de la forma tradicional pero jugando con sus propiedades (CursorLocation del lado del cliente, lo cual evita tener la conexión con el servidor con la BD y CursorType en estático para evitar un dynamic que es la forma más pesada de crear un recordset).

Después desconecta el recordset para no ocupar un hilo de conexion con el servidor:

Set Rs.ActiveConnection = Nothing

De esta manera no lo tendrás pegado a la BD y podrías usarlo de igual manera que lo harías con el arreglo que querías y sin la carga normal de produce un recordset en una consulta.

Recuerda volver a conectar el recordset en caso de que así lo requieras.

Cualquier pregunta envíame un e-mail.

Espero haberte ayudado en algo.

  Respuesta:  Fernando Fernandez
Con respecto a la lectura de datos de un array, no hay problemas si otra persona hace otra consulta a la misma en paralelo. El problema sería a la hora de escribir los datos actualizados.

De todos modos investiga sobre las propiedades de Recordset CursorType y LockType.

Espero haberte indicado el camino correcto.