亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

許多同時查詢 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 關注
  • 203 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號