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

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

go couchbase (gocb) 錯誤 - 不明確的超時或明確的超時

go couchbase (gocb) 錯誤 - 不明確的超時或明確的超時

Go
皈依舞 2023-01-03 16:47:06
我剛開始使用 Go 中的 Couchbase,使用庫 gocb。就像嘗試向我的服務器查詢特定 ID 并獲得結果的概念證明一樣。下面是修改后的代碼示例。cOpts := gocb.ClusterOptions{        Authenticator: gocb.PasswordAuthenticator{            Username: "user",            Password: "pw",        },    }    cluster, err := gocb.Connect("couchbase://my.dev.server.net/", cOpts)    if err != nil {        panic(err)    }    qOpts := gocb.QueryOptions{}    // create query    queryStr := "SELECT * FROM myBucket WHERE id = '123456789'"    rows, err := cluster.Query(queryStr, &qOpts)    if err != nil {        panic(err)    }    fmt.Printf("rows: %v\n", rows)    for rows.Next() {        var intfc interface{}        err = rows.Row(&intfc)        if err != nil {            panic(err)        }        fmt.Printf("interface result: %v\n", intfc)    }couchbase 服務器在 5.1 上。我要么得到...panic: ambiguous timeout | {"statement":"SELECT * FROM myBucketName WHERE id = '123456789'","client_context_id":"cdd52a06-c7a5-4d3d-8r26-99fg806d559e"}...當我運行上面的代碼時。或者 如果我在之后輸入以下幾行,gocb.Connect(...我會得到之后的錯誤。err = cluster.WaitUntilReady(25*time.Second, &gocb.WaitUntilReadyOptions{DesiredState: gocb.ClusterStateOnline})if err != nil {    panic(err)}...錯誤...panic: unambiguous timeout | {"InnerError":{"InnerError":{"InnerError":{},"Message":"unambiguous timeout"}},"OperationID":"WaitUntilReady","Opaque":"","TimeObserved":25000263891,"RetryReasons":["NOT_READY"],"RetryAttempts":105,"LastDispatchedTo":"","LastDispatchedFrom":"","LastConnectionID":""}  注意:我在這里更改了Username, Password, Server/connStr,bucket和id只是為了舉例。我在這里錯過了什么?
查看完整描述

1 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

所有其他響應都有幫助,但直到我提出該建議并cluster.Bucket("mybucket")在連接后添加之后才起作用。


缺少的一件事是輸入“Bucket”名稱。見下文...


除了@vsr 的幫助和回答之外,我剛剛在網站上的文檔中找到了一些關于此的內容。

[https://docs.couchbase.com/go-sdk/current/howtos/n1ql-queries-with-sdk.html](Couchbase Docs)在剛剛入門的Golang例子中,在代碼的注釋中提到'對于服務器版本 6.5 或更高版本,您不需要在此處打開存儲桶',然后下一行將打開一個存儲桶。好資料。


    cOpts := gocb.ClusterOptions{

        Authenticator: gocb.PasswordAuthenticator{

            Username: "user",

            Password: "pw",

        },

    }


    cluster, err := gocb.Connect("couchbase://my.dev.server.net/", cOpts)

    if err != nil {

        panic(err)

    }


    bucketName := "myBucket"

    cluster.Bucket(bucketName)


    qOpts := gocb.QueryOptions{}


    // create query

    queryStr := "SELECT * FROM myBucket WHERE id = '123456789'"


    rows, err := cluster.Query(queryStr, &qOpts)

    if err != nil {

        panic(err)

    }


    fmt.Printf("rows: %v\n", rows)


    for rows.Next() {

        var intfc interface{}

        err = rows.Row(&intfc)

        if err != nil {

            panic(err)

        }

        fmt.Printf("interface result: %v\n", intfc)

    }

只需添加該cluster.Bucket("myBucket")行即可完成這項工作。

服務器很舊,是一個缺乏資源的開發服務器,所以我也提高了超時時間,因為我知道它會很慢。cOpts我通過將集群選項(在代碼中命名)調整為以下來增加超時...


    cOpts := gocb.ClusterOptions{

        Authenticator: gocb.PasswordAuthenticator{

            Username: "user",

            Password: "pw",

        },

        TimeoutsConfig: gocb.TimeoutsConfig{

            ConnectTimeout: 95 * time.Second,

            QueryTimeout:   95 * time.Second,

            SearchTimeout:  95 * time.Second,

        },

    }

這會將超時時間延長到 95 秒,我不需要那么多,但服務器速度足夠慢,以至于在 UI 中需要 40 秒才能完成相同的查詢,所以我只是想確定一下。

我還調整了查詢的超時時間。我不確定它們之間有什么區別,但我在下面進行了調整。


    qOpts := gocb.QueryOptions{}

    qOpts.Readonly = true

    qOpts.ScanWait = 95 * time.Second

    qOpts.Timeout = 95 * time.Second

此外,如果您不知道,我是 couchbase 的新手,查詢沒有使用索引字段。我查找了該存儲桶的索引字段并將其添加到查詢中,這樣時間減少了一半以上。


編輯:使用USE KEYSN1QL 中的語句似乎非??欤热魏尾樵兌伎?。我調整了代碼,所以qryStr查詢字符串如下所示......


queryStr := "SELECT * FROM myBucket USE KEYS ['123456789']"


查看完整回答
反對 回復 2023-01-03
  • 1 回答
  • 0 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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