首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >金刚couchbase gocb.RemoveOp -不删除所有

金刚couchbase gocb.RemoveOp -不删除所有
EN

Stack Overflow用户
提问于 2016-01-13 12:55:42
回答 1查看 184关注 0票数 3

我想我在某个地方犯了一个愚蠢的错误,但是很长一段时间我都不知道在哪里:(代码很粗糙,我只是在测试东西。)它删除,但由于某些原因,并非所有的文件,我重写了删除所有一个,这是顺利的。我为Couchbase http://github.com/couchbase/gocb使用正式的软件包,这里是代码:

代码语言:javascript
复制
var items []gocb.BulkOp
myQuery := 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。

然后我就让它一个一个地删除,它运行得很好:

代码语言:javascript
复制
//var items []gocb.BulkOp
myQuery := 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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-19 02:55:53

默认情况下,针对N1QL的查询使用一个名为'request‘的一致性级别。因此,第二次运行要查询的程序将使用查询时有效的任何索引更新,而不是等到索引更新更新后再考虑之前的所有突变。您可以在Couchbase开发人员指南中更多地了解这方面的内容,看起来您希望将参数添加到myquery 通过查询的一致性方法中。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34767338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档