У меня есть база данных mysql с одним хостом и несколькими сотнями схем, где у каждой схемы есть идентичные таблицы (и разное количество строк).Здесь я хочу запросить некоторые (или все) схемы с одинаковым списком запросов и сохранить их для дальнейшего использования.
Я использую database/sql
golang для запросов к базе данных, и я хочу это сделатьс одним пулом соединений и параллельным запросом каждой схемы (надеюсь, что так будет быстрее).
Я представляю что-то вроде этого:
func QuerySchemas(queryList []string, schemaList []string) {
// Create a connection pool
db, err := sql.Open("mysql", "user:password@tcp(db_host)/")
if err != nil {
log.Fatal(err)
}
for _, schema := range schemaList {
// Query each schema in parallel, probably with goroutine
go func(targetSchema string) {
// ...
// Let database/sql use targetSchema for this goroutine
// ...
for _, query := range queryList {
rows, err := db.Query(query)
// ...
// Save results and do other things
// ...
}
}(schema)
}
}
Но я не могу найти, как разрешить database/sql
запросить разные схемы параллельно.До сих пор я думал об использовании USE
предложений MySQL, но это не сработало бы, так как это изменяет схему для всех программ.
Есть ли какие-либо возможные решения?