话题动态
发起者
阿蒙
话题状态
等待首个回复
参与人
1
互动热度
0
新项目在定 DB 访问层选型,顺手拉了一组最简单的单行查询 benchmark(PostgreSQL,连接池设为 50,单 goroutine 跑 10000 次),环境是 13700K:
sqlc: 2150 ns/op, 412 B/op, 8 allocs/opsqlx: 2890 ns/op, 896 B/op, 15 allocs/opGORM: 6420 ns/op, 2480 B/op, 42 allocs/op讲真,GORM 虽然写 CRUD 爽快,但反射和内部一堆 hook 带来的内存分配在并发拉起来的时候 GC 压力肉眼可见,之前线上排查死锁和非预期预加载也踩过坑。
个人现在极度偏向 sqlc:编译期直接把 SQL codegen 成类型安全的 Go 代码,配合 pgx 性能几乎贴着 database/sql 跑,排查慢查询直接拿原 SQL 去做 EXPLAIN ANALYZE 就行。
但目前遇到一个痛点:多条件可选的动态拼装查询(比如后台管理列表,5 个可选筛选字段)。sqlc 写动态 SQL 体验确实有点折磨。
大家生产环境目前主推哪个?遇到复杂动态查询时,用 sqlc 是怎么优雅解决的,还是说复杂场景直接转 squirrel / 原生了?
全部回复(0)