Получение произвольных вложенных данных в одном запросе с помощью ORM golang? - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь разработать библиотеку на ходу, чтобы позволить пользователю указать произвольную структуру данных и легко настроить конечные точки, которые выполняют операции CRUD в автоматически сгенерированной базе данных postgres, на основе структуры, которую они определяют.

На данный момент я использую 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 лет, но лишь немногие живут в Виннипеге. В одном запросе postgres определит, какой запрос нужно выполнить первым, чтобы максимизировать производительность.

Однако в gorm сначала будет выполнен запрос пользователя: SELECT * FROM "members" WHERE (age > '20') и затем выполните запрос в родном городе: SELECT * FROM "hometowns" WHERE ("member_refer" IN (...)) AND (city = 'Manitoba'). Это действительно ухудшит производительность большой базы данных.

Кто-нибудь знает орму на Голанге, которая работает в одном запросе?

Спасибо

...