Velocidad de Conexión a la Base de datos

Gusto en saludarte, espero te encuentres bien y puedas ayudarme.
Soy programador en Visual Basic 6.0, utilizo código ADO para abrir conexiones vía ODBC (DSN) a bases de datos de SQL Server, AS/400 ó Microsoft Access 2000.
En estos momentos me encuentro desarrollando una aplicación que gestiona bases de datos de Microsoft Access y que requiere ser instalada en un servidor.
Como tú comprenderás, esto implica colocar la base de datos en una carpeta compartida dentro del equipo servidor y crear los DSN en las fuentes ODBC de los equipos de cada cliente apuntando a dicha base de datos mediante una unidad de red.
Mi gran problema en este caso es la velocidad, la conexión tarda mucho tiempo en abrir y en consecuencia los Recordset gastan mucho tiempo en cargarse. Como producto final los programas tardan mucho tiempo en abrir (se ponen pesados).
Así abro las conexiones:
'---------------------------------------
Sub PRO_CONBD()
Set DBCON_001 = New Connection
DBCON_001.CursorLocation = adUseClient
DBCON_001.Open "PROVIDER=MSDASQL;dsn=PRUEBA;uid=;pwd="
End Sub
'---------------------------------------
Así cargo los Recordset
'---------------------------------------
Set RS_TABLA = New Recordset
RS_TABLA.Open "Select * From TABLA", DBCON_001, adOpenForwardOnly, adLockOptimistic
'---------------------------------------
Mis aplicaciones generalmente utilizan las siguientes referencias:
- Visual Basic For Applications.
- Visual Basic runtime objets and procedures.
- Visual Basic objets and procedures.
- OLE Automation.
- Microsoft ActiveX Data Object 2.0 Library.
- Microsoft Data Binding Collection VB 6.0 (SP4).
Mis preguntas son:
1.- ¿Existe algún procedimiento, control ó referencia distinta los que estoy utilizando actualmente que permitan aumentar la velocidad de mis programas en un servidor?
2.- ¿Sera necesario pasar la base de datos a otro manejador distinto a Microsoft Access 2000? Ejemplo: SQL Server, Oracle, etc.
3.- Considerando que el servidor esta conectado a una red de 10 Mbps y gran cantidad de usuarios acceden a ella, ¿Será un problema de Hardware y no de Software?
4.- Visual Basic en ocasiones es pesado para arrancar y en consecuencia los programas desarrollados en este lenguaje también lo son. ¿Existe alguna forma de hacerlo más Veloz a Visual Basic?
5.-

5 Respuestas

Respuesta
1
Lo que tienes que hacer es lo siguiente:
1.- Pasar a una red de 100 mbps.
2.- ADO 2.8
3.- Mysql, SQL Server, ya que access no esta diseñado para ser un cliente server
4.- No me dices que vel. Del micro tienes, la cantidad de ram, ya que eso puede influir en el rendimiento.
Gracias por tu valiosa colaboración.
Quisiera aprovechar para que por favor me aclares algunas de tus sugerencias.
1.- Me recomiendas usar ADO 2.8, actualmente estoy usando ADO 2.0 ¿Cuál es la diferencia entre uno y otro, y como puedo usar el 2.8 mediante código ADO? (Si puedes enviame un fragmento de código para ver como se declaran y como se abren de forma óptima).
2.- Ya había escuchado hablar de Mysql, pero: ¿Es cierto que es un software libre que no requiere licencia?. ¿Admite comunicación ODBC? O mejor dicho: ¿El instalador de Mysql proporciona los Drivers necesarios para crear los DSN?.
3. De no requerir licencia ¿Existe alguna página de internet donde pueda descargarlo o debo adquirirlo en CD?
http://www.mysql.com/
http://dev.mysql.com/doc/mysql/en/ODBC_Connector.html
http://dev.mysql.com/doc/mysql/en/SAMPLE_-_VB.html
cn.Open="DNS=autos", esto seria una coneccion con dns, y ahi en los sitos web que te comento, viene una conexion con codigo, y si es gratis el MySQL, con respecto a ADO 2.8 es una version mas completa de esta libreria
Respuesta
1
Pregunta 1:
"esto implica colocar la base de datos en una carpeta compartida dentro del equipo servidor y crear los DSN en las fuentes ODBC de los equipos de cada cliente apuntando a dicha base de datos mediante una unidad de red."
Esto no tiene porque ser así. El ODBC lo configuras en el servidor y desde los clientes conectas con una cadena tipo a
"SERVER = NombreServidor;PROVIDER=MSDASQL;dsn=PRUEBA;uid=;pwd="
Lo que consigues con esto es que las consultas las realice el servidor y a ti te devuelva el recordset, de la otra froma los equipos accedían a la base de datos por red y la tenían que leer ellos mismos con lo queel rendimiento baja bastante.
Espero que te sirva, puede que no sea exactamente así pero no tengo ningún servidor para hacer las pruebas, de todas fromas si tienes dudas dime.
Pregunta 2:
Yo te aconsejaría que no utilizases Access más que para programa pequeños, alternativas tienes Sql Server, Oracle y podrías incluso mirar MySQL
Pregunta 3:
Estoy seguro de que con una red de 100 te iría mejor.
PRegunta 3:
Lo único que puedes hacer es ir a propiedades del proyecto en la pestaña de Compilación y allí tienes unas pocas opciones para aligerar el código, pero creo que te dará lo mismo, es cosa de la red.
Si tienes alguna duda o necesitas aclaración no dudes en preguntar.
Gracias por tu valiosa colaboración.
1.- Respecto al String de conexión que me recomendastes usar "SERVER = Etica-4;PROVIDER=MSDASQL;dsn=PRUEBA;uid=;pwd=" te cuento que lo implementé y a pesar de tener creado el DSN PRUEBA en el Servidor tambien me lo pide en la máquina del cliente. Pensé que sólo con el DSN del servidor bastaba. ¿Estoy en un error ó debe ser así?.
2.- También me sugieres utilizar Mysql Otra personas también me lo habían recomendado y al respecto tengo dudas: ¿Es cierto que es un software libre y que no requiere licencia?, ¿Permite comunicación mediante ODBC (DSN)?
3.- ¿Cómo puedo obtener un ODBC que me permita comunicarme eficientemente con Oracle?, ya que no he podido activar el que viene con Windows por defecto.
1. Esta pregunta te la contesto el lunes que vaya al trabajo, porque en casa solo tengo Linux y no puedo hacer pruebas.
2. MySQL si es una software libre ademas de gratis, con licencia GPl. PAra informarte hecha un vistazo a estas páginas:
http://www.gnu.org/home.es.html
http://www.mysql.com/
El driver ODBC para MySQL lo puedes descargar desde aqui
Otra opcion podria ser usar MSDE(http://www.microsoft.com/sql/msde/default.asp)
, es una version gratis de SQL server con la limitación de 25
Sigo------->
Otra opcion podria ser usar MSDE(http://www.microsoft.com/sql/msde/default.asp)
, es una version gratis de SQL server con la limitación de 25 usuarios concurrentes y sin entorno de administración gráfico, aunque puedes conseguir algún "front-end" gráfico gratis por Internet. En cuanto a la limitación teoirca de 25 usuarios yo he hecho pruebas y ha llegado a atender a 1000 usuarios.
Driver para oracle tienes en http://www.oracle.com/technology/software/tech/windows/odbc/index.html, aunque Oracle no es precisamente gratuito.
Te aconsejaría decantarte por MySQL o MSDE antes de seguir con Access.
Si tienes razón, necesitas un ODBC local, pero al estr apuntando al ODBC del server te debería ir más rapido que accedieso a la BD diractemente por red.
Hola, te cuento que descargue MYSQL 4.1.7 desde Internet y los controladores ODBC.
Realicé una instalación en mi máquina (PentiumIV, Windows XP, 256 RAM), es decir la tomé como servidor. Exporté desde ACCESS tabla por tabla mediante el DSN previamente creado y probé algunos programas ya que otros me dieron problemas (ya te explico eso).
Indudablemente que la velocidad de apertura de los programas es muy rápida...
Los problemas que se me presentan ahora con MYSQL son los siguientes:
1.- Ocasionalmente en mis programas utilizo la siguiente instrucción para determinar desde la definición de la tabla el ancho de un campo: RS_Tabla.Fields("CAMPO1").DefinedSize. Suponiendo que en ACCESS yo estructuré este campo como de TEXTO(8) al exportarlo a MYSQL mediante el DSN pasa como VarChar(8), hasta allí estamos bien...
El problema viene cuando utilizo la instrucción RS_Tabla.Fields("CAMPO1").DefinedSize no he podido determinar porque en access dicha instrucción me devuelve un ancho de 8 (que es lo correcto) y MYSQL me devuelve 2 o cualquier otra cosa.
¿Será por la forma en que exporté las tablas para que se crearan?
2.- Mi segundo problema es que no tengo acceso desde el WinMySQLadmin 1.4 a crear bases de datos, ni tablas, ni a modificar las definiciones de los campo. Fíjate que la única forma en que pude crear las tablas fue exportandolas desde access a la base de datos test. ¿Será versión que bajé de Internet del MySQL?
3.- En el entorno gráfico de administración tengo dos bases de datos MySQL y Test (no he podido crear otra por lo que te expliqué antes). ¿Por qué desde otras máquinas de la red a las que les he instalado los ODBC solo puedo ver la base de datos Test?.
Gracias y disculpa la molestia...
Eduardo Arias
[email protected]
Lo primero perdón por tardar tanto en responder, pero he estado muy ocupado.
Repondiendote:
1.- Puede ser que MySQL o el driver no se lleve muy bien con el DefinedSize pero tampoco me hagas mucho caso, si tengo tiempo ya voy a echar un vistazo.
2.- En esta página tienes un administrador gráfico para MySQL, http://www.desarrolloweb.com/articulos/898.php?manual=34,
pruébalo a ver, tiene muy buena pinta.
Yo siempre que he utilizado MySQL ha sido en equips Linux y los dministraba mediante consola, así que no tengo mucha experiencia en entornos gráficos.
3.- La bse de datos MYSQL la has creado tu o venia ya hecha. No lo recuerdo bien pero puede ser la base de dtos que guarda información sobre MySQL.
"Estaré en espera de tu respuesta y muchas gracias. Te has ganado una excelente puntuación por lo que a mi respecta y mi agradecimiento sincero... "
Gracias, la verdad es que a gente que se ve que le ha dado vueltas al asunto y explica tan bien sus errores da gusto responder.
Y lo importante, me he descargado el MySQL, MySQLCC y el driver ODBC lo he puesto todo y para ver los datos a mi me funciona tanto doble click sobre la tabla como clicando en File/Query y haciendo una consulta SQL.
Respuesta
1
Me parece que no tienes problemas en la forma en que haces las conexiones y cargas los recordset, por lo que dices puede deberse a la velocidad de la red. Ahora bien en cuanto a tus preguntas:
1.- Yo no conozco hasta los momentos otro control o procedimiento diferente para que aceleres la velocidad del programa. Ahora bien si el programa te corre unicamente en el servidor en forma lenta, puede deberse a que este tengas que agregarle más memoria.
2.- Si la Bd va a estar creciendo en datos (en un gran volumen)seria mejor que usaras SQL server u otra Bd (o la otra solución es que tendrías que estar haciendo históricos de la Bd como por ejemplo anualmente, para evitar que te colapse).
3.- Si la velocidad de la red en lenta y existen demasiados usuarios intentando acceder al servidor a la vez eso también influye a que te disminuya la velocidad del sistema, con lo cual ya no seria un problema de tu aplicación.
4.- No conozco forma alguna para que Vb sea más veloz..
Respuesta
1
Bueno ciertamente que access tiene sus limitaciones no obstante es capaz de soportar hasta o más de 40000 registros sin embargo no es una herramienta profesional, y si tienes la posibilidad de usar oracle o sql server yo ni lo pensaría ok eso por una parte, en tu caso el problema no parecer ser la BD sino la Red, prueba lo siguiente si tienes windows xp que no me indicaste tampoco me dijiste si era access 2000 o superior una forma sencilla y alterna a la conexión odbc puedes probar lo siguiente instala el programa en todas las maquinas sin la base de datos por supuesto debes tener una unidad de red disponible i: z: b: no se la que tengas disponible (y la compartes )ahí coloca tu programa y la base de datos local ok a todos los usuarios le vas a crear un acceso directo al ejecutable que esta en unidad que creaste para tal fin (recuerda instalar de todas formas el programa en cada maquina pero el ejcutable lo toman de la unidad donde esta el programa y la BD OK)
Espero haberme explicado
Mi correo personal es [email protected] ahí puedes escribirme o enviarme información que consideres importante por si acaso no me explique feliz día...
Respuesta
1
No se si ya tengas la solución pero según tengo entendido cuando haces una consulta sql con esta estructura:
"select * from tabla"
Es más pesada para ejecutarse
Es mejor y más rapido hacerlo definiendo que campos vas a consultar por ejemplo
"select nombre, apellido from mitabla"...
Suponiendo que mitabla se compone de 9 campos, es más rapido cargar solo los datos necesarios que todos los campos..
Bueno.
Muchas gracias tomaré en cuenta tu recomendación que suena muy lógica.
Cierto el problema ya lo resolví usando SQL Server el cual tiene un motor de base de datos mucho más potente. También hice pruebas con MySQL e igualmente mejoró la velocidad.
Gracias de todas formas.
[email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas