我有一個文檔數組來批量索引使用 github.com/elastic/go-elasticsearch/v8 庫。每個文檔都可以添加到少數幾個不同索引之一,因此我的代碼如下所示: var indexers map[string]esutil.BulkIndexer = make(map[string]esutil.BulkIndexer) for i := range documents { var bi esutil.BulkIndexer var ok bool var err error if bi, ok = indexers[documents[i].index]; !ok { bi, err = esutil.NewBulkIndexer(esutil.BulkIndexerConfig{ Index: documents[i].index, // The index name Client: client, // The Elasticsearch client* Same isntance for all indexers* NumWorkers: BULK_NUM_WORKERS, // The number of worker goroutines FlushBytes: int(BULK_FLUSHBYTES), // The flush threshold in bytes FlushInterval: 5 * time.Second, // The periodic flush interval }) if err != nil { fmt.Printf("Error creating the indexer: %s", err) continue } indexers[documents[i].indexName] = bi }這個想法是我有一個地圖,它們都共享相同的實例。所以我的問題是,幾個人共享相同的實例是否可行且安全,或者它們各自需要一個單獨的實例?esutil.BulkIndexerelasticsearch.Clientesutil.BulkIndexerelasticsearch.Clientelasticsearch.Client
1 回答
桃花長相依
TA貢獻1860條經驗 獲得超8個贊
找不到官方文檔的詳細信息。但是,查看此鏈接,建議在并行請求的工作線程(go例程)之間共享客戶端。
客戶端連接是在包初始化時創建的,并且以并行方式發生的后續請求共享同一客戶端。
從上面的鏈接
package httpexample
import (
"github.com/elastic/go-elasticsearch/v7"
)
var client *elasticsearch.Client
func init() {
var err error
... # Client configuration
client, err = elasticsearch.NewClient(cfg)
if err != nil {
log.Fatalf("elasticsearch.NewClient: %v", err)
}
}
//This method will be called in parallel
func HttpExample(w http.ResponseWriter, r *http.Request) {
... # Client usage
}
注意:我是專家,可以推薦使用多個批量索引器。
- 1 回答
- 0 關注
- 92 瀏覽
添加回答
舉報
0/150
提交
取消
