Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Ent es un potente framework de entidades que ayuda a los desarrolladores a escribir código limpio que se traduce en consultas de base de datos (potencialmente complejas). A medida que crece el uso de tu aplicación, no pasa mucho tiempo antes de que encuentres problemas de rendimiento con tu base de datos. Solucionar problemas de rendimiento en bases de datos es notoriamente difícil, especialmente cuando no cuentas con las herramientas adecuadas.
El siguiente ejemplo muestra cómo el código de consulta de Ent se traduce en una consulta SQL.

Example 1 - ent code is translated to SQL query
Tradicionalmente, ha sido muy difícil correlacionar las consultas de base de datos de bajo rendimiento con el código de aplicación que las genera. Las herramientas de análisis de rendimiento de bases de datos pueden ayudar a identificar consultas lentas mediante el análisis de los registros del servidor, pero ¿cómo se pueden rastrear hasta la aplicación?
Sqlcommenter
A principios de este año, Google presentó Sqlcommenter. Sqlcommenter es
an open source library that addresses the gap between the ORM libraries and understanding database performance. Sqlcommenter gives application developers visibility into which application code is generating slow queries and maps application traces to database query plans
En otras palabras, Sqlcommenter añade metadatos de contexto de aplicación a las consultas SQL. Esta información luego puede usarse para proporcionar información significativa. Lo logra agregando comentarios SQL a la consulta que transportan metadatos pero son ignorados por la base de datos durante la ejecución.
Por ejemplo, la siguiente consulta contiene un comentario con metadatos sobre la aplicación que la emitió (users-mgr), qué controlador y ruta la activaron (users y user_rename, respectivamente), y el controlador de base de datos utilizado (ent:v0.9.1):
update users set username = ‘hedwigz’ where id = 88
/*application='users-mgr',controller='users',route='user_rename',db_driver='ent:v0.9.1'*/
Para probar cómo el análisis de metadatos recopilados por Sqlcommenter puede ayudarnos a entender mejor los problemas de rendimiento, considere este ejemplo: Google Cloud lanzó recientemente Cloud SQL Insights, un producto de análisis de rendimiento SQL basado en la nube. En la imagen inferior, vemos una captura del panel de Cloud SQL Insights que muestra que la ruta HTTP 'api/users' está causando muchos bloqueos en la base de datos. También podemos ver que esta consulta se llamó 16.067 veces en las últimas 6 horas.

Screenshot from Cloud SQL Insights Dashboard
Este es el poder de las etiquetas SQL: proporcionan correlación entre la información a nivel de aplicación y los monitores de tu base de datos.
sqlcomment
sqlcomment es un driver de Ent que añade metadatos a las consultas SQL usando comentarios siguiendo la especificación sqlcommenter. Al envolver un driver existente de Ent con sqlcomment, los usuarios pueden aprovechar cualquier herramienta compatible con el estándar para diagnosticar problemas de rendimiento de consultas.
Sin más preámbulos, veamos sqlcomment en acción.
Primero, para instalar sqlcomment ejecuta:
go get ariga.io/sqlcomment
sqlcomment envuelve un driver SQL subyacente, por lo tanto, debemos abrir nuestra conexión SQL usando el módulo sql de ent, en lugar del popular helper ent.Open.
Asegúrate de importar entgo.io/ent/dialect/sql en el siguiente fragmento
// Create db driver.
db, err := sql.Open("sqlite3", "file:ent?mode=memory&cache=shared&_fk=1")
if err != nil {
log.Fatalf("Failed to connect to database: %v", err)
}
// Create sqlcomment driver which wraps sqlite driver.
drv := sqlcomment.NewDriver(db,
sqlcomment.WithDriverVerTag(),
sqlcomment.WithTags(sqlcomment.Tags{
sqlcomment.KeyApplication: "my-app",
sqlcomment.KeyFramework: "net/http",
}),
)
// Create and configure ent client.
client := ent.NewClient(ent.Driver(drv))
Ahora, cada vez que ejecutemos una consulta, sqlcomment añadirá un sufijo a nuestra consulta SQL con las etiquetas configuradas. Si ejecutáramos la siguiente consulta:
client.User.
Update().
Where(
user.Or(
user.AgeGT(30),
user.Name("bar"),
),
user.HasFollowers(),
).
SetName("foo").
Save()
Ent generaría la siguiente consulta SQL comentada:
UPDATE `users`
SET `name` = ?
WHERE (
`users`.`age` > ?
OR `users`.`name` = ?
)
AND `users`.`id` IN (
SELECT `user_following`.`follower_id`
FROM `user_following`
)
/*application='my-app',db_driver='ent:v0.9.1',framework='net%2Fhttp'*/
Como puedes ver, Ent generó una consulta SQL con un comentario al final que contiene toda la información relevante asociada a esa consulta.
sqlcomment admite más etiquetas y tiene integraciones con OpenTelemetry y OpenCensus. Para ver más ejemplos y escenarios, visita el repositorio de GitHub.
Resumen final
En este artículo he mostrado cómo añadir metadatos a las consultas mediante comentarios SQL ayuda a correlacionar código fuente con consultas de base de datos. Después presenté sqlcomment, un driver para Ent que añade etiquetas SQL a todas tus consultas. Finalmente, vimos sqlcomment en acción instalándolo y configurándolo con Ent. Si te gusta el código y/o quieres contribuir, no dudes en visitar el proyecto en GitHub.
¿Tienes preguntas? ¿Necesitas ayuda para empezar? Únete a nuestro servidor de Discord o canal de Slack.
- Suscríbete a nuestro Newsletter
- Síguenos en Twitter
- Únete a #ent en Gophers Slack
- Únete al Ent Discord Server