1 回答

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']"
- 1 回答
- 0 关注
- 157 浏览
添加回答
举报