mysql - ¿Es posible realizar una consulta de base de datos asíncrona/paralela en una aplicación Django?
postgresql asynchronous (3)
Tengo páginas web que toman de 10 a 20 consultas de bases de datos para obtener todos los datos requeridos.
Normalmente, después de que se envía una consulta, el subproceso / proceso de Django se bloquea a la espera de que los resultados regresen, luego reanudaría la ejecución hasta que llegue a la siguiente consulta.
¿Hay alguna forma de emitir todas las consultas de forma asíncrona para que puedan ser procesadas por el servidor de la base de datos en paralelo?
Estoy usando MySQL, pero me gustaría conocer las soluciones para otras bases de datos también. Por ejemplo, escuché que Postgresql tiene una biblioteca de cliente asíncrono. ¿Cómo lo usaría en este caso?
Esta entrada de blog muy reciente parece implicar que no está integrada en los marcos de django o rails. Creo que cubre bien el tema y vale la pena leerlo junto con los comentarios.
http://www.eflorenzano.com/blog/post/how-do-we-kick-our-synchronous-addiction/ (Enlace roto)
Creo que recuerdo que Cal Henderson mencionó esta deficiencia en algún lugar de su excelente discurso http://www.youtube.com/watch?v=i6Fr65PFqfk
Mi ingenua suposición es que podrías hackear algo con bibliotecas de Python separadas, pero perderías muchas cosas de evaluación perezosa de ORM / plantilla que django da al punto en el que podrías estar usando otra pila. Por otra parte, si solo está optimizando algunas vistas en un proyecto de django grande, podría estar bien.
Tuve un problema similar y lo resolví con javascript / ajax
Simplemente cargue la plantilla con un marcado básico y luego haga varias consultas ajax para ejecutar las consultas y cargar los datos. Incluso puedes mostrar cargando animación. El usuario tendrá una sensación de web 2.0 en lugar de solo una carga sombría de la página. Por supuesto, esto significa varias solicitudes HTTP más por página, pero depende de usted decidir.
Así es como se ve mi ejemplo: http://artiox.lv/en/search?query=test&where_to_search=all (Enlace roto)