为了账号安全,请及时绑定邮箱和手机立即绑定

许多同时查询 gocqlx

许多同时查询 gocqlx

Go
慕容森 2022-06-01 17:37:21
gocqlx 是否有内置方法来执行许多同时查询?我考虑过使用 IN 来选择许多不同的记录,但根据这个答案,使用许多查询比使用 IN 子句更好。如果 gocqlx 本身不具备并行运行多个查询的能力,我怎样才能最有效地自己实现呢?我需要使用它来进行多达 100 个同时查询,并且此过程可能需要每秒运行多达 10 次,因此每秒大约 100 * 10 = 1000 个查询。
查看完整描述

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-游泳池


查看完整回答
反对 回复 2022-06-01
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

https://godoc.org/github.com/gocql/gocql#Session

Session是用户用来与数据库交互的接口。多个 goroutine 并发使用是安全的,典型的使用场景是让一个全局会话对象与整个 Cassandra 集群进行交互。

典型的使用场景是一个 Session 被多个 goroutine 访问。


查看完整回答
反对 回复 2022-06-01
  • 2 回答
  • 0 关注
  • 216 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号