2 回答
TA贡献1818条经验 获得超3个赞
一种可以同时运行 100 个查询的方法的建议是生成 100 个 goroutine,然后在它们全部运行后收集它们的结果。我不能说这是否会满足您的 1000 QPS 要求,但您可以尝试在您的硬件上以该 QPS 测试它以找出答案。
这是它的样子(伪代码):
type queryResult struct { ... }
func doQuery(qry MyQuery, resChan chan queryResult, wg *sync.WaitGroup) {
result := // do query
resChan <- result
wg.Done()
}
// in main:
resChan = make(chan queryResult, len(queries))
var wg sync.WaitGroup
for _, query := range queries {
go doQuery(query, resChan, &wg)
wg.Add(1)
}
wg.Wait()
close(resChan)
for res := range resChan {
// get results
}
如果您不需要结果,您可以sync.WaitGroup不使用结果通道来验证您的所有查询是否已完成。
如果您不想用完与数据库的所有连接,或者出于任何原因不想拥有 1000 个 goroutine,则可以使用此处描述的工作池:https ://gobyexample.com/worker-游泳池
TA贡献1848条经验 获得超2个赞
https://godoc.org/github.com/gocql/gocql#Session
Session是用户用来与数据库交互的接口。多个 goroutine 并发使用是安全的,典型的使用场景是让一个全局会话对象与整个 Cassandra 集群进行交互。
典型的使用场景是一个 Session 被多个 goroutine 访问。
- 2 回答
- 0 关注
- 216 浏览
添加回答
举报
