Manejo de Grandes Volúmenes de Datos con Django

622 views
Skip to first unread message

Juan Vargas A.K.A RootWeiller

unread,
Apr 29, 2013, 3:17:44 PM4/29/13
to djan...@googlegroups.com
Saludos, tengo una BD que contiene unas 300 tablas y unos 2 millones de registros, puedo acceder a ella de manera tradicional, el problema está en la velocidad que toma para leer los datos y renderizarlos al template

¿existe una forma de ganar velocidad en las consultas con Django?

ejemplo en SQL crudo se tarda unos 19seg, cuando ejecuto con un queryset en django se tarda el doble o más en mostrarme los datos en el template

¿que sugerencia me dan?

Gracias de antemano 


--
Juan Vargas
(58) 412 - 8339868
@RootWeiller
"Si quieres que los demás te sigan, no tienes más que ir delante de ellos" Alfonso Alcántara 

Carlos Aguilar

unread,
Apr 29, 2013, 3:20:00 PM4/29/13
to djan...@googlegroups.com
Has seguido las recomendaciones para optimizar las queries en Django???

Normalmente, algunas llamadas en el template, generan más consultas, eso se puede evitar si sabes realizar las queries en la vista.

django-debug-toolbar es una gran cosa para depurar este tipo de aplicaciones.

Saludos.


2013/4/29 Juan Vargas A.K.A RootWeiller <rootwe...@gmail.com>

--
--
Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios del Framework Django de habla hispana" de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a djan...@googlegroups.com
Para anular la suscripción a este grupo, envíe un mensaje a django-es-...@googlegroups.com
Para obtener más opciones, visita este grupo en http://groups.google.com.bo/group/django-es.
---
Has recibido este mensaje porque estás suscrito al grupo "Django-es" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a django-es+...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 



--
Carlos Aguilar
Consultor Hardware y Software
DWD&Solutions
http://www.dwdandsolutions.com

Diego Uribe Gamez

unread,
Apr 29, 2013, 3:22:29 PM4/29/13
to djan...@googlegroups.com
yo rompería la consulta por partes, usabilidad.

que al usuario se le muestre una info y en un scrool infinito siga consultando usando ajax, ampliando la info.

o con un next


--
--
Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios del Framework Django de habla hispana" de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a djan...@googlegroups.com
Para anular la suscripción a este grupo, envíe un mensaje a django-es-...@googlegroups.com
Para obtener más opciones, visita este grupo en http://groups.google.com.bo/group/django-es.
---
Has recibido este mensaje porque estás suscrito al grupo "Django-es" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a django-es+...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 



--
  Diego Alonso Uribe Gamez

Desarrollador web

Twitter: @DiegoUG

Google+: http://gplus.to/diegoug



Juan Vargas A.K.A RootWeiller

unread,
Apr 29, 2013, 3:45:42 PM4/29/13
to djan...@googlegroups.com
Si, optimice de acuerdo al manual oficial, sin embargo continua siendo lento, el motor de BD es MySQL, y con respecto a la paginación si la hago, le entrego 30 registros por página.

Carlos Aguilar

unread,
Apr 29, 2013, 3:47:11 PM4/29/13
to djan...@googlegroups.com
Tienes indices en los lugares correctos de las tablas?

Has marcado estos indices en django?

Saludos.


2013/4/29 Juan Vargas A.K.A RootWeiller <rootwe...@gmail.com>



--

Diego Uribe Gamez

unread,
Apr 29, 2013, 3:51:11 PM4/29/13
to djan...@googlegroups.com
mmmm la recomendación de django-debug-toolbar es tu mejor opción, aquí podrás ver donde se esta quedando la consulta, lo hace registro por registro, 

En mi caso paso que la consulta era muy larga con muchos campos, el buscaba de todos los campos y la solución fue que buscara del campo fecha desde y hasta, limitando el tamaño de la consulta, también la puedes limitar con [:50] al final del query y esto sacara solo 50 resultados.


Charly Román

unread,
Apr 29, 2013, 4:01:31 PM4/29/13
to djan...@googlegroups.com
Hay varias cosas que revisar, pero como ya te dijeron, instala django-debug-toolbar y observa que es lo que pasa:

- Si tu consulta usa foreignkeys, many2many o cualquier relación a otros modelos usa select_related y prefecth_related según corresponda
- No ordenes una consulta en orden aleatorio (order_by('?')), en MySQL es demasiado lento.
- Probablemente necesitas cachear algunas cosas para ganar velocidad en el sitio.

Juan Vargas A.K.A RootWeiller

unread,
Apr 29, 2013, 4:36:45 PM4/29/13
to djan...@googlegroups.com
Bueno, les cuento, la BD la hizo otra persona, con manage.py inspectdb cree los modelos, la BD es un desastre pues las tablas no están relacionadas, sin embargo las consultas las hago a tablas en especifico (sin relación).

Otra cosa es que instale el debug-toolbar-django pero me aparece en una sola ventana, en las ventanas donde hago las consultas no aparece, lo hice siguiendo esta config [0] 



VargasMolina

unread,
Apr 30, 2013, 10:22:52 AM4/30/13
to djan...@googlegroups.com
Haz pensado en cache ,

algo básico como :

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': os.path.join(CURRENT_PATH, 'cache/'),
    }
}

Gustavo Andres Angulo

unread,
Apr 30, 2013, 10:28:34 AM4/30/13
to djan...@googlegroups.com
Hola, algunas técnicas para optimizar la cuestión es usar separar la
presentación de los
datos, esto hace que puedas cargar tu template de una manera muy
rápida y luego puedes
obtener los datos para renderizar el contenido via ajax, ahora esta
información la puedes
preprocesar y la mantienes en un cache, aproximadamente tengo una plataforma
la cual tiene queries de 30 seg o más y de esta manera el tiempo
muerto de espera
de usuario se reduce a solo unos pocos segundos.


espero que puedas encontrar una solución.

buen día.

2013/4/29 Juan Vargas A.K.A RootWeiller <rootwe...@gmail.com>:

Tonny

unread,
Apr 30, 2013, 5:01:15 PM4/30/13
to djan...@googlegroups.com
On 04/30/2013 09:28 AM, Gustavo Andres Angulo wrote:
> Hola, algunas t�cnicas para optimizar la cuesti�n es usar separar la
> presentaci�n de los
> datos, esto hace que puedas cargar tu template de una manera muy
> r�pida y luego puedes
> obtener los datos para renderizar el contenido via ajax, ahora esta
> informaci�n la puedes
> preprocesar y la mantienes en un cache, aproximadamente tengo una plataforma
> la cual tiene queries de 30 seg o m�s y de esta manera el tiempo
> muerto de espera
> de usuario se reduce a solo unos pocos segundos.
>
>
> espero que puedas encontrar una soluci�n.
>
> buen d�a.
>
> 2013/4/29 Juan Vargas A.K.A RootWeiller <rootwe...@gmail.com>:
>> Saludos, tengo una BD que contiene unas 300 tablas y unos 2 millones de
>> registros, puedo acceder a ella de manera tradicional, el problema est� en
>> la velocidad que toma para leer los datos y renderizarlos al template
>>
>> �existe una forma de ganar velocidad en las consultas con Django?
>>
>> ejemplo en SQL crudo se tarda unos 19seg, cuando ejecuto con un queryset en
>> django se tarda el doble o m�s en mostrarme los datos en el template
>>
>> �que sugerencia me dan?
>>
>> Gracias de antemano
>>
>>
>> --
>> Juan Vargas
>> (58) 412 - 8339868
>> @RootWeiller
>> @ClubEmprendeVE
>> http://www.bolivarlug.org.ve
>> http://sinsitioweb.wordpress.com
>> Linux User 461138
>>
>> "Si quieres que los dem�s te sigan, no tienes m�s que ir delante de ellos"
>> Alfonso Alc�ntara
>>
>> --
>> --
>> Ha recibido este mensaje porque est� suscrito a Grupo "Grupo de Usuarios del
>> Framework Django de habla hispana" de Grupos de Google.
>> Si quieres publicar en este grupo, env�a un mensaje de correo
>> electr�nico a djan...@googlegroups.com
>> Para anular la suscripci�n a este grupo, env�e un mensaje a
>> django-es-...@googlegroups.com
>> Para obtener m�s opciones, visita este grupo en
>> http://groups.google.com.bo/group/django-es.
>> ---
>> Has recibido este mensaje porque est�s suscrito al grupo "Django-es" de
>> Grupos de Google.
>> Para anular la suscripci�n a este grupo y dejar de recibir sus correos
>> electr�nicos, env�a un correo electr�nico a
>> django-es+...@googlegroups.com.
>> Para obtener m�s opciones, visita https://groups.google.com/groups/opt_out.
>>
>>
No tengo experiencia en mysql pero de seguro debes optimizar esas tablas
primero, 2 millones realmente no es mucho, tengo un sistema en django
que consulta una tabla de aprox 200 millones de registros en una base de
datos postgres y tarda menos de un segundo, obviamente hay indices e
inclusive la tabla tiene varias particiones, creo que deberias tambien
explotar mas a la base, si dices q la base esta echa un desastre intenta
arreglarla que temprano que tarde te tocara hacerlo, o migrala a
postgres :) qu le encanta manejar millones de datos.

Saludos.
Reply all
Reply to author
Forward
0 new messages