Rupturas y reconciliaciones, resolviendo N+1 a través de límites de bases de datos
En una configuración de base de datos única, cuando necesitamos que un objeto de
base de datos Django haga referencia a otras tablas, para disminuir la cantidad
de búsquedas atómicas (N+1) usaríamos prefetch_related() en caso de
relaciones ManyToMany y select_related() en relaciones OneToOne o ManyToOne.
Pero, ¿qué pasa cuando tus datos viven en dos bases de datos diferentes?
Imagina que estás construyendo un sistema de monitoreo. Tus eventos de series temporales viven en una base de datos especializada optimizada para cargas de trabajo con muchas escrituras (piensa en TimescaleDB, InfluxDB, o incluso una instancia separada de PostgreSQL). Mientras tanto, tus datos de referencia—usuarios, dispositivos, ubicaciones—viven en tu base de datos de aplicación principal, y necesitas mostrar esos eventos con contexto legible para humanos.
Leer más...Tags: python, Django, Optimización
Los únicos Nepo babies útiles, vistas basadas en clases de Django
Aunque no soy un gran fanático del uso de POO en todos los problemas y paradigmas de programación, hay lugares donde puedo ver su utilidad. Uno de esos lugares es cuando se crea una aplicación de API REST simple. He conocido las vistas basadas en clases de Django desde hace mucho tiempo, pero la cosa es que siempre las he visto como una idea tardía, porque nunca son lo que quiero que sean, y antes de que pienses en Django Rest-Framework, quiero decirte que tampoco resuelve algunos de los problemas que normalmente encontrarías, como las optimizaciones de consultas. Esta guía está pensada para personas que quieren evitar las dependencias infinitas y disfrutan diseñando soluciones propias, adaptadas a sus necesidades.
Leer más...Tags: python, Django
Paralelismo en Python para el procesamiento de nubes de puntos
LAS y su contraparte comprimida LAZ son formatos de archivo populares para almacenar información de nubes de puntos, típicamente generados por tecnología LiDAR. LiDAR, o Light Detection and Ranging, es una tecnología de teledetección utilizada para medir distancias y crear mapas 3D altamente precisos de objetos y paisajes. La información de la nube de puntos almacenada consiste principalmente en coordenadas X, Y y Z, intensidad, color, clasificación de características, tiempo GPS y otros campos personalizados proporcionados por el escáner. Los archivos LAS comprenden millones de puntos que describen con precisión el entorno u objeto detectado, lo que hace que su análisis sea una tarea desafiante.
Leer más...Tags: python, LAS, LAZ, PointCloud, LiDAR
Metaprograma tus problemas hasta hacerlos desaparecer
La metaprogramación es una herramienta útil cuando quieres incorporar comportamiento general en tu programa sin tener que agregar código repetitivo extenso a lo largo de él. Esta práctica típicamente es empleada por individuos que crean frameworks o herramientas de desarrollo. La idea detrás de la metaprogramación es proporcionarte una visión inicial de cómo se logran tales tareas, con la esperanza de inspirar ideas para futuros proyectos de diseño.
Para darle sentido a todos los conceptos discutidos aquí, deberías estar usando Python versión 3.6 o posterior y tener un entendimiento básico de decoradores, funciones y clases. En el caso que estamos estudiando, registraremos los nombres de las funciones llamadas dentro de un programa Python existente.
Leer más...Tags: python, metaprogramación
Transferencia de archivos entre servicios en la nube (AWS a Azure)
A veces es un requisito transferir archivos de un servicio en la nube a otro. Al menos ese fue el desafío que encontré mientras desarrollaba un servicio web de clasificación de archivos. A mitad del ciclo de desarrollo, la gerencia cambió de proveedor de nube debido a algunos jugosos descuentos de Azure y la tan grandiosa integración de office 365 que todos aman.
Debido a esto, el compromiso alcanzado para poder continuar a la misma velocidad de desarrollo y aún así reducir la factura de servicios en la nube, fue continuar trabajando en AWS en el servicio web, pero los archivos, después de finalizado el proceso, deben ser transferidos a Azure.
Leer más...Tags: python, AWS, Azure