Mejores Prácticas para Bases de Datos y Acceso a Datos
Plazos de contexto, dimensionamiento de pools y observabilidad para consultas.
Busca en todas las páginas de la documentación
Plazos de contexto, dimensionamiento de pools y observabilidad para consultas.
Aplica estas reglas en la revisión de código, plantillas de servicios y runbooks para que cada manejador, repositorio y trabajador trate el SQL como un recurso compartido con propiedad clara y límites de cancelación.
Query sin Context prohibido) donde sea posible.*sql.DB por DSN por proceso, cableado en main. Evita que init() abra bases de datos de producción.MaxOpenConns a partir de cálculos de capacidad (db_max / réplicas). Previene incidentes de too many connections.PingContext al inicio con tiempo de espera de arranque. Falla el despliegue antes de que el tráfico llegue a DSNs incorrectos.db.Stats() a métricas (WaitCount, InUse, Idle). Alerta sobre el crecimiento de la espera del pool.*Context en cada ruta con ámbito de solicitud. Prohíbe Query/Exec sin Context en manejadores.ctx del manejador o RPC, no de Background(). Preserva la cancelación del cliente.statement_timeout de SQL cuando los drivers se retrasan. Defensa en profundidad para consultas descontroladas.ctx.Err() cuando la cancelación termina una consulta. Mapea al estado HTTP/gRPC correcto en el borde.sql.ErrNoRows a centinelas de dominio ErrNotFound. No expongas errores del driver a los clientes de la API.repo.GetOrder). Evita registrar SQL completo con secretos en producción.rows y stmt con defer en los repositorios. Las fugas agotan el pool.defer tx.Rollback() inmediatamente después de BeginTx. Confirma solo en la ruta de éxito.tx cuando sea posible. Las transacciones largas retienen bloqueos y conexiones del pool.down o irreversibilidad documentada en la revisión de migraciones. CI aplica up en una base de datos efímera.*sql.DB. El ORM no elimina el trabajo de operaciones.Preload en rutas activas.ctx a los manejadores de Redis/NATS/Kafka. El apagado vacía los trabajadores de forma cooperativa.-race en código que comparte repositorios entre goroutines. Detecta estado compartido inseguro por encima de SQL.Los métodos SQL de Nivel A de Context, el SQL solo con marcadores de posición y la CI de migraciones deben bloquear la fusión.
Las tablas de ajuste de pool y la política de TTL de caché se aplican mediante revisión.
Extrae el SQL a un paquete de almacenamiento detrás de una interfaz, inyéctalo desde main, mantén las firmas de los manejadores sin cambios una PR a la vez.
Sí, cuando enrutes repositorios de solo lectura a un DSN seguidor.
Documenta la consistencia eventual en los contratos de API.
Pasa el ctx de reconciliación a las llamadas del repositorio; no almacenes *sql.DB en la estructura del reconciliador sin patrones de inyección de main.
Habilita linters que detectan el mal uso del contexto y el manejo de errores; reglas de revisión personalizadas para SQL en manejadores.
Las APIs de borde usan tiempos de espera de base de datos más estrictos; los trabajadores por lotes usan presupuestos más largos pero aún propagan el ctx de apagado.
Escribe las diferencias en la tabla de tiempos de espera.
Requiere WithContext, inspecciona el SQL generado en staging, prohíbe sesiones globales sin ctx de solicitud.
Latencia de consulta p95/p99, tasa de error por operación, retraso de la versión de migración, tasa de aciertos de caché, retraso del consumidor.
Contexto e higiene SQL sí; el dimensionamiento del pool y las opciones de ORM pueden diferir en objetivos restringidos.
Verifica los objetivos de la placa en la compilación.
Las reglas de base de datos extienden las Mejores Prácticas del Paquete Context con políticas de pool y migración específicas del almacenamiento.
Versiones de Stack: Esta página fue escrita para Go 1.26.x (predeterminado GC Green Tea, go fix modernizers - verifica el parche en la compilación), chi (última versión - verifica en la compilación), gin (última versión - verifica en la compilación), echo (última versión - verifica en la compilación), google.golang.org/grpc (última versión - verifica en la compilación), sigs.k8s.io/controller-runtime (última versión - verifica en la compilación), kubebuilder (última versión - verifica en la compilación), tinygo (última versión - verifica objetivos de placa en la compilación), wazero (última versión - verifica en la compilación) y golangci-lint (última versión - verifica el conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 18 jul 2026