我有一个具有单个主机和几百个模式的mysql数据库,其中每个模式都有相同的表(行数不同)。我要在此处执行的操作是使用相同的查询列表查询某些(或全部)模式,并将这些结果保存以供以后使用。
我正在使用golang的database/sql
来查询数据库,我想使用单个连接池,并通过并行查询每个模式来实现这一点(希望这样做更快)。
我在想像这样的东西:
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
并行查询不同的模式。到目前为止,我已经考虑过使用MySQL的USE
语句,但这不能工作,因为它会更改所有goroutine的架构。
有没有可能的解决方案?