我正在尝试开发一个库,以允许用户指定任意数据结构,并根据他们定义的结构轻松地设置对自动生成的postgres数据库执行CRUD操作的端点。
目前,我一直在使用gorm,并且能够基于用户定义的结构集自动生成数据库,该结构集支持所有类型的关系(具有一个,一对多等等)。我能够插入并通过预加载检索嵌套结构。
这就是效率问题所在。尽管我可以将查询放入预加载功能中,但与Java的hybernate如何通过单个查询进行查询相比,它仍然可以进行多个查询。
例如,如果用户定义:
type Member struct {
ID string
FirstName string
Hometown Hometown `gorm:"ForeignKey:MemberRefer"`
}
type Hometown struct {
ID string
City string
Province string
MemberRefer string
}
假设我们要查询居住在温尼伯市的所有20岁以上的成员。 20岁以上可能有100万会员,但在温尼伯只有少数人居住。在单个查询中,postgres将确定首先运行哪个查询,以最大化性能。
但是,在gorm中,它将首先运行用户查询:
SELECT * FROM "members" WHERE (age > '20')
,然后运行家乡查询:SELECT * FROM "hometowns" WHERE ("member_refer" IN (...)) AND (city = 'Manitoba')
。这确实会损害大型数据库的性能。
有人知道golang中可以在单个查询中使用的Orm吗?
谢谢