使用golang ORM在单个查询中获取任意嵌套数据?

时间:2018-11-16 19:43:08

标签: sql postgresql go orm go-gorm

我正在尝试开发一个库,以允许用户指定任意数据结构,并根据他们定义的结构轻松地设置对自动生成的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吗?

谢谢

0 个答案:

没有答案