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 關注
- 203 瀏覽
添加回答
舉報