Retroceder   Foros del Web > Programación para sitios web > ASP Clásico

Respuesta
 
Herramientas Desplegado
Antiguo 24-abr-2008, 03:15   #1 (permalink)
eeeee ha deshabilitado el karma
 
Avatar de eeeee
 
Fecha de Ingreso: febrero-2004
Ubicación: Almería
Mensajes: 385
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
eeeee está desconectado   Responder Citando
Antiguo 24-abr-2008, 07:16   #2 (permalink)
Moderador
Myakire llegará a ser famoso muy prontoMyakire llegará a ser famoso muy prontoMyakire llegará a ser famoso muy pronto
 
Avatar de Myakire
 
Fecha de Ingreso: noviembre-2002
Mensajes: 6.486
Enviar un mensaje por Yahoo  a Myakire
Re: código que deja bloqueado al servidor

Cuántos registros tiene tu tabla?
Myakire está desconectado   Responder Citando
Antiguo 24-abr-2008, 08:35   #3 (permalink)
eeeee ha deshabilitado el karma
 
Avatar de eeeee
 
Fecha de Ingreso: febrero-2004
Ubicación: Almería
Mensajes: 385
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
eeeee está desconectado   Responder Citando
Antiguo 24-abr-2008, 10:41   #4 (permalink)
Moderador
Myakire llegará a ser famoso muy prontoMyakire llegará a ser famoso muy prontoMyakire llegará a ser famoso muy pronto
 
Avatar de Myakire
 
Fecha de Ingreso: noviembre-2002
Mensajes: 6.486
Enviar un mensaje por Yahoo  a Myakire
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
Myakire está desconectado   Responder Citando
Antiguo 24-abr-2008, 10:47   #5 (permalink)
Niko1980 ha deshabilitado el karma
 
Fecha de Ingreso: abril-2008
Ubicación: Argentina
Mensajes: 20
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
Niko1980 está desconectado   Responder Citando
Antiguo 24-abr-2008, 10:59   #6 (permalink)
Moderador
Myakire llegará a ser famoso muy prontoMyakire llegará a ser famoso muy prontoMyakire llegará a ser famoso muy pronto
 
Avatar de Myakire
 
Fecha de Ingreso: noviembre-2002
Mensajes: 6.486
Enviar un mensaje por Yahoo  a Myakire
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)
Myakire está desconectado   Responder Citando
Antiguo 26-abr-2008, 05:49   #7 (permalink)
eeeee ha deshabilitado el karma
 
Avatar de eeeee
 
Fecha de Ingreso: febrero-2004
Ubicación: Almería
Mensajes: 385
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
eeeee está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 05:28.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93