Я пытаюсь разработать библиотеку на ходу, чтобы позволить пользователю указать произвольную структуру данных и легко настроить конечные точки, которые выполняют операции 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')
. Это действительно ухудшит производительность большой базы данных.
Кто-нибудь знает орму на Голанге, которая работает в одном запросе?
Спасибо