Foros del Web » Programando para Internet » ASP Clásico »

código que deja bloqueado al servidor

Estas en el tema de código que deja bloqueado al servidor en el foro de ASP Clásico en Foros del Web. Hola a todos. Tengo este código: Código: <% Dim Conexion, Tabla, qry, connectstr, db_name, db_username, db_userpassword, db_server db_server = "my.server.net" db_name = "name" db_username = ...
  #1 (permalink)  
Antiguo 24/04/2008, 03:15
Avatar de eeeee  
Fecha de Ingreso: febrero-2004
Ubicación: Almería
Mensajes: 397
Antigüedad: 21 años, 2 meses
Puntos: 0
código que deja bloqueado al servidor

Hola a todos.
Tengo este código:
Código:
<%
Dim Conexion, Tabla, qry, connectstr, db_name, db_username, db_userpassword, db_server
db_server = "my.server.net"
db_name = "name"
db_username = "username"
db_userpassword = "password"
connectstr = "Driver={MySQL ODBC 3.51 Driver};SERVER=" & db_server & ";DATABASE=" & db_name & ";UID=" & db_username & ";PWD=" & db_userpassword
Set Conexion = Server.CreateObject("ADODB.Connection")
Conexion.Open connectstr

Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set folder = objFSO.GetFolder (Server.MapPath("/public/"& Request("seleccion") &"/"&Request("letra")&"/"))
 Response.Write folder &" Haciéndose. <br>"
 For each File in folder.Files
nuevonombre = replace(file.name,"'","''")

qry = "SELECT * FROM "& Request("seleccion") &" Where UCase(pal) = '" & nuevonombre & "'"
set Tabla = Conexion.execute(qry)
If Tabla.BOF And Tabla.EOF Then 'si no esixte delete 
  hipervinculo=folder & "/" & file.name
  Response.Write hipervinculo &" Eliminado. <br>"
  objFSO.DeleteFile(hipervinculo)
end if
 Tabla.close
 next 'file
  Response.Write folder &" Terminada. <br>"
Conexion.Close
%>
El cual recorre un directorio y compara cada archivo con la base de datos, si no está en la base de datos lo elimina del directorio.

Funciona bien, pero deja al server pillado durante el tiempo que tarda en recorrer el directorio y tarda más de media hora en una carpeta con unos 1000 archivos.

Alguien puede decirme por qué pasa esto ??
Que hay mal en el código ??

He probado también con base de datos access y hace lo mismo.

Salu2
__________________
Eusol .............
aprendiendo de ustedes
________________________

http://www.alicun.com
  #2 (permalink)  
Antiguo 24/04/2008, 07:16
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Re: código que deja bloqueado al servidor

Cuántos registros tiene tu tabla?
  #3 (permalink)  
Antiguo 24/04/2008, 08:35
Avatar de eeeee  
Fecha de Ingreso: febrero-2004
Ubicación: Almería
Mensajes: 397
Antigüedad: 21 años, 2 meses
Puntos: 0
Re: código que deja bloqueado al servidor

Hola Myakire:
La tabla tiene 360.000 registros.

Pero un código que hace lo contrario de este, es decir recorre todos los directorios de una carpeta (30) y va haciendo la base de datos, tarda algo mas de una hora en ingresar los 360.000 registros y no bloquea nada.

Salu2
__________________
Eusol .............
aprendiendo de ustedes
________________________

http://www.alicun.com
  #4 (permalink)  
Antiguo 24/04/2008, 10:41
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Re: código que deja bloqueado al servidor

mmmmm, a ver, dices que si a ese código le campo estas lineas:

Cita:
qry = "SELECT * FROM "& Request("seleccion") &" Where UCase(pal) = '" & nuevonombre & "'"
set Tabla = Conexion.execute(qry)
If Tabla.BOF And Tabla.EOF Then 'si no esixte delete
hipervinculo=folder & "/" & file.name
Response.Write hipervinculo &" Eliminado. <br>"
objFSO.DeleteFile(hipervinculo)
end if
Por un Conexion.execute("INSERT INTO "& Request("seleccion") &" (Pal) VALUES ("&nuevonombre &")", no te bloquea nada.

Entonces lo tardado esta en la lectura las aproximadamente 360 mil veces, ¿es lógico no?

Yo en lo particular soy enemigo de hacer por medio de Web operaciones administrativas que se deberían ejecutar directamente desde una aplicación nativa de windows (un programa en otro lenguaje, que no use el IIS ni al IExplorer de intermediarios), pero si por la razón que sea esto es así, pues no creo que hay mucho que hacer asñi como lo tienes, hay que cambiar como haces las búsquedas.

No es lo mismo simplemente escribir 360 mil veces que buscar 360 mil veces un valor entre 360 mil registros y luego si existe, borrar un archivo y más si todo lo haces usando un intermediario como es el IIS para este caso.

Quitar el asterisco de la consulta es algo recomendable, para cualquier sentencia select; pero fuera de eso .... yo lo que intentaría hacer es regresar los 360 mil registros una sola vez de manera ordenada por nombre, lo guardaría en un vector (getRows) y aplicaría un algoritmo de búsqueda binaria por cada nombre de archivo. Estoy seguro que eso reduciría un 1000% (o mas) el tiempo de respuesta de tu aplicación.

Claro que tienes que cambiarla un poco pero yo en tu lugar lo haría así

Saludos
  #5 (permalink)  
Antiguo 24/04/2008, 10:47
 
Fecha de Ingreso: abril-2008
Ubicación: Argentina
Mensajes: 20
Antigüedad: 17 años
Puntos: 2
Re: código que deja bloqueado al servidor

Podrias ver tambien de hacer un procedimiento almacenado en el access, en realidad una consulta y que desde ahi se comunique con el sistema operativo, ahi estarias casi evitando la parte web. Ademas creo que el access tiene un tipo de acceso mas directo que desde una pagina web. Ojala te sirva.
Saludos
  #6 (permalink)  
Antiguo 24/04/2008, 10:59
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Re: código que deja bloqueado al servidor

Cita:
hacer un procedimiento almacenado en el access
jejeje, eso en el hipotético caso de que existiera un Access que soportara procedimientos almacenados

Aunque hiciera la lectura y el borrado del archivos desde un SP en MySQL (no se si MySQL posea alguna forma para hacer esto) no creo que se mejore demasiado el rendimiento y el problema del "bloqueo" ya que ASP trabaja de forma síncrona, para hacerlo de forma asíncrona necesita de otro lenguaje o bien ejecutar un JOB (en Sql Server, no se cual sea su equivalenente de MySQL)
  #7 (permalink)  
Antiguo 26/04/2008, 05:49
Avatar de eeeee  
Fecha de Ingreso: febrero-2004
Ubicación: Almería
Mensajes: 397
Antigüedad: 21 años, 2 meses
Puntos: 0
Re: código que deja bloqueado al servidor

Pues la verdad Myakire es que no se como almacenarlo an getRows y hacer las consultas ahí.
Si me pones un ejemplo pequeño, trabajaré sobre él.

Salu2
__________________
Eusol .............
aprendiendo de ustedes
________________________

http://www.alicun.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:08.