Comunidad de diseño web y desarrollo en internet online

Consulta en 10,000,000 de registros... problema al mostrarla

Citar            
MensajeEscrito el 17 Oct 2008 11:52 pm
Hola expertos... muy buen dia... acudo a ustedes una vez mas y esperando que puedan en verdad ayudarme con esto.

Lo mas seguro es que estoy haciendo las cosas mal... y por eso me encuentro ya desesperado y frustrado.

Tengo una tabla de mas de 10,000,000 de registros... son el historial de navegación de una empresa de gobierno. La forma de ingreso, no hay tanto problema... la hago secuencial y se insertan alrededor de 80,000 registros cada minuto, o sea que pienso que va bastante bien.

El problema es cuando quiero mostrar los datos que almacene... les comento la tabla esta conformada por los siguientes campos:

Código :

ip          varchar(20)
fecha       date
hora          time
uso_horario    varchar(10)
metodo       varchar(20)
url          varchar(500)
protocolo       varchar(20)
puerto       int(11)
numero        int(11)
id            int(11)


Como ven... solo uso una tabla, la verdad no creí necesario usar mas que esa... (espero estar en lo correcto sino, confió en sus sugerencias) el problema son las condiciones... debido a que estas tienen que cumplir con la función de un reporteador. Entonces... las consultas deben de cumplir los siguientes criterios.

Consultar todos los registros por IP
Consultar todos los registros por URL
Consultar todos los registros por FECHA
Consultar todos los registros por HORA

Estas consultas deben de ser relacionadas de tal forma que cumplan lo siguiente...

Yo puedo ordenar los datos por IP mostrando todas las URL's que visito esa IP, todas las FECHAS en las que visito la URL y la hora en esa fecha en la visito esa URL... Y asi para millones de registros...

Mas o menos lo anterior quedaria asi...

194.0.0.100
--> www.google.com.mx
    --> 10/10/2008
      --> 8:00 a.m.
      --> 10:00 a.m.
      --> 11:00 a.m.
      --> 8:00 p.m.

    --> 11/10/2008
      --> 8:00 a.m.
      --> 10:00 a.m.
      --> 11:00 a.m.
      --> 8:00 p.m.

--> www.yahoo.com.mx
    --> 10/10/2008
      --> 8:00 a.m.
      --> 10:00 a.m.
      --> 11:00 a.m.
      --> 8:00 p.m.

    --> 11/10/2008
      --> 8:00 a.m.
      --> 10:00 a.m.
      --> 11:00 a.m.
      --> 8:00 p.m.


Y asi... para cada IP y cada servidor visitado por esa IP, esa es una de las condiciones, las otras son similares, solo que ordenadas de diferente forma...

Por servidor
Por fecha
Por hora

Hice una serie de whiles anidados para hacer esa consulta... pero se tarda mucho tiempo... ojala puedan ayudarme... tengo que entregar esto cuanto antes...

Por navi_chavez

16 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 18 Oct 2008 04:38 am
Según entendi la preunta... creo que tan solo necesitas elaborar las queries determinando el orden de este modo:

Código :

SELECT * FROM `nombre_tabla`  WHERE `columna`='valor' ORDER BY ip, url, fecha, hora


Con este código la consulta quedaría ordenada en primera instancia por la ip, luego la Url... y así suscesivamente.

También, para que el procesamiento de las consultas este optimizado; recuerda poner como INDEX a las columnas que frecuentemente son usadas para obtener datos.

Por ShotoKan

45 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 18 Oct 2008 09:00 am
Tu base de datos no esta normalizada ni en la primera forma normal. Una base datos que no esta normalizada ni en la primera forma normal, es lógico que tengas problemas con millones de registros.

Así viendo rápido tu tabla, al menos URL e IP deben ser tablas aparte. En la tabla del log debes tener un Foreign Key asociado a la ip y a la url.

Luego, para lo que quieres hacer, con group by, es la mejor forma.


Pero como te digo, primero normaliza la BD, luego aprende a hacer Joins, y después aprende el group by. Son varias cosas las que necesitas aprender, pero cuando lo hagas, verás que es factible manejar millones de registros, solo hay que optimizar bien la información.

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.