说明
在基于gorm开发应用时,为了方便获取表关联的数据,偶尔会使用这样的写法:Preload(clause.Associations)
。这个写法能预加载和该表关联的所有关系表,非常方便。但这里有个坑:如果一张表关联了另一张无关紧要的大表,那么会造成数据量特别庞大,不但查询时间长,还可能导致无法顺利通过网络请求发送给客户端。
比如最近七镜使用grpc时,客户端就遇到了这么个错误:
error: grpc: received message larger than max (4339743 vs. 4194304)
- 意思是接收到服务端的消息太大了
解决办法
服务端做表关联数据时,需要哪些表就写哪些表,不要图简单写:Preload(clause.Associations)
。比如我要一个名叫BindProfiles
的关联表,那就写 Preload(clause.Associations)
。
网友评论