为了账号安全,请及时绑定邮箱和手机立即绑定

golang couchbase gocb.RemoveOp - 不删除所有

golang couchbase gocb.RemoveOp - 不删除所有

Go
慕哥9229398 2021-12-07 10:18:56
我想我在某处犯了一个愚蠢的错误,但已经很长时间想不出来:( 代码很粗糙,我只是在测试东西。它会删除,但由于某些原因不是所有文件,我已经重写以将其全部删除一个,那没问题。我使用 Couchbase 的官方包 http://github.com/couchbase/gocb 这里是代码:var items []gocb.BulkOpmyQuery := gocb.NewN1qlQuery([Selecting ~ 283k documents from 1.5mln])rows, err := myBucket.ExecuteN1qlQuery(myQuery, nil)checkErr(err)var idToDelete map[string]interface{}for rows.Next(&idToDelete) {    items = append(items, &gocb.RemoveOp{Key: idToDelete["id"].(string)})}if err := rows.Close(); err != nil {    fmt.Println(err.Error())}if err := myBucket.Do(items);err != nil {    fmt.Println(err.Error())}这样它删除了大约 70k 个文件,我再次运行它它又删除了 43k 个文件。然后我就让它一一删除,效果很好://var items []gocb.BulkOpmyQuery := gocb.NewN1qlQuery([Selecting ~ 180k documents from ~1.3mln])rows, err := myBucket.ExecuteN1qlQuery(myQuery, nil)checkErr(err)var idToDelete map[string]interface{}for rows.Next(&idToDelete) {  //items = append(items, &gocb.RemoveOp{Key: idToDelete["id"].(string)})  _, err := myBucket.Remove(idToDelete["id"].(string), 0)  checkErr(err)}if err := rows.Close(); err != nil {  fmt.Println(err.Error())}//err = myBucket.Do(items)
查看完整描述

1 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

默认情况下,针对 N1QL 的查询使用称为“请求加”的一致性级别。因此,您第二次运行程序进行查询将使用查询时有效的任何索引更新,而不是通过等待索引更新来考虑您之前的所有更改。您可以在Couchbase 的开发人员指南中阅读有关此内容的更多信息,看起来您希望通过查询上的一致性方法RequestPlus参数添加到 myquery 中。

这种最终一致的二级索引和灵活性非常强大,因为它使您作为开发人员能够决定要支付的一致性级别,因为索引重新计算是有成本的。


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信